Song song hóa thuật toán Barnes - Hut với OpenMP

Song song hóa là một giải pháp quan trọng được áp dụng khi giải quyết các vấn đề đòi hỏi phải tính toán lớn thường gặp trong các lĩnh vực khoa học cơbản Bài toán N-body là một trong những bài toán cơbản trong lĩnh vực vật lý học thiên thể, liên quan tới lực tương tác giữa các hạt với nhau trong không gian. Có rất nhiều hướng đểgiải quyết bài toán trên, trong đó có phương pháp sửdụng thuật toán Barnes-Hut. OpenMP là giao diện lập trình ứng dụng API, cung cấp cho người lập trình một giao diện mềm dẻo, có tính khảchuyển trong khi phát triển các ứng dụng song song trên các máy tính sửdụng kiến trúc bộnhớchia sẻ. Khóa luận này giới thiệu tổng quan vềbài toán N-body, thuật toán Barnes-Hut và giao diện lập trình ứng dụng OpenMP. Trên cơsở đó đánh giá hiệu năng thuật toán Barnes-Hut, tiến hành tìm hiểu, phân tích và đềxuất các phương thức song song hóa thuật toán Barnes-Hut với OpenMP.

pdf61 trang | Chia sẻ: lvbuiluyen | Lượt xem: 2132 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Song song hóa thuật toán Barnes - Hut với OpenMP, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Song song hóa thuật toán Barnes-Hut với OpenMP Lê Thị Lan Phương i TÓM TẮT KHÓA LUẬN Song song hóa là một giải pháp quan trọng được áp dụng khi giải quyết các vấn đề đòi hỏi phải tính toán lớn thường gặp trong các lĩnh vực khoa học cơ bản…Bài toán N- body là một trong những bài toán cơ bản trong lĩnh vực vật lý học thiên thể, liên quan tới lực tương tác giữa các hạt với nhau trong không gian. Có rất nhiều hướng để giải quyết bài toán trên, trong đó có phương pháp sử dụng thuật toán Barnes-Hut. OpenMP là giao diện lập trình ứng dụng API, cung cấp cho người lập trình một giao diện mềm dẻo, có tính khả chuyển trong khi phát triển các ứng dụng song song trên các máy tính sử dụng kiến trúc bộ nhớ chia sẻ. Khóa luận này giới thiệu tổng quan về bài toán N-body, thuật toán Barnes-Hut và giao diện lập trình ứng dụng OpenMP. Trên cơ sở đó đánh giá hiệu năng thuật toán Barnes-Hut, tiến hành tìm hiểu, phân tích và đề xuất các phương thức song song hóa thuật toán Barnes-Hut với OpenMP. Song song hóa thuật toán Barnes-Hut với OpenMP Lê Thị Lan Phương ii LỜI CẢM ƠN Đầu tiên, em muốn gửi lời cảm ơn sâu sắc nhất tới TS. Nguyễn Hải Châu, người đã hướng dẫn và chỉ bảo em tận tình trong suốt thời gian làm khóa luận. Em xin chân thành cảm ơn thầy Phạm Kỳ Anh, giám đốc Trung tâm Tính toán hiệu năng cao – Trường Đại học KHTN – Đại học Quốc gia Hà Nội, người đã tạo điều kiện tốt nhất cho em thực hành và thử nghiệm thuật toán. Em cũng xin gửi lời cảm ơn tới tất cả các thầy và các anh chị trong Trung tâm, những người đã giúp đỡ và trả lời mọi thắc mắc, tạo điều kiện cho em hoàn thành khóa luận. Em xin cảm ơn thầy Đoàn Minh Phương, giảng viên bộ môn Mạng và Truyền thông máy tính, khoa CNTT, trường Đại học Công nghệ, người đã giúp đỡ em thử nghiệm bài toán trên máy đa xử lý Intel. Cuối cùng, em xin gửi lời cảm ơn sâu sắc tới những người thân trong gia đình em, những người luôn quan tâm, động viên khích lệ em trong học tập và trong cuộc sống. Sinh viên thực hiện khóa luận Lê Thị Lan Phương Song song hóa thuật toán Barnes-Hut với OpenMP Lê Thị Lan Phương iii Danh sách hình vẽ Hình 1: Minh họa hệ N-body trong không gian ..............................................................2 Hình 2: Biểu diễn lực tổng hợp tác dụng lên 1 hạt ..........................................................4 Hình 3: Quan sát thiên hà Andromeda từ trái đất..........................................................6 Hình 4: Biểu diễn quá trình đệ quy thay thế một cụm bởi tâm điểm............................7 Hình 5: Cây Quadtree với 4 mức ......................................................................................8 Hình 6: Cây Octree với 2 mức...........................................................................................8 Hình 7: Biểu diễn cây sau khi loại bỏ các ô trống ...........................................................9 Hình 8: Các thành phần trong OpenMP........................................................................15 Hình 9: Kiến trúc bộ nhớ chia sẻ ....................................................................................16 Hình 10: Mô hình Fork-Join ...........................................................................................19 Hình 11: Minh họa vùng được song song hóa................................................................21 Hình 12: Hình minh họa chỉ thị Do/for ..........................................................................24 Hình 13: Hình minh họa chỉ thị sections ........................................................................26 Hình 14: Hình minh họa chỉ thị single............................................................................28 Hình 15: Cấu trúc dữ liệu cây trong treecode (1)..........................................................36 Hình 16: Cấu trúc dữ liệu cây trong treecode (2)..........................................................39 Song song hóa thuật toán Barnes-Hut với OpenMP Lê Thị Lan Phương iv Bảng từ viết tắt Từ hoặc cụm từ Từ viết tắt Từ tiếng Anh Giao diện lập trình ứng dụng API Application Program Interface Các chỉ thị mở dành cho đa xử lý OpenMP Open Specifications for Multi Processing Luồng Thread Thread Hạt body Body Ô, Khối cell Cell Nút node Node Giao diện truyền thông điệp MPI Message Passing Interface Tâm khối Center of mass Song song hóa thuật toán Barnes-Hut với OpenMP Lê Thị Lan Phương v Mục lục TÓM TẮT KHÓA LUẬN........................................................................................... i LỜI CẢM ƠN ............................................................................................................. ii Danh sách hình vẽ...................................................................................................... iii Bảng từ viết tắt........................................................................................................... iv Mục lục ........................................................................................................................ v MỞ ĐẦU...................................................................................................................... 1 Chương 1: BÀI TOÁN N-BODY VÀ THUẬT TOÁN BARNES-HUT ................ 2 1.1 Bài toán N-body .......................................................................................... 2 1.1.1 Giới thiệu bài toán N-body............................................................ 2 1.1.2 Phương pháp nhằm tăng tốc bài toán N-body............................... 5 1.1.3 Cấu trúc cây Quadtree và Octree................................................... 7 1.2 Thuật toán Barnes-Hut ................................................................................ 9 1.2.1 Mô tả thuật toán Barnes-Hut ....................................................... 10 Chương 2: GIỚI THIỆU VỀ OPENMP................................................................. 15 2.1 OpenMP (Open specifications for Multi Processing) ............................... 15 2.2 Kiến trúc bộ nhớ chia sẻ ............................................................................ 16 2.3 Mục tiêu của OpenMP............................................................................... 17 2.4 Môi trường hỗ trợ OpenMP....................................................................... 18 2.5 Mô hình lập trình OpenMP ....................................................................... 18 2.6 Một số chỉ thị cơ bản trong OpenMP ........................................................ 19 2.6.1 Các chỉ thị song song hóa............................................................ 20 2.6.2 Chỉ thị khai báo miền song song ................................................. 20 2.6.3 Chỉ thị liên quan tới môi trường dữ liệu...................................... 21 2.6.4 Chỉ thị liên quan tới chia sẻ công việc ........................................ 23 2.6.5 Chỉ thị đồng bộ hóa ..................................................................... 28 2.6.6 Thư viện và một số biến môi trường........................................... 31 Song song hóa thuật toán Barnes-Hut với OpenMP Lê Thị Lan Phương vi 2.7 Ví dụ về lập trình song song với OpenMP................................................ 33 2.7.1 omp_hello.c ................................................................................. 33 2.7.2 Cách biên dịch............................................................................. 33 2.7.3 Kết quả ........................................................................................ 34 Chương 3: SONG SONG HÓA THUẬT TOÁN BARNES-HUT ........................ 35 3.1 Treecode .................................................................................................... 35 3.1.1 Cấu trúc dữ liệu của cây .............................................................. 35 3.1.2 Các biến toàn cục ........................................................................ 39 3.2 Thử nghiệm và đánh giá hiệu năng của treecode ...................................... 40 3.2.1 Thử nghiệm chương trình treecode ............................................. 40 3.2.2 Đánh giá hiệu năng...................................................................... 42 3.3 Song song hóa treecode với OpenMP ....................................................... 43 3.3.1 Môi trường thực hiện song song ................................................. 43 3.3.2 Thực hiện song song.................................................................... 44 3.4 Kết quả thực nghiệm ................................................................................. 51 KẾT LUẬN ............................................................................................................... 53 TÀI LIỆU THAM KHẢO........................................................................................ 54 Song song hóa thuật toán Barnes-Hut với OpenMP Lê Thị Lan Phương 1 MỞ ĐẦU Bài toán N-body là một trong những bài toán cơ bản của vật lý học thiên thể. Trước đây đã có rất nhiều hướng khác nhau khi giải quyết vấn đề liên quan tới lực tương tác giữa các hạt của hệ N hạt trong không gian. Trong đó có hai cách giải quyết cơ bản. Đó là tính trực tiếp lực giữa các cặp hạt với độ phức tạp là O (N2) và cách tính thế năng lặp với độ phức tạp là O (N log N). Cách thứ nhất cho phép tính toán một cách gần chính xác lực tương tác. Song thời gian cần để thực hiện trong bài toán N-body là rất lớn, xấp xỉ O (N2) với N là số hạt. Trong đó thời gian tính lực chiếm chủ yếu, khoảng 96 % thời gian thực hiện chương trình khi được thử nghiệm trên máy Intel 1 CPU. Cách thứ hai dường như giảm thiểu thời gian tính toán nhưng lại thiếu độ chính xác và thiếu tính tổng quát khi mô phỏng hệ N-body. Thuật toán Barnes-Hut và các cải tiến của nó đã được áp dụng để tính lực với độ phức tạp xấp xỉ O (N log N) và cho kết quả tương đối chính xác. Song song hóa thuật toán Barnes-Hut có ý nghĩa vô cùng quan trọng trong việc tăng tốc bài toán N-body. Song song hóa thuật toán Barnes-Hut trên kiến trúc máy tính có bộ nhớ phân tán bằng cách sử dụng giao diện lập trình ứng dụng MPI đã được nhiều tác giả nghiên cứu và đạt kết quả tốt. Tuy nhiên vấn đề song song hóa thuật toán này trên kiến trúc máy tính đa xử lý bộ nhớ chia sẻ chưa được nghiên cứu nhiều. OpenMP là một trong các giao diện lập trình ứng dụng dành cho các ứng dụng song song trên kiến trúc máy tính đa xử lý bộ nhớ chia sẻ. So với MPI, OpenMP có tính mềm dẻo, tính khả chuyển cao, và cho phép người lập trình có được một giao diện đơn giản khi xây dựng và phát triển các ứng dụng song song. Khóa luận này nghiên cứu tổng quan về bài toán N-body, tìm hiểu về thuật toán Barnes-Hut cũng như về giao diện lập trình OpenMP. Từ đó rút ra những nhận xét và đánh giá hiệu năng thuật toán và nghiên cứu vấn đề song song hóa thuật toán Barnes-Hut sử dụng OpenMP trên mô hình bộ nhớ chia sẻ. Song song hóa thuật toán Barnes-Hut với OpenMP Lê Thị Lan Phương 2 Chương 1: BÀI TOÁN N-BODY VÀ THUẬT TOÁN BARNES-HUT 1.1 Bài toán N-body 1.1.1 Giới thiệu bài toán N-body Bài toán N-body về thực chất là bài toán liên quan tới tính lực tương tác giữa các hạt trong không gian. Các mô phỏng của bài toán N-body đóng vai trò quan trọng trong nhiều ứng dụng của vật lý học thiên thể, động lực học phân tử, và các phương pháp tính lưu lượng của gió xoáy (vortex flow methods)… Xét hệ N hạt trong không gian. Giữa các hạt có tương tác lực hấp dẫn. Vì có N hạt, nên mỗi hạt sẽ chịu tác dụng của N-1 lực khác nhau gây ra bởi các hạt còn lại, lực tổng hợp của N-1 lực này sẽ làm thay đổi vận tốc và vị trí của hạt đó. Hình 1: Minh họa hệ N-body trong không gian Dưới đây là giải thuật cơ bản khi mô phỏng hệ N-body. while (t < tfinal) { Song song hóa thuật toán Barnes-Hut với OpenMP Lê Thị Lan Phương 3 for i =1 to n do { tính lực f(i) tác dụng lên hạt i cập nhật vận tốc và vị trí của hạt i } t = t + ∆t } Trong đó lực f(i) tác dụng lên hạt i có thể được tính đơn giản như sau: for i = 1 to n f(i) = sum[ j=1,...,n, j!=i] f(i,j) /* f(i,j) la luc cua hat j tac dung len i*/ end for Lực tương tác của các hạt phụ thuộc vào khoảng cách giữa chúng. Bởi vậy, khi hạt chuyển động ta cần phải xác định lại lực tác dụng lên nó. Xét hạt chuyển động dưới tác dụng của lực hấp dẫn. Trong đó: • F là lực hấp dẫn gây ra bởi hai hạt a, b. • G: hằng số hấp dẫn. = (6.6742 ± 0.001) x 10-11 N m2 kg-2 • ma, mb: khối lượng của hạt a, b tương ứng. • d: khoảng cách giữa hai hạt Song song hóa thuật toán Barnes-Hut với OpenMP Lê Thị Lan Phương 4 Khi đó gia tốc của hạt là: Lực tổng hợp tác dụng lên hạt a là: Fnet Hình 2: Biểu diễn lực tổng hợp tác dụng lên 1 hạt Xét các thời điểm t0, t1, … với khoảng thời gian là δt. Dưới tác dụng của lực Fnet, vận tốc của hạt là: Khi đó vị trí của hạt theo trục x là: Trong không gian 3 chiều, khoảng cách giữa hai hạt a, b là: Lực hấp dẫn chiếu lên trục Ox là: Như vậy, bài toán N-body có thể đơn giản như sau: Song song hóa thuật toán Barnes-Hut với OpenMP Lê Thị Lan Phương 5 for(t=0;t<tmax;t++){ for(i=0;i<N;i++){ F=Calc_force(i); vnew[i]=v[i]+F*dt/m; xnew[i]=x[i]+v[i]*dt; } for(i=0;i<N;i++){ x[i]=xnew[i]; v[i]=vnew[i]; } } Rõ ràng với N hạt trong không gian, thuật toán tính trực tiếp lực tương tác giữa các cặp hạt sẽ làm cho độ phức tạp của bài toán là O(N2). Vậy làm thế nào để có thể giảm thiểu được thời gian tính toán? 1.1.2 Phương pháp nhằm tăng tốc bài toán N-body Trước đây, bài toán N-body đã được mô hình hoá bằng cách tích hợp trực tiếp, trong đó ta tính lực tương tác theo từng cặp hạt, giống như mô tả ở phần trên. Cách này đã mô tả gần chính xác trạng thái động lực học của hệ N hạt nhưng độ phức tạp là O(N2). Cũng có thể mô phỏng hạt bằng phương pháp thế năng lặp, độ phức tạp chỉ còn là O(NlogN) nhưng lại thiếu tính chính xác và thiếu tính tổng quát của bài toán. Như vậy vấn đề đặt ra là làm thế nào vừa giảm thiểu độ phức tạp của thuật toán nhưng lại mô phỏng được một cách tương đối chính xác và có tính tổng quát của hệ thống N hạt trong không gian? Ta xét một ví dụ thực tế dưới đây. Giả sử cần phải tính lực hấp dẫn của trái đất tác dụng lên các vì sao và các hành tinh. Quan sát bằng mắt thường, ta thấy nhiều điểm sáng trông giống như là một ngôi sao đơn lẻ, nhưng thực chất đó là một chòm sao (Ví dụ chòm sao tinh nữ Andromeda), bao gồm hàng tỉ các vì sao con. Nhưng vì chúng xuất hiện rất gần nhau, nên tưởng như chúng là một điểm sáng đơn. Xét D là kích thước của khối hộp bao quanh chòm sao Andromeda Xét r là khoảng cách từ tâm khối tới trái đất Song song hóa thuật toán Barnes-Hut với OpenMP Lê Thị Lan Phương 6 Thiết lập tỉ số: D/r = Ta thấy tỉ số D/r là rất nhỏ, do vậy có thể thay thế một cách tương đối chính xác tất cả các vì sao trong chòm sao Andromeda như một điểm x đặt tại tâm của khối. Hình 3: Quan sát thiên hà Andromeda từ trái đất Ý tưởng này đã được các nhà bác học trước phát hiện và áp dụng vào nhiều bài toán. Như trong lý thuyết cơ học cổ điển, khi tính lực hút của trái đất tác dụng lên quả táo đang rơi, Newton đã coi trái đất như là một điểm được đặt tại tâm của trái đất. Điểm mới mẻ ở đây là việc ta áp dụng ý tưởng này một cách đệ quy để giải quyết bài toán N-body. Chẳng hạn khi ta quan sát từ chòm sao tinh nữ Andromeda, dải ngân hà Milky Way có thể được xấp xỉ là một điểm đặt tại tâm dải. Nhưng điều quan trọng hơn là quá trình này có thể được lặp lại nhiều lần miễn là tỉ số khoảng cách D1/r1 là đủ nhỏ để có thể thay thế các vì sao trong một khối nhỏ hơn bằng một điểm đặt tại tâm khối khi tính lực hấp dẫn. Kích thước khối hộp Khoảng cách từ tâm khối tới trái đất Song song hóa thuật toán Barnes-Hut với OpenMP Lê Thị Lan Phương 7 Hình 4: Biểu diễn quá trình đệ quy thay thế một cụm bởi tâm điểm Để quá trình đệ quy khi chia nhỏ không gian trở nên đơn giản, người ta sử dụng một cấu trúc dữ liệu đặc biệt. Đó là cấu trúc cây Quadtree và Octree. 1.1.3 Cấu trúc cây Quadtree và Octree Cấu trúc cây Quadtree (dùng trong không gian 2 chiều) và Octree (trong không gian 3 chiều) là các cấu trúc dữ liệu được sử dụng để chia nhỏ không gian. Để đơn giản, ta xét mô hình cây Quadtree (tương tự với xây dựng cây Octree). Cây Quadtree bắt đầu bởi một hình vuông trong mặt phẳng. Hình vuông lớn này được chia thành 4 hình vuông nhỏ. Mỗi hình vuông nhỏ lại được chia ra làm 4. Quá trình phân chia này cứ tiếp tục được diễn ra… Hình dưới đây mô tả một cây Quadtree với 4 mức. Song song hóa thuật toán Barnes-Hut với OpenMP Lê Thị Lan Phương 8 Hình 5: Cây Quadtree với 4 mức Mỗi nút (node) của cây tương ứng có 4 con (children), là 4 ô vuông nhỏ vừa mới được tạo thành từ việc phân chia ô vuông lớn hơn trước đó. Với cây Octree, quá trình diễn ra tương tự. Nhưng thay vì mỗi nút có 4 con (như trong Quadtree), mỗi nút của cây Octree có 8 con. Dưới đây là hình mô tả một cây Octree với 2 mức chia. Hình 6: Cây Octree với 2 mức Các lá của cây Quadtree lưu thông tin về vị trí, khối lượng của các hạt tương ứng có trong hộp. Tuy nhiên, nếu như phân bố các hạt trong không gian không đồng đều thì việc phân chia như trên sẽ khiến cho nhiều lá của cây là rỗng. Do vậy, việc lưu trữ các lá rỗng Song song hóa thuật toán Barnes-Hut với OpenMP Lê Thị Lan Phương 9 như thế rất lãng phí. Để khắc phục tình trạng trên, người ta chỉ tiến hành phân chia các ô vuông chỉ khi chúng có chứa nhiều hơn một hạt. Ta có cấu trúc cây có dạng như sau Hình 7: Biểu diễn cây sau khi loại bỏ các ô trống 1.2 Thuật toán Barnes-Hut Thuật toán Barnes-Hut được giới thiệu lần đầu trong bài báo “A hierachical O(n logn) force caculation algorithm” vào tháng 12/1986. Tuy độ chính xác không bằng thuật toán FMM (Fast Mutipole Method), nhưng tốc độ tính toán lại nhanh hơn. Thuật toán Barnes-Hut được sử dụng khá rộng rãi trong lĩnh vực vật lý học thiên thể. Dựa trên nền tảng mà Barnes-Hut đưa ra, đã có rất nhiều cải tiến và phát triển mới của thuật toán như việc áp dụng tính lực trên các máy tính vector (Barnes 1990), giải thuật Greengard 1990, J. Makino với “Treecode with a special-purpose processor”, Publ. Astron. Soc. Japan 43 (1991) 621--638… Các cải tiến mới này nhằm tăng độ chính xác, tăng tốc độ khi tiến hành song song hóa và có thể cải tiến để cài đặt trên các máy tính chuyên dụng GRAPE. Song song hóa thuật toán Barnes-Hut với OpenMP Lê Thị Lan Phương 10 1.2.1 Mô tả thuật toán Barnes-Hut Thuật toán Barnes-Hut sử dụng chiến thuật chia để trị nhằm tìm ra cụm các hạt trong bài toán N-body. Giả sử tất cả các hạt nằm trong 1 hình khối 3 chiều. Cây octree được xây dựng một cách đệ quy bằng cách chia nhỏ hình khối thành 8 cell nhỏ hơn. Loại bỏ các cell không chứa hạt nào. Lá của cây là các cell chỉ chứa một hạt duy nhất. Quá trình chia nhỏ khối được lặp lại cho đến khi các khối chỉ chứa duy nhất một hạt. Để đơn giản, ta xét thuật toán Barnes-Hut trong không gian 2 chiều dưới đây. Như vậy, thuật toán có thể được mô tả qua 3 bước như sau: Bước 1: Xây dựng cây Quadtree. Bước 2: Đối với mỗi ô vuông của cây, tính tâm khối và tổng khối lượng các hạt có trong cell. Bước 3: Với mỗi hạt, duyệt lại cây để tính lực tác dụng lên nó. Trong đó: Bước 1: Xây dựng cây Quadtree. procedure QuadtreeBuild Quadtree = {empty} For i = 1 to n ... duyệt tất cả các hạt QuadInsert(i, root) ... thêm hạt i vào cây end for …Duyệt cây để loại bỏ những lá trống procedure QuadInsert(i,n) ... thủ tục này để thêm hạt i vào nút n trong cây ... khi xây dựng cây, chú ý mỗi lá trong cây chỉ chứa ... 1 hoặc 0 hạt If cây con có gốc tại n chứa nhiều hơn 1 hạt Lựa chọn con