1. Trang chủ
  2. » Luận Văn - Báo Cáo

Song song hoá thuật toán Bames hut với OpenMP

61 399 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Song song hóa thuật toán Barnes-Hut với OpenMP
Tác giả Lê Thị Lan Phương
Người hướng dẫn TS. Nguyễn Hải Châu, Thầy Phạm Kỳ Anh, Thầy Đoàn Minh Phương
Trường học Trường Đại học Khoa học Tự nhiên - Đại học Quốc gia Hà Nội
Chuyên ngành Công nghệ thông tin
Thể loại khóa luận
Thành phố Hà Nội
Định dạng
Số trang 61
Dung lượng 573,85 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Song song hoá 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

Trang 1

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

N-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

Trang 2

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

Trang 3

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

Trang 4

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

Giao diện truyền thông điệp MPI Message Passing Interface

Trang 5

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

Trang 6

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

Trang 7

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ẻ

Trang 8

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)

{

Trang 9

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:

• 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

Trang 10

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:

Trang 11

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

Trang 12

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

Trang 13

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

Trang 14

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

Trang 15

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

Trang 16

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

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 c của n để thêm hạt i

Trang 17

QuadInsert(i,c)

else if cây con có gốc tại n chứa đúng 1 hạt

Chuyển hạt có trong n sang một ô con

tính tâm khối và tổng khối lượng các hạt cho mỗi ô

( mass, cm ) = Compute_Mass(root) cm = tâm khối

function ( mass, cm ) = Compute_Mass(n)

Tính khối lượng và tâm khối

cho tất cả các hạt có trong cây con gốc là n

if n chứa 1 hạt

store ( mass, cm ) at n

return ( mass, cm )

else

for các con c(i) của n (i=1,2,3,4)

( mass(i), cm(i) ) = Compute_Mass(c(i))

end for

mass = mass(1) + mass(2) + mass(3) + mass(4)

cm = ( mass(1)*cm(1) + mass(2)*cm(2)

Trang 18

+ mass(3)*cm(3) + mass(4)*cm(4)) / mass store ( mass, cm ) at n

Nếu tỉ số D/r là đủ nhỏ, ta có thể tính lực gây ra bởi các hạt trong hộp bằng cách

sử dụng khối lượng và vị trí tâm khối trong hộp Giả sử θ (theta) là ngưỡng (góc mở) cần tính toán (thông thường 0 < θ <= 1)

Nếu D/r < θ, ta tính lực hấp dẫn tác dụng lên các hạt như sau

• (x, y, z) là vị trí của hạt trong không gian 3 chiều

• m là khối lượng của hạt

• (xcm, ycm, zcm) là vị trí của tâm hạt trong hộp

• mcm là tổng khối lượng các hạt có trong hộp

• G là hằng số hấp dẫn Khi đó lực hấp dẫn sẽ được tính theo công thức xấp xỉ là:

Trang 19

với mỗi hạt, duyệt cây để tính lực tác dụng lên nó

r = khoảng cách từ hạt i tới tâm khối tại n

D = kích thước của cell n

Qua thuật toán trên ta nhận thấy: quá trình duyệt cây để tính lực tác dụng lên hạt

là độc lập đối với mỗi hạt Bởi vậy có thể tiến hành song song hóa quá trình này để nhằm tăng tốc bài toán N-body

Trang 20

Hiện nay, đã có rất nhiều giải thuật nhằm song song hóa quá trình tính toán lực tác dụng trong hệ thống N-body Có hai hướng để tiến hành song song hóa thuật toán

1) Song song hóa với MPI - sử dụng bộ nhớ phân tán

2) Song song hóa với OpenMP - sử dụng bộ nhớ chia sẻ

Trong khóa luận này, ta sẽ xem xét phương pháp song song hóa thuật toán Barnes-Hut với OpenMP

Trang 21

Chương 2: GIỚI THIỆU VỀ OPENMP

2.1 OpenMP (Open specifications for Multi Processing)

Lập trình song song trên các máy với bộ nhớ chia sẻ đóng vai trò khá quan trọng trong tính toán hiệu năng cao Tuy nhiên việc sử dụng những tiện ích của hệ thống bộ nhớ chia sẻ là không dễ dàng đối với người lập trình Giao diện truyền thông điệp MPI phần lớn được sử dụng trong các hệ thống bộ nhớ phân tán Khả năng mở rộng và tính khả chuyển trong MPI là rất tốt, nhưng nó lại không có ý nghĩa khi triển khai với những đoạn

mã viết cho các máy tính tuần tự Hơn nữa MPI lại không tận dụng được những tiện ích

mà hệ thống bộ nhớ chia sẻ mang lại Trong nhiều năm, có nhiều sản phẩm được giới thiệu nhằm đưa ra tính khả chuyển và hiệu năng cao trên những hệ thống cụ thể Tuy nhiên vẫn phát sinh những vấn đề trong tính khả chuyển khi sử dụng các sản phẩm này

OpenMP được coi như một giao diện lập trình ứng dụng API (Application Program Interface) chuẩn dành cho lập trình với bộ nhớ chia sẻ OpenMP là sự kết hợp của các chỉ thị biên dịch, các hàm thư viện, và các biến môi trường được sử dụng để xác định phần thực hiện song song trên bộ nhớ chia sẻ trong lập trình Fortran hoặc C/C++ OpenMP đưa ra một mô hình lập trình song song có tính khả chuyển đối với những kiến trúc bộ nhớ chia sẻ đối với các nhà cung cấp khác nhau

Hình 8: Các thành phần trong OpenMP

Trang 22

2.2 Kiến trúc bộ nhớ chia sẻ

Hệ thống bộ nhớ chia sẻ bao gồm nhiều bộ xử lý CPU, mỗi bộ xử lý truy cập tới

bộ nhớ chung thông qua các siêu kết nối hoặc các đường bus Việc sử dụng không gian địa chỉ đơn làm cho mỗi bộ xử lý đều có một cái nhìn giống nhau về bộ nhớ được sử dụng Truyền thông trong hệ thống bộ nhớ chia sẻ thông qua cách đọc và ghi dữ liệu giữa các bộ xử lý với nhau lên bộ nhớ Với cách này, thời gian truy cập tới các phần dữ liệu là như nhau, vì tất cả các quá trình truyền thông đều thông qua đường bus

Ưu điểm của kiến trúc này là dễ dàng lập trình, bởi vì không có một sự truyền thông chính tắc bắt buộc nào giữa các bộ xử lý với nhau, chúng chỉ đơn giản là truy cập tới bộ nhớ chung Điều khiển quá trình truy cập tới bộ nhớ chung thông qua các kỹ thuật được phát triển trong các máy tính đa nhiệm, như kỹ thuật semaphores…

Để tránh tình trạng thắt nút cổ chai, gây ra bởi việc nhiều bộ xử lý truy cập tới cùng một vị trí trong bộ nhớ, người ta chia bộ nhớ chung thành các module Mỗi module nhớ được kết nối với một bộ xử lý thông qua một mạng chuyển mạch hiệu năng cao

Hình 9: Kiến trúc bộ nhớ chia sẻ

Trang 23

Một số ví dụ về các máy tính bộ nhớ chia sẻ:

• SGI Origin2000: là sự kết hợp hiệu quả giữa kiến trúc bộ nhớ chia sẻ và

bộ nhớ phân tán Bộ nhớ được phân tán về mặt vật lý giữa các nút, với 2

bộ xử lý tại mỗi nút Quyền truy cập tới bộ nhớ cục bộ của các bộ xử lý tại các nút là như nhau Xét theo khía cạnh kiến trúc chia sẻ, tất cả các nút đều có quyền truy cập giống nhau tới bộ nhớ phân tán vật lý (http://www.cray.com/products/systems/origin2000)

• Sun HPC servers, như Enterprise 3000 (gồm từ 1 đến 6 bộ xử lý) hoặc Enterprise 10000 (gồm 4 đến 64 bộ xử lý)

2.3 Mục tiêu của OpenMP

• Cung cấp giao diện chuẩn: OpenMP đưa ra một giao diện chuẩn cho các hệ thống máy tính bộ nhớ chia sẻ

• Tính đơn giản: bao gồm tập các chỉ thị đơn giản và dễ sử dụng cho lập trình trên hệ thống máy tính bộ nhớ chia sẻ Một chương trình song song hóa có thể chỉ cần sử dụng 3 hoặc 4 chỉ thị biên dịch

• Tính dễ sử dụng:

o Khả năng để thực hiện song song cho các chương trình tuần tự

o Khả năng thực hiện song song hóa ở mức thô sơ, hoặc mức chi tiết

• Tính khả chuyển: hỗ trợ Fortran, C, C++

Trang 24

2.4 Môi trường hỗ trợ OpenMP

Qua tìm hiểu, ta thấy OpenMP là một mô hình lập trình ứng dụng song song dựa trên nền tảng của kiến trúc bộ nhớ chia sẻ, có tính khả chuyển và có thể mở rộng, giúp cho người lập trình có được một giao diện đơn giản và mềm dẻo khi xây dựng ứng dụng

OpenMP được xây dựng dựa trên sự hợp tác của các tập đoàn:

• Digital Equipment Corp (http://www.digital.com/info/hpc/)

• IBM (http://www.ibm.com/)

• Intel Corporation (http://www.intel.com/)

• Kuck & Associates Inc (http://www.kai.com/)

• Silicon Graphics Inc (http://www.sgi.com/Technology/OpenMP/) Ngày nay nhiều hãng phần cứng, phần mềm và các nhà phát triển ứng dụng chính đều đang xác nhận tính năng của OpenMP Xem chi tiết tại website

http://www.openmp.org để cập nhật thông tin cũng như các phiên bản, các chuẩn dành cho OpenMP

Ví dụ về một vài trình biên dịch có hỗ trợ OpenMP:

• Absoft Pro FortranMP 6.0 (http://www.absoft.com/pro.win.html)

• IBM XL Fortran (http://www.software.ibm.com/ad/fortran/xlfortran/)

• KAI KAP/Pro Toolset (http://www.kai.com/kpts/_index.html)

2.5 Mô hình lập trình OpenMP

OpenMP dựa trên việc sử dụng số lượng các luồng hiện có trong lập trình song song bộ nhớ chia sẻ Đó là một mô hình lập trình chính tắc, cung cấp đầy đủ các điều khiển cho người lập trình

Có thể xem mô hình lập trình OpenMP như là một mô hình Fork-Join

Trang 25

Hình 10: Mô hình Fork-Join

Trong mô hình Fork-Join, tất cả các chương trình OpenMP đều bắt đầu bởi một tiến trình đơn Đó là master thread (luồng chính) Luồng chính này được thực hiện tuần tự cho đến khi gặp chỉ thị khai báo vùng cần song song hóa

Fork: sau khi gặp chỉ thị khai báo song song, master thread sẽ tạo ra một nhóm

các luồng song song Khi đó, các câu lệnh trong vùng được khai báo song song sẽ được thực hiện song song hóa trên nhóm các luồng vừa được tạo

Join: khi các luồng đã thực hiện xong nhiệm vụ của mình, chúng sẽ tiến hành quá

trình đồng bộ hóa, ngắt luồng, và chỉ để lại 1 luồng duy nhất là master thread

2.6 Một số chỉ thị cơ bản trong OpenMP

Kỹ thuật để song song hóa đoạn code chính là các chỉ thị biên dịch Chỉ thị biên dịch được thêm vào mã nguồn, để chỉ ra phần nào được tiến hành song song trên hệ thống

bộ nhớ chia sẻ Cùng với đó là một số chỉ thị đặc biệt chỉ ra phương thức song song hóa như thế nào? Ưu điểm của kỹ thuật này là dễ sử dụng và có tính khả chuyển đối với hệ thống các máy tính tuần tự và máy tính đa xử lý Bởi vì đối với các trình biên dịch tuần

tự, những chỉ thị này được coi như là các comment

Trang 26

f77: !$OMP PARALLEL f77: call work(x,y)

f77: !$OMP END PARALLEL

2.6.1 Các chỉ thị song song hóa

Các chỉ thị song song hóa được thêm vào mã nguồn có cấu trúc như sau

Cấu trúc:

#pragma omp directive_name [clauses] <new_line>

Chú ý: cuối các chỉ thị song song đều phải xuống dòng

2.6.2 Chỉ thị khai báo miền song song

Chỉ thị này xác định vùng cần tiến hành song song hóa Khi một thread bắt gặp chỉ thị khai báo miền cần song song, nó sẽ tạo ra một nhóm các thread khác nhau, đồng thời trở thành master thread Master thread có ID là 0 Số lượng các thread được xác định thông qua biến môi trường hoặc qua lời gọi hàm thư viện Các thread này sẽ thực hiện đoạn mã nằm trong khai báo song song

Trang 27

Hình 11: Minh họa vùng được song song hóa

• private (list): khai báo danh sách các biến là private đối với mỗi thread Điều

đó có nghĩa một quá trình xử lý sẽ sử dụng một bản sao các biến Tham chiếu tới các biến gốc được thay thế bởi tham chiếu tới các bản sao

Vùng liên tục

Vùng song song

Trang 28

• firstprivate (list): giống với khai báo private, song bản sao danh sách các biến

được gán giá trị ban đầu là giá trị của các biến gốc

• lastprivate (list): giống với khai báo private, các biến gốc trong danh sách sẽ

được gán giá trị là giá trị cuối cùng sau khi ra khỏi vòng lặp hoặc ra khỏi một section

• shared (list): tất cả các thread đều có quyền truy cập tới cùng một danh sách

các biến được khai báo là shared Về thực chất, biến được chia sẻ chiếm một vị trí cụ thể trong bộ nhớ Mọi thread có thể đọc và ghi thông qua địa chỉ nhớ đó Vấn đề đặt ra là phải đảm bảo cho các thread truy cập một cách hợp lý tới các biến chia sẻ

• default (shared | none): thiết lập thuộc tính mặc định cho tất cả các biến được

sử dụng trong vùng song song hóa Riêng các biến trong khai báo

threadprivate không chịu ảnh hưởng của default Các biến có thể được khai

báo chính tắc là private, shared…mà không cần phải khai báo default

• reduction (operator : list): cho phép các biến thuộc list (biến shared) có các

bản sao là private trong mỗi thread Các thread sẽ thực hiện và ghi giá trị vào

biến private đó Kết thúc chỉ thị reduction, biến shared trong list được lấy giá

trị từ các biến private ở mỗi thread bằng cách áp dụng toán tử operator

Toán tử operator có thể là các phép +, *, -, max, min, …

• schedule (type [, chunk_size]): Chỉ thị này chỉ ra cách thức vòng lặp for được

phân chia như thế nào giữa các thread, thường được sử dụng để tạo trạng thái

cân bằng tải giữa các thread

Trong đó type có thể là: static, dynamic, guided, hoặc runtime

o static: Nếu không chỉ ra chunk_size thì chunk_size được gán bằng

CEILING(tổng số lần lặp/số luồng) Các chunk được gán lần lượt cho các thread (tức là theo kiểu round-robin)

o dynamic: Nếu không chỉ ra chunk_size thì chunk_size được gán

bằng 1 Các chunk được gán cho các thread theo kiểu: thread nào rỗi hoặc đến trước thì thực hiên trước (first-come first-do)

Trang 29

o guided: Nếu không chỉ ra chunk_size thì chunk_size được gán bằng

1 Nếu chỉ ra chunk_size thì tổng số lần lặp sẽ được chỉ ra sao cho

cỡ của các chunk nối tiếp nhau (theo chỉ số tăng dần) hay chunk_size giảm theo hàm mũ chunk_size chính là cỡ của chunk

bé nhất Cách làm:

chunk_size đầu tiên = CEILING(số lần lặp chia cho số thread)

các chunk_size tiếp theo = CEILING(số lần lặp còn lại chia cho số

thread) Khi thực hiện, nếu số lượng chunk lớn hơn số thread thì thread nào thực hiện xong phần việc của mình sẽ đảm nhiệm chunk tiếp theo chưa được thực hiện

o runtime: Chunk_size sẽ được xác định khi chương trình được thực

hiện Kiểu schedule sẽ là static hoặc được chỉ ra thông qua biến môi trường OMP_SCHEDULE (như vậy có thể là DYNAMIC, GUIDED )

• threadprivate: #pragma omp threadprivate (list) <new_line>

Chỉ thị threadprivate được sử dụng để làm cho các biến có phạm vi toàn cục trở thành cục bộ và tiếp tục tồn tại trong mỗi thread trong suốt các quá trình cần được song song hóa Chỉ thị phải được xuất hiện ngay sau khi khai báo biến Sau đó mỗi thread sẽ làm việc với một bản sao các biến

• copyin (list): gán giá trị cho các biến được khai báo là threadprivate trong các

thread bằng giá trị của các biến gốc trong master thread trước khi thực hiện song song List chứa danh sách các biến để sao chép

2.6.4 Chỉ thị liên quan tới chia sẻ công việc

2.6.4.1 Do/for

Chỉ thị Do/for cho biết vòng lặp for nằm trong khai báo phải được thực thi song song

Trang 30

Hình 12: Hình minh họa chỉ thị Do/for

Ngày đăng: 10/04/2013, 13:50

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] Josh Barnes &amp; Piet Hut, A hierarchical O(N log N) force – calculation algorithm, Nature, v. 324, December 1986 Sách, tạp chí
Tiêu đề: A hierarchical O(N log N) force – calculation algorithm
[2] Fast Hierarchical Methods for the N-body Problem, Part 1 http://www.cs.berkeley.edu/~demmel/cs267/lecture26/lecture26.html Sách, tạp chí
Tiêu đề: Fast Hierarchical Methods for the N-body Problem, Part 1
[3] J. E. Barnes, A modified tree code: Don't laugh; It runs, Journal of Computational Physics 87 (1990) 161--170 Sách, tạp chí
Tiêu đề: A modified tree code: Don't laugh; It runs
Tác giả: J. E. Barnes
Nhà XB: Journal of Computational Physics
Năm: 1990
[4] A. Kawai, J. Makino, High-accuracy treecode based on pseudoparticle multipole method, Proceedings of the 208th Symposium of the International Astronomical Union (Tokyo, Japan, July 10-13, 2001) 305-314 Sách, tạp chí
Tiêu đề: High-accuracy treecode based on pseudoparticle multipolemethod
[5] A. Kawai, J. Makino, Pseudo-particle multipole method: A simple method to implement a high-accuracy treecode, The Astrophysical Journal, 550 (2001) L143-L146 Sách, tạp chí
Tiêu đề: A simple method to implement a high-accuracy treecode
[6] A. Kawai, J. Makino, T. Ebisuzaki, Performance analysis of high-accuracy tree code based on the pseudoparticle multipole method, The Astrophysical Journal Supplement 151 (2004) 13-33 Sách, tạp chí
Tiêu đề: Performance analysis of high-accuracy tree code based on the pseudoparticle multipole method
[7] Joshua E. Barnes, Institute for Astronomy, University of Hawaii, Treecode Guide Sách, tạp chí
Tiêu đề: Treecode Guide
Tác giả: Joshua E. Barnes
Nhà XB: Institute for Astronomy, University of Hawaii
[8] Giovanni Erbacci, Shared Memory Paradigm, High Performance Systems Department, CINECA Sách, tạp chí
Tiêu đề: Shared Memory Paradigm
[9] Introduction to OpenMP, Technical User Support, Supercomputing Institute, University of Minnesota[10] OpenMP exercisehttp://www.llnl.gov/computing/tutorials/openMP/exercise.html Sách, tạp chí
Tiêu đề: Introduction to OpenMP
Nhà XB: Technical User Support, Supercomputing Institute, University of Minnesota
[11] Michael Sỹò, Claudia Leopold, A User's Experience with Parallel Sorting and OpenMP, Talk at the EWOMP'04 conference, Stockholm Sách, tạp chí
Tiêu đề: A User's Experience with Parallel Sorting and OpenMP

HÌNH ẢNH LIÊN QUAN

Bảng từ viết tắt - Song song hoá thuật toán Bames hut với OpenMP
Bảng t ừ viết tắt (Trang 4)
Hình 1: Minh họa hệ N-body trong không gian - Song song hoá thuật toán Bames hut với OpenMP
Hình 1 Minh họa hệ N-body trong không gian (Trang 8)
Hình 2: Biểu diễn lực tổng hợp tác dụng lên 1 hạt - Song song hoá thuật toán Bames hut với OpenMP
Hình 2 Biểu diễn lực tổng hợp tác dụng lên 1 hạt (Trang 10)
Hình 4: Biểu diễn quá trình đệ quy thay thế một cụm bởi tâm điểm - Song song hoá thuật toán Bames hut với OpenMP
Hình 4 Biểu diễn quá trình đệ quy thay thế một cụm bởi tâm điểm (Trang 13)
Hình 5: Cây Quadtree với 4 mức - Song song hoá thuật toán Bames hut với OpenMP
Hình 5 Cây Quadtree với 4 mức (Trang 14)
Hình 6: Cây Octree với 2 mức - Song song hoá thuật toán Bames hut với OpenMP
Hình 6 Cây Octree với 2 mức (Trang 14)
Hình 7: Biểu diễn cây sau khi loại bỏ các ô trống - Song song hoá thuật toán Bames hut với OpenMP
Hình 7 Biểu diễn cây sau khi loại bỏ các ô trống (Trang 15)
Hình 8: Các thành phần trong OpenMP - Song song hoá thuật toán Bames hut với OpenMP
Hình 8 Các thành phần trong OpenMP (Trang 21)
Hình 9: Kiến trúc bộ nhớ chia sẻ - Song song hoá thuật toán Bames hut với OpenMP
Hình 9 Kiến trúc bộ nhớ chia sẻ (Trang 22)
Hình 10: Mô hình Fork-Join - Song song hoá thuật toán Bames hut với OpenMP
Hình 10 Mô hình Fork-Join (Trang 25)
Hình 13: Hình minh họa chỉ thị sections - Song song hoá thuật toán Bames hut với OpenMP
Hình 13 Hình minh họa chỉ thị sections (Trang 32)
Hình 14: Hình minh họa chỉ thị single - Song song hoá thuật toán Bames hut với OpenMP
Hình 14 Hình minh họa chỉ thị single (Trang 34)
Hình 15: Cấu trúc dữ liệu cây trong treecode (1) - Song song hoá thuật toán Bames hut với OpenMP
Hình 15 Cấu trúc dữ liệu cây trong treecode (1) (Trang 42)
Hình 16: Cấu trúc dữ liệu cây trong treecode (2)  3.1.2 Các biến toàn cục - Song song hoá thuật toán Bames hut với OpenMP
Hình 16 Cấu trúc dữ liệu cây trong treecode (2) 3.1.2 Các biến toàn cục (Trang 45)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w