Tải bản đầy đủ (.pdf) (61 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (573.85 KB, 61 trang )

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 (N
2
) 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 (N
2

) 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 < t
final
)
{
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 m
2
kg
-2

• m
a,
m
b:
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à: F
net


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 t
0
,

t
1
, … với khoảng thời gian là δt. Dưới tác dụng của lực F
net
,
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(N
2
). 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(N
2
).
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 c của n để thêm hạt i.
Song song hóa thuật toán Barnes-Hut với OpenMP



Lê Thị Lan Phương

11
QuadInsert(i,c)
else if cây con có gốc tại n chứa đúng 1 hạt
Thêm 4 con của n vào cây Quadtree
Chuyển hạt có trong n sang một ô con
Chọn con c của n để thêm hạt i
QuadInsert(i,c)
else if cây con tại n là rỗng
Lưu hạt i vào nút n
endif
Bước 2: 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 ô.
... 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)
Song song hóa thuật toán Barnes-Hut với OpenMP



Lê Thị Lan Phương

12
+ mass(3)*cm(3) + mass(4)*cm(4)) / mass
store ( mass, cm ) at n
return ( mass, cm )
end
Bước 3: Với mỗi hạt, duyệt cây để tính lực tác dụng lên nó.
Để tính lực tác dụng lên hạt, ta xét tỉ số:

D/r =

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.
• (x
cm
, y

cm
, z
cm
) là vị trí của tâm hạt trong hộp
• m
cm
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à:
Force = G * m * m
cm
* ( (x
cm
-x)/r
3
, (y
cm
-y)/r
3
, (z
cm
-z)/r
3
) (*)
Trong đó r = sqrt ((x
cm
-x)
2
+ (y
cm

-y)
2
+ (z
cm
-z)
2
) là khoảng cách từ hạt tới tâm các
hạt có trong hộp.
Nếu D/r >= θ, quá trình tính lực tác dụng lên một hạt được áp dụng đệ quy. Lực
tác dụng lên hạt bằng tổng các lực ở các nút con tác dụng lên hạt đó.
Thuật toán tính lực tác dụng lên hạt ở bước này có thể được mô tả như dưới đây.
Kích thước của hộp
Khoảng cách từ hạt tới tâm khối
Song song hóa thuật toán Barnes-Hut với OpenMP



Lê Thị Lan Phương

13
... với mỗi hạt, duyệt cây để tính lực tác dụng lên nó
For i = 1 to n
f(i) = TreeForce(i,root)
end for
function f = TreeForce(i,n)
... tính lực hấp dẫn tác dụng lên hạt i
... dựa vào tất cả các hạt có trong nút n
f = 0
if n chứa 1 hạt
f = lực tính được dựa vào công thức (*)

else
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
if D/r < theta
tính lực f dựa vào công thức (*)
else
for tất cả các con c của n
f = f + TreeForce(i,c)
end for
end if
end if
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.
Song song hóa thuật toán Barnes-Hut với OpenMP



Lê Thị Lan Phương

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




















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



Lê Thị Lan Phương

15
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
Song song hóa thuật toán Barnes-Hut với OpenMP



Lê Thị Lan Phương

16
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ẻ
Song song hóa thuật toán Barnes-Hut với OpenMP



Lê Thị Lan Phương

17
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ý
( />)
• 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ý).
( />)
• HP Exemplar series, như S-class (gồm 4 đến 16 bộ xử lý), X-class (tới

64 bộ xử lý) ( />)
• DEC Ultimate Workstation. Gồm 2 bộ xử lý, nhưng tốc độ của mỗi bộ
xử lý rất cao (533 MHz)
( />html).
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++
Song song hóa thuật toán Barnes-Hut với OpenMP



Lê Thị Lan Phương

18
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. ( />)
• IBM ( />)

• Intel Corporation ( />)
• Kuck & Associates Inc. ( />)
• Silicon Graphics Inc. ( />)
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

để 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 ( />)
• IBM XL Fortran
( />)
• KAI KAP/Pro Toolset ( />)
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.
Song song hóa thuật toán Barnes-Hut với OpenMP



Lê Thị Lan Phương

19

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.
Chú ý khi sử dụng thuật ngữ.

OpenMP hỗ trợ ngôn ngữ C/C++ và Fortran. Tuy giống nhau về mặt ngữ nghĩa,
song cấu trúc khai báo các chỉ thị của OpenMP lại khác nhau.
Ví dụ:

• Fortran:

×