Hƣớng giới hạn của mối quan hệ

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 34)

3.2 CÁC PHÉP BIẾN ĐỔI TRÊN MÔ HÌNH

3.2.4 Hƣớng giới hạn của mối quan hệ

Hình 3-5. Ví dụ chuyển đổi hƣớng giới hạn mối quan hệ

Chuyển đổi này làm giảm hƣớng giữa hai lớp từ hai chiều hƣớng thành một chiều. Chuyển đổi này đƣợc áp dụng khi hai lớp có mối quan hệ hai chiều nhƣng lại không sử dụng đƣợc, có nghĩa là chỉ có một lớp gọi đƣợc lớp khác. Mỗi chiều trong đó một mối quan hệ đƣợc định vị, bổ sung dữ liệu vào lớp mục tiêu cần phải đƣợc lƣu, sau đó đƣa ra tổng chi phí cho việc lƣu trữ, truy cập và kiểm tra dữ liệu. Khi thực hiện chuyển đổi này có thể cải tiến mức chiếm dụng bộ nhớ của chƣơng trình nhờ việc giới hạn hƣớng và số lƣợng truy cập dữ liệu cũng giảm. Hình 3-5 là một ví dụ về phép hƣớng giới hạn mối quan hệ.

3.2.5 Hoạt động đặc trƣng

Phép chuyển đổi này nhằm tạo các hàm đặc trƣng cho mỗi cấu trúc để tránh việc cùng truy cập vào các cấu trúc theo phƣơng pháp tổng quát, phƣơng pháp mới, riêng cho mỗi cấu trúc đƣợc tạo. Hình 3-6 là một ví dụ về phép tạo hoạt động đặc trƣng.

Trong chuyển đổi này toàn bộ số lƣợng truy cập dữ liệu đƣợc giảm do gọi trực tiếp tới hàm của chính cấu trúc đó. Tổng thể bộ nhớ chiếm dụng của ứng dụng không tăng lên vì không có đối tƣợng dữ liệu nào đƣợc tạo ra hay xóa đi.

3.2.6 Chuyển thuộc tính thành tham số

Hình 3-7. Ví dụ chuyển thuộc tính thành tham số

Chuyển đổi này sẽ lập các biến tạm thời nhƣ đầu vào và đầu ra của phƣơng thức/hàm. Khi chƣơng trình đƣợc thực thi thì thuộc tính này đƣợc tạo ra nhƣ một biến cục bộ tạm thời. Trong chuyển đổi này số lƣợng truy cập dữ liệu không thay đổi, khi chức năng của ứng dụng nhƣ trƣớc (nghĩa là thuộc tính vẫn ghi và đọc nhƣ trƣớc đây). Hình 3-7 là một ví dụ về phép chuyển thuộc tính thành tham số.

Chuyển đổi này làm giảm bộ nhớ chiếm dụng theo thời gian sống của ứng dụng. Do các thuộc tính đang đƣợc tạo ra trên stack hiện tại chứ không phải trên heap. Khi nó không đƣợc sử dụng, ví dụ nhƣ không ghi hoặc đọc thì nó không chiếm không gian bộ nhớ.

3.2.7 Loại bỏ các thuộc tính dƣ thừa

Hình 3-8. Ví dụ chuyển đổi loại bỏ các thuộc tính dƣ thừa

Trong chuyển đổi này thì các thuộc tính dƣ thừa đƣợc loại bỏ. Một thuộc tính dƣ thừa, tức là nó không đƣợc sử dụng, đã lƣu hành rồi, đã lấy thông tin rồi. Khi thực hiện chuyển đổi này thì bộ nhớ chiếm dụng giảm do việc xóa đi một thuộc tính. Các thuộc tính thay thế cho các thuộc tính xóa đi sẽ đƣợc phân bổ trong trƣờng hợp khác nên không làm tăng dung lƣợng bộ nhớ cấp phát. Hình 3-8 là một ví dụ về phép loại bỏ các thuộc tính dƣ thừa.

3.2.8 Chuyển thuộc tính thành lớp

Chuyển đổi này nhằm chuyển một thuộc tính thành một lớp riêng kết nối với lớp ban đầu thành một tập hợp. Sử dụng một tập các mối quan hệ dựa vào đặc tính của tập hợp cùng với các đặc tính chính và phụ. Chuyển đổi này nên đƣợc áp dụng khi một thuộc tính lớn, phức tạp và truy cập thƣờng xuyên đƣợc gặp. Hình 3-9 là một ví dụ về phép chuyển đổi thuộc tính thành lớp.

Việc chuyển đổi một thuộc tính thành một lớp không mong đợi làm thay đổi số lƣợng truy cập dữ liệu cũng nhƣ làm giảm dung lƣợng bộ nhớ chiếm dụng. Tuy nhiên chuyển đổi này khởi đầu cho nhiều chuyển đổi với ƣu và nhƣợc điểm khác nhau, nhƣ đã trình bày ở trên.

3.2.9 Thu gọn kiểu dữ liệu

Đây là phép biến đổi đơn giản nhƣng hiệu quả trong cả cải tiến hiệu năng và bộ nhớ. Tƣ tƣởng của phép biến đổi này dựa trên miền giá trị của các thành viên dữ liệu để chuyển kiểu dữ liệu về kiểu nhỏ nhất chứa đƣợc miền giá trị. Để thực hiện phép biến đổi này, trong quá trình thiết kế mô hình dữ liệu cần chỉ rõ miền giá trị của mỗi thuộc tính. Hơn nữa, khi thiết kế siêu mô hình để xây dựng công cụ DSL cũng cần định nghĩa thêm thuộc tính miền giá trị cho mỗi thành viên dữ liệu.

3.2.10Chuyển tham số thành thuộc tính

Dựa trên việc xây dựng hàm đánh giá hiệu năng trình bày phần sau, có thể chứng minh đƣợc thời gian thực thi một phƣơng thức với tham số truyền vào sẽ nhiều hơn thời gian thực thi phƣơng thức đó khi sử dụng các thành phần dữ liệu thay cho các tham số. Điều này hiển nhiên đúng vì việc sử dụng các tham số sẽ mất thêm thời gian cấp phát bộ nhớ và gán giá trị cho các tham số này. Do đó, để cải tiến hiệu năng, chúng tôi đề xuất và xây dựng phép biến đổi chuyển tham số thành thuộc tính. Để đảm bảo việc truy xuất các thành phần tĩnh và động trong chƣơng trình hƣớng đối tƣợng, các tham số của các phƣơng thức tĩnh sẽ đƣợc chuyển thành các thành phần dữ liệu tĩnh và các tham số của các phƣơng thức động sẽ đƣợc chuyển thành các thành phần dữ liệu động.

Mặc dù phép biến đổi này cải tiến hiệu năng nhƣng cũng làm tăng dung lƣợng bộ nhớ chiếm dụng. Điều này có thể chỉ ra dựa vào công thức đánh giá bộ nhớ trong phần sau. Do đó, khi xây dựng chƣơng trình biến đổi tự động trên mô hình để tối ƣu hiệu năng, cần xác định thêm các ràng buộc để không làm dung lƣợng bộ nhớ chiếm dụng tăng nhiều. Điều này rất quan trọng đối với phần mềm nhúng khi bộ nhớ trong các thiết bị nhúng thƣờng có kích thƣớc nhỏ. Ở đây chúng tôi xây dựng ràng buộc thực hiện phép biến đổi này dựa vào tần số sử dụng của các phƣơng thức.

3.2.11Chuyển các thành phần động thành tĩnh

Chƣơng trình sẽ thực thi nhanh hơn khi sử dụng các phƣơng thức và các thuộc tính tĩnh. Do đó, để cải tiến hiệu năng, chúng tôi cũng đƣa ra phép biến đổi là chuyển các thuộc tính đối tƣợng thành các thuộc tính tĩnh và chuyển các phƣơng thức đối tƣợng thành phƣơng thức tĩnh. Tuy phép biến đổi này cải tiến hiệu năng nhƣng cũng làm tăng kích thƣớc bộ nhớ chiếm dụng của chƣơng trình. Điều này sẽ đƣợc chỉ ra trong phần đánh giá bộ nhớ. Vì vậy phép biến đổi này chỉ đƣợc thực hiện khi tần số sử dụng lớn. Đây cũng là tiêu chí để thực hiện biến đổi tự động và tối ƣu.

3.3 Xây dựng hàm đánh giá hiệu năng và bộ nhớ chiếm dụng

Để thực hiện các phép biến đổi trên mô hình chúng ta cần phân tích mô hình và xây dựng các hàm đánh giá. Các hàm đánh giá nhận đầu vào là các tham số đặc tả mô hình, phân tích ảnh hƣởng của các tham số đến các mục tiêu đánh giá nhƣ hiệu năng, bộ nhớ, tiêu thụ điện năng. Sau khi xây dựng, các hàm đánh giá này sẽ đƣợc sử dụng làm tiêu chí lựa chọn trong các bƣớc chuyển đổi cũng nhƣ sử dụng để đánh giá mô hình ban đầu và mô hình tối ƣu. Trong nghiên cứu của Phạm Văn Hƣởng và Nguyễn Ngọc Bình về “Đánh giá hiệu năng phần mềm

nhúng hướng đối tượng từ mô hình Class dựa trên DSL và T4” [17] đã xây dựng

hàm đánh giá hiệu năng phần mềm dựa trên biểu đồ lớp. Để làm cơ sở cho các phép biến đổi và tối ƣu trên mô hình, chúng tôi sẽ cải tiến các công thức đánh giá trong [17] để xây dựng hàm đánh giá hiệu năng và mức chiếm dụng bộ nhớ dựa trên mô hình dữ liệu trừu tƣợng tƣơng tự nhƣ biểu đồ lớp nhƣng không xét tính kế thừa và phạm vi truy xuất của các thành phần [17].

3.3.1 Hàm đánh giá hiệu năng

Hàm đánh giá hiệu năng đƣợc xây dựng dựa trên phân tích hoạt động của một chƣơng trình hƣớng đối tƣợng. Khi chƣơng trình đƣợc yêu cầu thực thi, đầu tiên mã nguồn các lớp sẽ đƣợc nạp vào bộ nhớ, các biến tĩnh và các phƣơng thức tĩnh cũng đƣợc cấp phát bộ nhớ trong thời điểm nạp. Do đó các thành phần tĩnh chỉ mất một lần cấp phát tĩnh và một lần truy xuất bộ nhớ để sử dụng sau khi nạp. Khi sử dụng các biến đối tƣợng và các phƣơng thức đối tƣợng cần tạo và cấp phát bộ nhớ cho đối tƣợng trƣớc. Khi tạo đối tƣợng, cần thực hiện hai bƣớc là truy xuất bộ nhớ để thực hiện câu lệnh tạo đối tƣợng và cấp phát động bộ nhớ cho các biến và phƣơng thức đối tƣợng. Do đó cần một thao tác cấp phát động và hai thao

tác truy xuất bộ nhớ để có thể sử dụng các thành phần thuộc đối tƣợng. Khi thực thi một phƣơng thức tĩnh, cần một thao tác truy xuất bộ nhớ để trỏ đến tập lệnh của phƣơng thức, một lần cấp phát bộ nhớ cho các tham số và sau khi thực hiện cần một lần truy xuất bộ nhớ để tham chiếu đến dữ liệu trả về. Đồng thời, để gọi một phƣơng thức tĩnh cần truy xuất mã nguồn của lớp đang chứa trong bộ nhớ nên quá trình thực thi một phƣơng thức tĩnh cần ít nhất một thao tác cấp phát và ba thao tác truy xuất bộ nhớ. Khi thực thi một phƣơng thức đối tƣợng, cần phải tạo đối tƣợng trƣớc rồi mới gọi thông qua biến tham chiếu đối tƣợng nên cần một thao tác cấp phát động và hai thao tác truy xuất bộ nhớ. Nhƣ vậy toàn bộ quá trình thực hiện của phƣơng thức đối tƣợng cần ít nhất hai thao tác cấp phát bộ nhớ và năm thao tác truy xuất bộ nhớ.

Từ biểu đồ lớp chúng tôi lấy các tham số nhƣ trong Bảng 3.2. Từ các tham số này, chúng tôi đã xây dựng các độ đo từ S1 đến S6 nhƣ mô tả trong Bảng 3.1.

và xây dựng hàm đánh giá hiệu năng dựa trên các độ đo này. Tuy nhiên, để cải tiến hàm đánh giá hiệu năng sử dụng trong biến đổi mô hình, chúng tôi bổ sung thêm tần số sử dụng n của các tham số. Theo đó, các công thức tính các độ đo S1

đến S6 đƣợc cải tiến nhƣ trong các công thức (3.1) đến (3.6). Hàm đánh giá hiệu năng vẫn đƣợc tính theo [17] và đƣợc trình bày trong công thức (3.7). Theo công thức (3.7), hàm hiệu năng có giá trị càng nhỏ càng tốt.

Bảng 3-1. Các độ đo ảnh hƣởng đến hiệu năng

Tham số Ký hiệu Mô tả

Kích thƣớc các biến tĩnh S1 Tổng kích thƣớc các thuộc tính tĩnh trong biểu đồ lớp Kích thƣớc các phƣơng thức tĩnh S2 Tổng kích thƣớc của các method tĩnh trong biểu đồ Kích thƣớc thực thi các phƣơng thức tĩnh S3 Tổng kích thƣớc tham số và kiểu trả về khi thực thi các method static Kích thƣớc các biến đối

tƣợng

S4 Tổng kích thƣớc các thuộc tính nonstatic của đối tƣợng

Kích thƣớc các phƣơng thức đối tƣợng

S5 Tổng kích thƣớc các method nonstatic của đối tƣợng

Kích thƣớc thực thi các phƣơng thức đối tƣợng

S6 Tổng kích thƣớc tham số và kiểu trả về khi thực thi method nonstatic của đối tƣợng

Bảng 3-2. Các tham số sử dụng để đánh giá hiệu năng

Tham số Ký hiệu Mô tả

Các phƣơng thức tĩnh S Là phƣơng thức tĩnh, đƣợc cấp phát bộ nhớ khi nạp chƣơng trình Các phƣơng thức đối tƣợng O Là phƣơng thức non-static, đƣợc cấp phát bộ nhớ động

Các biến tĩnh Xj Là thuộc tính tĩnh, đƣợc cấp phát bộ nhớ khi nạp chƣơng trình. Xj là thuộc tính tĩnh thứ j

trong một lớp

Các biến đối tƣợng Yj Là thuộc tính của đối tƣợng, đƣợc cấp phát bộ nhớ khi đối tƣợng đƣợc tạo. Yj là biến

instance thứ j của lớp Tham số phƣơng

thức

Pk Tham số thứ k của một method Tổng các lớp A Số class trong biểu đồ lớp Tổng các phƣơng

thức tĩnh

Bi Số các phƣơng thức tĩnh trong class i

B Tổng số phƣơng thức tĩnh trong biểu đồ Tổng các thuộc tính

tĩnh

Ci Số các thuộc tính tĩnh trong class i

C Tổng số thuộc tính tĩnh trong biểu đồ Tổng các phƣơng

thức đối tƣợng

Di Số các phƣơng thức non-static trong class i

D Tổng số phƣơng thức non-static trong biểu đồ Tổng các thuộc tính

đối tƣợng

Ei Số các thuộc tính non-static trong class i

E Tổng số các thuộc tính non-static trong biểu đồ

Tổng các tham số Fj Số các tham số trong phƣơng thức j

(3.1)

(3.2)

(3.4)

(3.5)

(3.6) (3.7)

3.3.2 Hàm đánh giá bộ nhớ

Trong quá trình thực thi một chƣơng trình hƣớng đối tƣợng, các thành phần thuộc lớp sẽ đƣợc cấp phát bộ nhớ và tồn tại đến khi kết thúc chƣơng trình; các thành phần thuộc đối tƣợng bắt đầu đƣợc cấp phát bộ nhớ khi đối tƣợng đƣợc tạo và tồn tại đến khi hủy đối tƣợng; các tham số và các biến cục bộ bên trong phƣơng thức tĩnh hoặc động đƣợc cấp phát bộ nhớ khi phƣơng thức đƣợc gọi và bị thu hồi bộ nhớ khi phƣơng thức kết thúc. Theo đó, hàm đánh giá mức chiếm dụng bộ nhớ có thể tính theo công thức (3.8). Ở đây, công thức (3.8) không sử dụng để tính dung lƣợng bộ nhớ chiếm dụng mà chỉ đƣợc sử dụng để đánh giá xem mô hình nào chiếm dụng bộ nhớ nhiều hơn. Theo công thức (3.8), hàm đánh giá bộ nhớ có giá trị càng nhỏ càng tốt.

(3.8)

3.4 Định nghĩa DSL, xây dựng framework và tạo mẫu T43.4.1 Định nghĩa DSL và xây dựng framework 3.4.1 Định nghĩa DSL và xây dựng framework

Để triển khai phƣơng pháp tối ƣu dựa trên biến đổi mô hình tự động, chúng ta cần xây dựng mô hình dữ liệu hệ thống. Mô hình này tƣơng tự nhƣ biểu đồ lớp nhƣng không xét tính kế thừa và phạm vi truy xuất của các thành phần. Theo đó, mô hình bao gồm một tập các cấu trúc và quan hệ giữa các cấu trúc. Mỗi cấu trúc bao gồm một tập các thành phần dữ liệu và tập các thao tác. Mỗi thành phần dữ liệu đƣợc đặc tả bao gồm tên, kiểu dữ liệu, loại tĩnh hay động và tần số truy xuất đƣợc ƣớc lƣợng. Đồng thời, mỗi thành phần dữ liệu cũng có thêm đặc tả về miền giá trị. Mỗi thao tác đƣợc đặc tả gồm tên, kiểu dữ liệu trả về, loại tĩnh hay động và tần số thực hiện cũng đƣợc ƣớc lƣợng. Để xây dựng DSL đặc tả dữ liệu, chúng

ta định nghĩa các lớp lôgic và các lớp ký hiệu nhƣ trong Bảng 3.3. Sau đó xây dựng siêu mô hình.

Bảng 3-1. Các lớp ngữ nghĩa và trực quan chính trong siêu mô hình

Lớp ngữ nghĩa Mô tả Lớp trực quan tƣơng

ứng

Comment Lớp biểu diễn chú thích CommentBoxShape

ModelClass Lớp biểu diễn một cấu trúc ClassShape ModelAttribute Lớp biểu diễn một thành phần

dữ liệu

Không có ModelOperation Lớp biểu diễn một hàm Không có ModelMultiAssociati

on

Lớp biểu diễn một liên kết giữa hai cấu trúc

AssociationConnector

3.4.2 Tạo mẫu T4 để sinh tham số tự động từ mô hình

Trong phần này chúng tôi sẽ định nghĩa các mẫu theo chuẩn công nghệ T4 và sử dụng để trích xuất các tham số từ biểu đồ lớp. T4 đọc tệp mô hình thiết kế thực tế và tệp XML định nghĩa DSL để từ các ký hiệu hình học trong mô hình thực tế sẽ chuyển thành các thành phần lôgic rồi phân tích và sinh mã phù hợp theo các template, thực hiện theo các bƣớc sau:

- Thiết kế biểu đồ lớp theo DSL đã đƣợc xây dựng ở phần trƣớc - Cập nhật các tham số của biểu đồ đã đƣợc thiết kế

- Thêm tập tin có phần mở rộng .tt vào dự án

Định nghĩa các mẫu theo chuẩn công nghệ T4 và sử dụng để trích xuất các tham số về Name, Frequence từ biểu đồ.

Hình 3-11. Cập nhật các tham số thành phần của biểu đồ

Hình 3-12. Một mẫu đƣợc xây dựng theo T4 để sinh tham số Name và Frequence từ biểu đồ lớp

Tập tin đầu ra có kiểu là .txt đã trích xuất các tham số từ biểu đồ.

Hình 3-13. Tập tin đầu ra của T4 trích xuất các tham số từ biểu đồ

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 34)

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

(90 trang)