“Vẽ đồ thị”: nhập hàm toán học, ứng dụng thực hiện vẽ đồ thị theo hàm nhập vào.
4.5.2 Thiết kế lớp gốc
Dựa vào DSL đã xây dựng trong chƣơng trƣớc để thiết kế mô hình dữ liệu ban đầu cho ứng dụng Vẽ đồ thị. Biểu đồ lớp ban đầu của ứng dụng đƣợc thiết kế nhƣ hình 4-35.
Hình 4-36. Tệp XML của biểu đồ lớp D1
Sau khi thiết kế xong biểu đồ chúng ta sẽ bổ sung thông tin về thuộc tính tần số truy suất các thành phần của lớp, nhƣ Hình 4-37, tên thuộc tính có tên là +max: int và thông tin về tuần suất truy suất của thuộc tính là 2000 lần.
Hình 4-37. Thuộc tính tần số truy xuất thành phần trong biểu đồ lớp D1
4.5.3 Biến đổi mô hình lớp
Để thực hiện các phép biến đổi mô hình tự động để tối ƣu hiệu năng, chúng tôi sử dụng chƣơng trình tối ƣu mức mô hình đã xây dựng ở trên. Chƣơng trình tối ƣu sử dụng T4 để chuyển từ tệp mô hình sang biểu diễn toán học dạng tập
hợp, phân tích tần suất truy xuất các thành phần của lớp và thực hiện phép biến đổi phân chia cấu trúc dựa theo thuật toán K-mean và chuyển thành phần động thành tĩnh, loại bỏ thuộc tính dƣ thừa. Sau khi phân chia sẽ thu đƣợc mô hình dữ liệu mới. Mô hình dữ liệu mới này cũng đƣợc biểu diễn sang tập hợp của mô hình mới. Từ mô hình dữ liệu mới dạng tập hợp, có thể thực hiện sinh mã hoặc chuyển sang mô hình trực quan. Để sinh ngƣợc lại mô hình trực quan, chƣơng trình tối ƣu sẽ phân tích biểu diễn tập hợp của mô hình và ghi ra tệp XML theo cấu trúc của DSL đã định nghĩa.
Hình 4-35. Chƣơng trình thực hiện phép phân chia cấu trúc biểu đồ lớp D
Hình 4-37. Tệp XML đƣợc tạo từ chƣơng trình tối ƣu D
Sau khi chƣơng trình tối ƣu phân tích biểu diễn tập hợp của mô hình ban đầu và ghi ra tệp XML theo cấu trúc của DSL đã định nghĩa thì mô hình dữ liệu cải tiến dựa trên phân chia cấu trúc nhƣ Hình 4-41 đƣợc tạo thành.
Biểu đồ lớp D2
Hình 4-4239. Tệp tham số dựa trên các T4 templates của D
4.5.4 Đánh giá hiệu năng và lựa chọn mô hình tốt hơn
Chƣơng trình tối ƣu sẽ nhận đầu vào là tập các tệp tham số tƣơng ứng với các mô hình và tính toán hàm đánh giá hiệu năng theo thuật toán đã cài đặt cho mô hình ban đầu và mô hình tối ƣu để lựa chọn mô hình tốt hơn.
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 2009
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();