Mô tả các bước cấu trúc lên HTA

Một phần của tài liệu Các cấu trúc khung cho lập trình đa lõi (Trang 64 - 73)

5 Kết luận và hướng phát triển

4.10Mô tả các bước cấu trúc lên HTA

• Miếng lợp (M1 M2) và Miếng lợp (M1 M2) là hai HTA không giống nhau.

Trong luận văn này, chỉ đề cập đến HTA đồng nhất.

4.3 Homomorphism

Cho trước các hàm km, kt, ⊕ và ⊗.

sau:

h (Mata) =km (a) h (Tile x) =kt (h x) h (xy) = (h x)⊕(h y) h (xy) = (h x)⊗(h y)

Trong đó, hai hàm⊕ và⊗phải thỏa mãn tính chất kết hợp. Hàmh được ký hiệu bởi homHT A(km, kt,⊕,⊗)

Xét một ví dụ về hàm layer là một homomorphism của HTA. Hàm này tính toán xem HTA đầu vào có tối đa bao nhiêu mức.

layer (Mata) = 0

layer (Tile x) = 1 + (layer x)

layer (xy) = (layer x)Max (layer x) layer (xy) = (layer x)Max (layer x)

4.4 Xây dựng các cấu trúc khung cho cấu trúcdữ liệu HTA dữ liệu HTA

Dựa trên định nghĩa về homomorphism, rõ ràng homomorphism này là tốt để có thế song song hóa. Tuy nhiên cần phải đưa ra các homomorphism cụ thể để mô tả tốt hơn cho các giải thuật tính toán. Các homomorphism này chính là các cấu trúc khung trên cấu trúc dữ liệu HTA.

Luận văn đưa ra 3 cấu trúc khung hay được sử dụng là: map, reduce, và

zipwith

4.4.1 Cấu trúc khung map

Cấu trúc khung map áp dụng một hàm f trên tất cả các phần tử cơ bản ở mọi mức của HTA. Sau khi áp dụng cấu trúc khung, cấu trúc của HTA vẫn giữ nguyên.

Cấu trúc khung map được định nghĩa như sau:

map(f) (Mat a) =f (a) map(f) (Tile x) =Tile x

map(f) (xy) = (map(f) x)⊕(map(f) y) map(f) (xy) = (map(f) xx)⊗(map(f) y)

4.4.2 Cấu trúc khung reduce

Cấu trúc khung reduce nhận vào hai đối số là hai hàm có tính kết hợp ⊕ và

⊗. Hai hàm này áp dụng cho các phần tử của HTA ở từng mức, kết quả là một Ma trận vô hướng.

reduce(⊕,⊗) (Mata) = a

reduce(⊕,⊗) (Tile x) = reduce(⊕,⊗)x

reduce(⊕,⊗) (xy) = (reduce(⊕,⊗)x)⊕(reduce(⊕,⊗)y) reduce(⊕,⊗) (xy) = ((reduce(⊕,⊗) x))⊗(reduce(⊕,⊗) y)

Có thể mở rộng cấu trúc khung này thành một cấu trúc khung mớihreduce

để áp dụng hai hàm đầu vào từ mức i1 đến mứci2 trong cấu trúc của HTA, giá trị trả về sẽ là một HTA thay vì ma trận vô hướng. Tuy nhiên trong phạm vi luận văn, chỉ dừng lại ở cấu trúc khung reduce.

4.4.3 Cấu trúc khung zipwith

Cấu trúc khung zipwith sử dụng để kết hợp hai cấu trúc dữ liệu HTA thành một HTA mới, đầu vào của zipwithlà hai HTA và một hàm để kết hợp.

zipwith(f)(Mat a) (Mat a) =f a a (adsbygoogle = window.adsbygoogle || []).push({});

zipwith(f)(Tile x) (Tile x) = Tile (zipwith(f) x y)

zipwith(f)(xy) (uv) = (zipwith(f) x u)(zipwith(f) y v) zipwith(f)(xy) (uv) = (zipwith(f) x u)(zipwith(f) y v)

Cấu trúc khung zipwith đòi hỏi hai HTA đầu vào phải có cấu trúc giống hệt nhau.

Kết luận và hướng phát triển

5.1 Kết luận

Luận văn đã trình bày rõ được về lập trình song song theo cấu trúc khung, đây là một hướng lập trình có cấu trúc áp dụng cho các giải thuật song song. Tuy nhiên như vậy là chưa đủ, bởi lẽ việc thiết kế ra cấu trúc khung mang tính chất đặc thù cho từng lĩnh vực, nên việc mở rộng, kết hợp các cấu trúc khung là khó khăn.

Lý thuyết tính toán trên giải thuật là lý thuyết quan trọng trong lĩnh vực Đại số cho lập trình, đây là một hướng đi đầy hứa hẹn để phát triển chương trình một cách có hệ thống, nó áp dụng các tính chất đại số của toán học lên các giải thuật của chương trình, các luật suy diễn để Chuyển đổi giải thuật được chứng minh hết sức chặt chẽ. Do vậy việc đưa ra các chương trình hiệu quả là rõ ràng và đúng đắn.

Sự kết hợp giữa Lập trình song song theo cấu trúc khung và Lý thuyết tính toán trên giải thuật làm cho lập trình song song gần gũi hơn với người sử dụng, và quá trình phát triển các phiên bản thực thi là rất rõ ràng, vì bản thân phần thiết kế các cấu trúc khung đã bao hàm tính song song rất cao.

Luận văn cũng đã đi sâu trình bày về các cấu trúc khung cho hai cấu trúc dữ liệu cơ bản là Danh sách và Ma trận. Đây là hai kiểu dữ liệu cơ bản, nhưng sử dụng phổ biến trong nhiều bài toán. Phiên bản thực thi của hai cấu trúc dữ liệu này đã được đóng gói trong thư viện Lập trình SkeTo [13], [8]. Các cấu trúc khung cho kiểu dữ liệu cây [9] cũng đã được phát triển tuy nhiên chưa có phiên bản thực thi trong thư viện SkeTo tính tại thời điểm của luận văn này.

Điểm mới trong luận văn đó là đưa ra được định nghĩa đại số cho cấu trúc dữ liệu HTA. Cấu trúc HTA là thuận lợi để mô tả các giải thuật khối cho ma trận [2], tuy nhiên trước đó chưa có một phương pháp rõ ràng để phát triển các chương trình dựa trên cấu trúc dữ liệu này. Hơn nữa, cấu trúc dữ liệu HTA tối ưu được tính cục bộ khi sử dụng bộ nhớ, bởi vì tính phân tầng cấu trúc, nên dữ liệu sẽ được lưu trữ ở các tầng bộ nhớ khác nhau, do vậy tốc độ truy xuất nhanh và tận dụng được bộ nhớ cache [5], [15]. Cấu trúc phân tầng của HTA rất phù hợp với cấu trúc bộ nhớ của các hệ thống tính toán phân tán. Các Homomorphism của HTA cũng được đưa ra, luận văn cũng xây dựng nên 3 cấu trúc khung cơ bản trong lập trình song song đó là map,reduce, vàzipwith.

5.2 Hướng phát triển

Đưa ra được định nghĩa đại số cho HTA là một bước hết sức quan trọng, bởi nó phải thể hiện được một cấu trúc dữ liệu song song. Tuy nhiên vẫn còn rất nhiều công việc để tiếp tục hoàn thiện hướng nghiên cứu này. Cụ thể như sau:

• Xây dựng phiên bản thực thi cho cấu trúc HTA cũng như các cấu trúc khung của nó. Để thuận tiện, sử dụng template trong ngôn ngữ lập trình C++ để viết các cấu trúc khung, kết hợp thư viện lập trình truyền thông điệp MPI để lập trình song song trên các máy phân tán,

sử dụng OpenMP để tối ưu cho đoạn mã chạy trên máy đa lõi. Sau khi xây dựng xong cần đánh giá hiệu năng của cấu trúc dữ liệu này.

• Đưa ra được một framework nhằm phát triển có hệ thống các giải thuật dựa trên cấu trúc khung của HTA. Trong framework này cần có các luật để có thể suy diễn trên giải thuật, mục đích cuối cùng là đưa ra được một chương trình song song hiệu quả một cách có hệ thống.

• Xây dựng phiên bản thực thi HTA trên hệ thống tính toán GP-GPU. Bản thân hệ thống tính toán GP-GPU có một hệ thống bộ nhớ phân cấp rất giống với cách tổ chức của HTA, hơn nữa hiện tại để viết được một chương trình trên GP-GPU hiệu quả, người lập trình phải nắm rõ được dữ liệu nào cần lưu ở vùng bộ nhớ nào. Do vậy, phát triển phiên bản HTA cho GP-GPU có thể sẽ là một hướng phát triển tốt.

[1] R. Bird and O. de Moor. Algebras of Programming. Prentice Hall, 1996. [2] Alfredo Buttari, Julien Langou, Jakub Kurzak, and Jack Dongarra. A class of parallel tiled linear algebra algorithms for multicore architec- tures. lapack working note 191. Technical report, 2007.

[3] J. Darlington, A. J. Field, P. G. Harrison, P. H. J. Kelly, D. W. N. Sharp, Q. Wu, and R. L. While. Parallel programming using skele- ton functions. In Proc. of the Conference on Parallel Architectures and Reduction Languages Europe (PARLE’93), volume 694, pages 146–160. Springer-Verlag, 1993.

[4] J. Dean and S. Ghemawat. Mapreduce: Simplified data processing on large clusters. In Symposium on Operating System Design and Imple- mentation (OSDI), 2004.

[5] J. Guo, G. Bikshandi, D. Hoeflinger, G. Almási, B.B. Fraguela, M.J. Garzarán, D. Padua, and C. von Praun. Hierarchically tiled arrays for parallelism and locality. In Workshop on Performance Engineer- ing Technology and Research Sponsored under the NSF Next Generation Software, (NGS 06), in conjunction with IPDPS. Rhodes (Greece), 2006. [6] E. Horowitz and A. Zorat. Divide-and-conquer for parallel processing.

[7] J. Jeuring. Theories for algorithm calculation. PhD thesis, Faculty of Science, Utrecht University, 1993.

[8] Yuki Karasawa and Hideya Iwasaki. A parallel skeleton library for multi- core clusters. In 38th International Conference on Parallel Processing (ICPP 2009), pages 84–91, 2009.

[9] Kiminori Matsuzaki, Zhenjiang Hu, and Masato Takeichi. Parallel skele- tons for manipulating general trees. InParallel Computing,Vol.32, No.7- 8, pages 590–603, 2006.

[10] D. L. McBurney and M.R. Sleep. Experiments with the zapp: Matrix multiply on 32 transputers, heuristic search on 12 transputers. Technical report, School of Information Systems Internal Report SYS–C87–10, University of East Anglia, 1987.

[11] M.Cole. Algorithmic skeletons : a structured approach to the manage- ment of parallel computation. Pitman, London: Research Monographs in Parallel and Distributed Computing, 1989.

[12] F.J. Peters. Tree machines and divide and conquer algorithms. InCON- PAR 81, LNCS 111, pages 25–36. Springer-Verlag, 1981.

[13] Sketo library project, March 2010. [online] http://www.ipl.t.

u-tokyo.ac.jp/sketo.

[14] M. Sollin. An algorithm attributed to Sollin. S. Goodman and S. Hedet- niemi, editors, Introduction to the Design and Analysis of Algorithms, McGraw-Hill, 1977.

[15] Michael E. Wolf and Monica S. Lam. A data locality optimizing algo- rithm. pages 30–44, 1991. (adsbygoogle = window.adsbygoogle || []).push({});

2.1 Đặc tả chỉ thị . . . 19

2.2 Thực thi cấu trúc khung hàng đợi công việc . . . 27

3.1 Định nghĩa trực quan cho ba cấu trúc khung cơ bản trên mảng hai chiều. . . 40

4.1 HTA đồng nhất (a) Chính quy (b) Không chính quy . . . 46

4.2 HTA không hợp lệ . . . 47

4.3 HTA hai mức . . . 48

4.4 HTA không đồng nhất với (a) vị trí phân chia khác nhau với các miếng lợp liền kề (b) số mức lợp khác nhau . . . 48

4.5 Quy ước đặt tên và đánh số các mức khác nhau của một HTA 49 4.6 Minh họa (a) tuple, range,region và (b) dist. . . 51

4.7 Xây dựng HTA từ dưới lên . . . 52

4.8 Xây dựng HTA từ trên xuống . . . 53

4.9 Ví dụ về HTA . . . 55

Một phần của tài liệu Các cấu trúc khung cho lập trình đa lõi (Trang 64 - 73)