Tính toán hiệu năng và bộ nhớ cho mỗi biểu đồ lớ pD

Một phần của tài liệu (LUẬN văn THẠC sĩ) tối ưu phần mềm nhúng trong giai đoạn thiết kế dựa trên chuyển đổi mô hình (Trang 75 - 90)

Hình 4-44. Biểu đồ so sánh tối ƣu hiệu năng và bộ nhớ chiếm dụng của biểu đồ lớp D

Biểu đồ ở Hình 4-44 là kết quả tối ƣu hiệu năng và tối ƣu bộ nhớ chiếm dụng. Trong biểu đồ này, nếu chúng ta muốn tối ƣu hiệu năng thì biểu đồ lớp D2 đƣợc lựa chọn vì có hiệu năng tốt hơn, giá trị của hàm mục tiêu là nhỏ hơn và biểu đồ lớp D1 đƣợc lựa chọn nếu chúng tôi muốn tối ƣu bộ nhớ vì có bộ nhớ chiếm dụng tốt hơn, giá trị hàm mục tiêu là nhỏ hơn. Kết quả tối ƣu bộ nhớ chiếm dụng ở đây đƣợc sử dụng để đánh giá xem mô hình nào chiếm dụng bộ nhớ nhiều hơn, chúng tôi sẽ không cài đặt các chƣơng trình để kiểm tra kết quả tối ƣu bộ nhớ chiếm dụng mà chỉ cài đặt các chƣơng trình để kiểm tra kết quả tối ƣu hiệu năng.

Sau khi thực hiện tối ƣu hiệu năng từ biểu đồ lớp, chúng tôi đã cài đặt các chƣơng trình khác nhau tƣơng ứng với với các mô hình lớp để thực thi và kiểm tra hiệu năng thực tế. Tập lệnh và thuật toán chƣơng trình giống nhau, các chƣơng trình chỉ khác nhau về cấu trúc và các loại thuộc tính. Điều này nhằm tránh ảnh hƣởng của phần cài đặt đến việc đánh giá mức mô hình. Cuối cùng, thực hiện các chƣơng trình, thống kê và đánh giá hiệu năng thực nghiệm so với phƣơng pháp đã cài đặt. Mỗi chƣơng trình thực hiện chúng tôi vẽ hàm f(x) = sin(x), - Độ trễ (ms): =2, chƣơng trình chạy 20 lần trên cùng một môi trƣờng thực

tế, tính thời gian thực thi trung bình để đánh giá hiệu năng thực tế của chƣơng trình theo mô hình ban đầu và mô hình tối ƣu. Giao diện chƣơng trình và kết quả đƣợc thống kê trong bảng.

Hình 4-45. Giao diện chƣơng trình Vẽ đồ thị Bảng 4-7. So sánh hiệu năng thực tế các chƣơng trình Vẽ đồ thị

Thực nghiệm 4/1 Chƣơng trình 1 Chƣơng trình 2

Lần 1 4025 4023 Lần 2 3996 3998 Lần 3 3998 3997 Lần 4 3998 3997 Lần 5 3998 3996 Lần 6 3998 3996 Lần 7 3996 3997 Lần 8 3997 3996 Lần 9 3996 3997 Lần 10 3997 3997 Lần 11 3996 3996 Lần 12 3997 3997 Lần 13 3996 3996 Lần 14 3997 3996 Lần 15 3996 3996 Lần 16 3996 3998 Lần 17 3997 3996 Lần 18 3997 3997 Lần 19 3996 3996 Lần 20 3996 3996 Trung bình (ms) 3998.15 3997.9

Từ kết quả trên chúng tôi so sánh hiệu năng tính toán của mô hình ban đầu và mô hình tối ƣu có tỷ lệ giảm 0.4%, thời gian chạy thực tế chƣơng trình Vẽ đồ thị khi cài đặt mô hình ban đầu và mô hình tối ƣu có tỷ lệ giảm 0.00625%.

Bảng 4-8. So sánh tỷ lệ giảm khi chạy chƣơng trình Vẽ đồ thị

Mô hình lớp Hiệu năng tính toán Thời gian thực hiện (ms)

Ban đầu 15744 3998.15

Tối ƣu 15680 3997.9

Tỷ lệ giảm 0.4065040650406% 0.0062528919625%

Ngoài ra, chúng tôi tiến hành thực nghiệm trên một số chƣơng trình đơn giản khác nhƣ Game Snake, Mã đi tuần cũng thu đƣợc các kết quả tƣơng tự.

Tổng kết chƣơng

Cho đến hiện tại thì không có nhiều nghiên cứu về tối ưu phần mềm nhúng dựa trên chuyển đổi mô hình

. Cụ thể như so với nghiên cứu của Anne Keller về “Tối ưu cấu trúc dữ liệu phần mềm nhúng ở mức mô hình” (Optimizing Abstract Data Types in Embedded Applications at Modeling Level), thì luận văn của tôi đã có quy trình xây dựng DSL hỗ trợ thiết kế mô hình dữ liệu của ứng dụng tích hợp công nghệ sinh mã T4 để trích suất tham số từ mô hình. Ngoài ra luận văn cũng đã có chương trình tối ưu hóa cài đặt phép biến đổi phân chia cấu trúc và chuyển thành phần động thành tĩnh và cài đặt công thức đánh giá hiệu năng và bộ nhớ chiếm dụng từ biểu đồ lớp, để từ đó chúng ta có thể so sánh và lựa chọn được biều đổ lớp tối ưu hơn. Kết quả thực nghiệm đã kiểm chứng cho các nghiên cứu ở trên.

KẾT LUẬN VÀ HƢỚNG PHÁT TRIỀN

Tối ƣu dựa trên biến đổi mô hình là một hƣớng tối ƣu theo cách tiếp cận đánh giá trực tiếp mô hình hiện đang đƣợc quan tâm nghiên cứu nhƣng vẫn còn gặp nhiều thách thức. Do vậy luận văn đã phát triển phƣơng pháp tối ƣu phần mềm nhúng dựa trên biến đổi mô hình và xây dựng chƣơng trình tối ƣu cũng nhƣ công cụ hỗ trợ. Từ biểu đồ lớp chúng ta phân tích các tham số, xây dựng các hàm đánh giá hiệu năng và mức chiếm dụng bộ nhớ để sử dụng làm tiêu chí lựa chọn. Các phép biến đổi mô hình cũng đƣợc xây dựng để chuyển đổi mô hình ban đầu sang mô hình tối ƣu. Quá trình tối ƣu đƣợc tiến hành tự động dựa trên ngôn ngữ miền chuyên dụng (DSL) và công nghệ sinh mã T4.

Cụ thể về lý thuyết, luận văn đã bổ sung tham số vào hàm đánh giá hiệu năng từ mô hình phần mềm, tìm hiểu hàm đánh giá bộ nhớ và ba phép biến đổi mới để tối ƣu hiệu năng. Về thực nghiệm, luận văn cũng đã xây dựng framework DSL, T4 để thiết kế và sinh thông tin đặc tả, tham số tự động và xây dựng chƣơng trình tối ƣu cho phép chuyển đổi mô hình để tối ƣu hiệu năng, dung lƣợng bộ nhớ chiếm dụng, xây dựng chƣơng trình cài đặt và so sánh hàm đánh giá hiệu năng và bộ nhớ chiếm dụng.

Mặc dù thu đƣợc một số kết quả khả quan nhƣng vấn đề tối ƣu trong giai đoạn thiết kế vẫn còn nhiều thách thức và bài toán tối ƣu dựa trên chuyển đổi mô hình cũng cần đƣợc giải quyết đầy đủ và tự động. Trong luận văn này, chúng tôi đã giới hạn bài toán không xét đến tính kế thừa giữa các cấu trúc cũng nhƣ tính bao gói và phạm vi truy xuất của các thành phần bên trong cấu trúc. Mở rộng cho các nghiên cứu tiếp sau, chúng tôi có thể tiếp tục nghiên cứu sâu hơn về tối ƣu dựa trên chuyển đổi mô hình đầy đủ hơn xét các mô hình động nhƣ mô hình tuần tự, mô hình trạng thái; đánh giá các khía cạnh khác của mô hình nhƣ tính cấu trúc, tính bao gói, tính kế thừa và khả năng tái sử dụng. Ngoài ra chúng tôi sẽ tiến hành thực nghiệm đầy đủ các phép biến đổi còn lại hoặc kết hợp giữa các phép biến đổi để tối ƣu.

TÀI LIỆU THAM KHẢO Tiếng việt

1. Phạm Thƣợng Cát, “Hệ thống nhúng và sự phát triển của công nghệ thông tin”, Tạp chí Tin học và Điều khiển, Tr. 1-9, 2005

2. Nguyễn Ngọc Bình, ”Công nghệ phần mềm nhúng”, Nhà xuất bản Đại học quốc gia Hà Nội, Tr. xii-xvi, 1-11, 2014

Tiếng anh

3. Anne Keller, Optimizing Abstract Data Types in Embedded Applications at Modeling Level, November 2006

4. Armita Peymandoust, Tajana Simunic, Giovanni De Micheli, “Low Power

Embedded Software Optimization using Symbolic Algebra”, 2002

5. Angyoon Oh and Geoffrey C. Fox, “Optimizing Web Service Messaging

Performance in Mobile Computing’, Community Grids Lab, Indiana

University, Bloomington, Indiana, 47404, USA 2008

6. Feeney, L. & Nilsson, M., “Investigating the energy consumption of a

wireless network interface in an ad hoc networking environment”, IEEE

INFOCOM, 2001, 3

7. Forum Nokia, “Optimizing the Client/Server Communication for Mobile

Applications”, February 28, 2003

8. J. L. Bentley. Programming pearls: Little languages. Communications of the ACM, 29(8):711–721, August 1986.

9. Liu, T.; Sadler, C.; Zhang, P. & Martonosi, M., “Implementing software on

resource-constrained mobile sensors: experiences with impala and zebranet” Proceedings of the 2nd international conference on Mobile

systems, applications, and services, 2004

10.Makiko Itoh, Yoshinori Takeuchi, Masaharu Imai, and AkichikAkichika Shiomi: "Synthesizable HDL Generation for Pipelined Processors from a Micro-Operation Description," IEICE Transactions on Fundamentals of

Electronics, Communications and Computer Sciences, Vol. E83-A, No. 3, pp. 394-400, March 2000. Embedded Systems in UML - Stephen J Mellor 11.Michalis Anastasopoulos, Thomas Forster, and Dirk Muthig, “Optimizing

Model-driven Development by deriving Code Generation Patterns from Product line architectures”, D-67661 Kaiserslautern, Germany, 2005

12.Nattawut Thepayasuwan, Alex Doboli. “Hardware-software co-design of

resource constrained systems on a chip”, Distributed Computing Systems

Workshops, Proceedings 24th International Conference, pp. 818-823, Mar 2004

13.N. N. Binh, M. Imai, A. Shiomi, N. Hikichi, and J. Sato, "A New Method

for Hardware/Software Codesign of Pipelined Instruction Set Processor"

Proceedings of 6th Tokai-shibu Electric Conference, Nov. 1994

14.P.H. Salus, editor. Little Languages, volume III of Handbook of Programming Languages. MacMillan, 1998.

15.Pospiech F, Olsen S. “Embedded software in the SoC world. How HdS

helps to face the HW and SW design challenge”. IEEE, pp:653 – 658, 21-

24 Sept. 2003

16.Poole, J., “Model-driven architecture: Vision, standards and emerging

technologies” Workshop on Metamodeling and Adaptive Object Models,

ECOOP, 2005

17.P.V. Huong, N.N Binh, “Class Diagram Based Evaluation of Software

Performance”, Proceedings of The 2012 International Conference on

Information and Digital Engineering (ICIDE 2012), SPIE, Vol. 8768, pp. 211-217, Singapore, 10/2012 (DOI: 10.1117/12.2008322, http://spie.org/x648.html?product_id=2008322).

18.Quan Long, Zhiming Liu, Xiaoshan Li, and He Jifeng. Consistent Code Generation from UML Models. In ASWEC ’05: Proceedings of the 2005 Australian conference on Software Engineering, pages 23–30,Washington, DC, USA, 2005. IEEE Computer Society.

19.Sangyoon Oh, Mehmet S. Aktas, Marlon Pierce, Geoffrey C. Fox, “Optimizing Web Service Messaging Performance Using a Context Store for Static Data”

20.Sanna Sivonen, “Domain-specific modelling language and code generator for developing repository-based Eclipse plug-ins”, ESPOO 2008

21.Vivy Suhendra, “Memory optimizations for time – Predictable embedded software”, A Thesis the degree of doctor, national university of Singapore

22.Wonchul Lee, Wonyong Sung, “Software optimization of MPEG audio

layer3 for a 32bit RISC processor”, APCCAS '02 Asia-Pacific

Conference, Vol. 1, pp. 435-438, Oct. 2002

23.Yong-Yoon Cho, Jong-Bae Moon, and Young-Chul Kim, “A System for

Performance Evaluation of Embedded Software”, Engineering and

Technology 2005

24.Zhihui Yang, “A Domain-Specific modeling approach for Component- Based software”, The doctor degree, Muncie, Indiana, 2009

Danh sách các website 25.http://tndhuy.wordpress.com/2011/06/15/domain-specific-language-in- visual-studio/ 26.http://www.rose-hulman.edu/Users/faculty/young/CS-Classes/csse490- mbse/SlidePDFs/session15.pdf 27.http://www.olegsych.com/2007/12/text-template-transformation-toolkit/ 28.http://bupbegiandon.wordpress.com/ 29.http://msdn.microsoft.com/en-us/subscriptions/cc677256.aspx 30.http://www.olegsych.com/2007/12/

PHỤ LỤC

1. Mã chƣơng trình chính bài toán “Tháp Hà Nội” protected override void OnPaint(PaintEventArgs e) {

Graphics gr1 = e.Graphics;

Pen pen1 = new Pen(Color.Blue, 5); // cột 1 gr1.DrawRectangle(pen1, 100, 200, 5, 250); pen1.Width = 10; gr1.DrawEllipse(pen1, 32, 420, 150, 50); // cột 2 pen1.Width = 5; gr1.DrawRectangle(pen1, 295, 200, 5, 250); pen1.Width = 10; gr1.DrawEllipse(pen1, 225, 420, 150, 50); // cột 3 pen1.Width = 5; gr1.DrawRectangle(pen1, 500, 200, 5, 250); pen1.Width = 10; gr1.DrawEllipse(pen1, 430, 420, 150, 50); }

private void Form1_Load(object sender, EventArgs e) {

this.Top = 1; // để cho vị trí đặt form là 1,1 trên màn hình this.Left = 1;

player.URL = "nhac.wav";

}

public void chuyen(int n, int x_di, ref int d_thapDi, int x_Den, ref int d_thapDen)

{ //

// delay //

hoanh = this.piBo[n - 1].Location.X;

tam = this.piBo[n - 1].Size.Width;// do rong cua dia tam = tam / 2;

{

case 25: x_Den = x_Den + (75 - tam); break; case 235: x_Den = x_Den + (60 - tam); break; case 435: x_Den = x_Den + (65 - tam); break; }

// muc đích là để chuyển tháp đƣợc chính giữa cột Thread.Sleep(1000); //tạm dừng chƣơng trình

this.piBo[n - 1].Location = new Point(hoanh, 100); Thread.Sleep(1000);

this.piBo[n - 1].Location = new Point(270, 100); Thread.Sleep(1000); //tạm dừng chƣơng trình

this.piBo[n - 1].Location = new Point(x_Den, d_thapDen); //x_di = x_Den; d_thapDen -= 10; d_thapDi += 10; // //delay // }

private void chuyenthap(int n, int x_goc, int d_thapGoc, int x_thapDich, int d_thapDich, int x_tam, int d_tam)

{ if (n < 1) return; else { if (n == 1) {

this.chuyen(1, x_goc, ref d_thapGoc, x_thapDich, ref d_thapDich);

} else {

this.chuyenthap(n - 1, x_goc, d_thapGoc, x_tam, d_tam,

x_thapDich, d_thapDich);// chuyen n-1 dia tren sang cot tam de chuyen tang duoi cung đến cot đích

this.chuyen(n, x_goc, ref d_thapGoc, x_thapDich, ref d_thapDich); // chuyển đĩa dƣới cùng đến tháp đích

this.chuyenthap(n - 1, x_tam, d_tam, x_thapDich, d_thapDich,

x_goc, d_thapGoc); // chuyen n-1 dia nam tren dia lon nhat o cot dich

} }

2.Mã chƣơng trình chính bài toán “8 quân hậu”

private void btnStart_Click(object sender, EventArgs e) {

DateTime Start = new DateTime(); DateTime End = new DateTime(); Stopwatch s1 = Stopwatch.StartNew(); Start = DateTime.Now;

GeneticAlgo geneticAlgo = new GeneticAlgo(); List<Chromosome> initPopulation =

GetInitialPopulation((int)txtPop.Value); if(chkPorgress.Checked)

geneticAlgo.progress +=new Progress(updateProgress); progressBar1.Maximum = (int)txtGen.Value;

progressBar1.Value = 0;

geneticAlgo.DoMating(ref initPopulation, (int)txtGen.Value, (double)txtCrosProb.Value, (double)txtMutProb.Value);

dgResults.Rows.Clear();

for (int i = 0; i < initPopulation.Count - 1; i++) {

String sol = "| ";

for (int j = 0; j < 8; j++) {

sol = sol + initPopulation[i].genes[j] + " | "; }

dgResults.Rows.Add(new Object[] { sol, initPopulation[i].fitness }); } board1.Genes = initPopulation[0].genes; s1.Stop(); End = DateTime.Now; // System.TimeSpan y = End.Subtract(Start); string x = "";

x = "Start time: " + Start.ToString() + " " +

Start.Millisecond.ToString() + "ms;" + " End time:" + End.ToString() + " " + End.Millisecond.ToString() + "ms;" + " Execution time: " +

Convert.ToString(s1.ElapsedMilliseconds) + "ms"; MessageBox.Show(x);

}

{

progressBar1.Value = progress;

int percent = (int)(((double)(progressBar1.Value - progressBar1.Minimum) /

(double)(progressBar1.Maximum - progressBar1.Minimum)) * 100); using (Graphics gr = progressBar1.CreateGraphics())

{ gr.DrawString(percent.ToString() + "%", SystemFonts.DefaultFont, Brushes.Black, new PointF(progressBar1.Width / 2 - (gr.MeasureString(percent.ToString() + "%", SystemFonts.DefaultFont).Width / 2.0F), progressBar1.Height / 2 - (gr.MeasureString(percent.ToString() + "%", SystemFonts.DefaultFont).Height / 2.0F))); } }

private List<Chromosome> GetInitialPopulation(int population) {

List<Chromosome> initPop = new List<Chromosome>(); GeneticAlgo RandomGen = new GeneticAlgo();

for (int i = 0; i < population; i++) {

List<int> genes = new List<int>(new int[] {0, 1, 2, 3, 4, 5, 6, 7}); Chromosome chromosome = new Chromosome();

chromosome.genes = new int[8]; for (int j = 0; j < 8; j++) { int geneIndex = (int)(RandomGen.GetRandomVal(0,genes.Count-1)+0.5); chromosome.genes[j] = genes[geneIndex]; genes.RemoveAt(geneIndex); } initPop.Add(chromosome); } return initPop; }

public bool PerformSort() {

bool bOK = false; if (nData != null)

bOK = ExecuteActualSort(0, nData.GetUpperBound(0), true); return bOK;

}

// Sort the whole array in either ascending or descending order // Parameters:

// bool bAscend: true - sort in ascending order // : false - sort in descending order public bool PerformSort(bool bAscend) {

bool bOK = false; if (nData != null)

bOK = ExecuteActualSort(0, nData.GetUpperBound(0), bAscend);

return bOK; }

// Sort the array between a low and high bound in either ascending or descending order

// Parameters:

// int nFirst : must be between 0 and the upper bound of the array. // : will be clamped to zero if out of range.

// int nLast : must be between 0 and the upper bound of the array. // : must be greater than nFirst.

// : will be clamped to the upper bound of the array if out of range.

// bool bAscend: true - sort in ascending order // : false - sort in descending order

public bool PerformSort(int nFirst, int nLast, bool bAscend) {

bool bOK = false; if (nData != null) {

if (nFirst < 0) nFirst = 0;

else if (nFirst > nUpperBound) nFirst = 0; if (nLast <= nFirst) nLast = nUpperBound; if (nLast > nUpperBound) nLast = nUpperBound; if (nFirst < nLast)

bOK = ExecuteActualSort(nFirst, nLast, bAscend); }

return bOK; }

// Sort the array between a low and high bound in either ascending or descending order

// Parameters:

// int nFirst : between 0 and the upper bound of the array. // int nLast : between 0 and the upper bound of the array. // : will be greater than nFirst.

// bool bAscend: true - sort in ascending order // : false - sort in descending order

private bool ExecuteActualSort(int nFirst, int nLast, bool bAscend) {

bool bSortOK = false; try

{

int i, j, nStkPtr = 0, nTmp;

bool bSortCompleted = false, bDirection = true; // get the maximum size of stack required:

int nStackMax = (int)((Math.Log(nLast) + 3) * 2); // from Knuth Vol 3.

// Note, +3 is added because:

// +1 to round up rather than down,

// +1 because it's a full bottom-up stack (ie Stack[0] is never used), // +1 because data array is zero-indexed.

do { do { i = nFirst; j = nLast; bDirection = true; do {

if ((nData[i] > nData[j]) == bAscend) {

// Swap the two items in the list pointed to by i and j nTmp = nData[i]; nData[i] = nData[j]; nData[j] = nTmp; bDirection = !bDirection; } if (bDirection) j--; else i++; } while (i < j); if (i + 1 < nLast) {

// There's another partition to be sorted nStkPtr++; nStack[nStkPtr, 0] = i + 1; nStack[nStkPtr, 1] = nLast; } nLast = i - 1; }

while (nFirst < nLast); if (nStkPtr == 0) {

} else {

// Pop the most recently stored partition and sort that nFirst = nStack[nStkPtr, 0]; nLast = nStack[nStkPtr, 1]; nStkPtr--; } } while (!bSortCompleted); bSortOK = true; } catch { } return bSortOK; }

Một phần của tài liệu (LUẬN văn THẠC sĩ) tối ưu phần mềm nhúng trong giai đoạn thiết kế dựa trên chuyển đổi mô hình (Trang 75 - 90)

Tải bản đầy đủ (PDF)

(90 trang)