Tải bản đầy đủ

Lập trình song song với thư viện lập trình MPICHMPI và ứng dụng

Lập trình song song với thư viện lập
trình MPICH/MPI và ứng dụng


Thư viện lập trình song song MPI và ứng dụng

Nội dung chính:
- Mô hình truyền thông điệp
- Thư viện song song MPI
- Phầm mềm hỗ trợ lập trình song song
MPICH2

Đỗ Huy Quang

2

MPICH / MPI


Mô hình truyền thông điệp
Chương trình song song

Process 1

Process K

Prosess N

Bài toán chia ra làm nhiều công việc nhỏ, mỗi công việc được thực
hiện bởi một tiến trình.
Đỗ Huy Quang

3

MPICH / MPI


Đặc điểm mô hình lập trình truyền thông điệp
Nhiều tiến trình cùng hoạt động.
Mỗi tiến trình chạy một bản copy của một
chương trình duy nhất.
Process 0

Process 1

Process n

int A;

int A;

int A;

int B;

int B;

int C=A+B;

int C=A+B;

int C=A+B;



int D = B-A;

int D = B-A;

int D = B-A;

Đỗ Huy Quang

4



int B;

MPICH / MPI


Đặc điểm mô hình lập trình truyền thông điệp
Mỗi tiến trình có một không gian địa chỉ riêng
và độc quyền.

Đỗ Huy Quang

5

MPICH / MPI


Đặc điểm mô hình lập trình truyền thông điệp
Liên lạc giữa các tiến trình


Mỗi tiến trình có một định danh, còn gọi là hạng (rank) của tiến trình

trong nhóm.
• Việc liên lạc, phân chia công việc, dữ liệu đuợc dựa trên hạng của tiến
trình

Đỗ Huy Quang

6

MPICH / MPI


Đặc điểm mô hình lập trình truyền thông điệp
Liên lạc giữa các tiến trình
• Gửi nhận dữ liệu :
 Thông điệp: gói dữ liệu đuợc truyền giữa các tiến trình.
Việc gửi/nhận thông diệp được thực hiện bởi hệ thống truyền



thông diệp: message passing system
 Ðể thực hiện gửi/nhận thông điệp, hệ thống truyền thông điệp
cần:
– phía gửi: địa chỉ tiến trình nhận, vị trí dữ liệu gửi, kiểu dữ liệu
gửi, kích thuớc dữ liệu gửi.
– phía nhận: địa chỉ tiến trình gửi, vị trí dữ liệu nhận, kiểu dữ liệu
nhận, kích thuớc dữ liệu nhận.

Đỗ Huy Quang

7

MPICH / MPI


Đặc điểm mô hình lập trình truyền thông điệp
Mọi thao tác liên lạc đều cần sự phối hợp giữa
2 tiến trình: tiến trình có dữ liệu và tiến trình
cần dữ liệu.
Kiến trúc lập trình là SIMD và MIMD.

Đỗ Huy Quang

8

MPICH / MPI


Môi trường truyền thông điệp
Lập trình song song truyền thông điệp:
 Thiết kế ngôn ngữ lập trình song song chuyên
dụng. Vd: OCCAM
 Phát triển 1 số ngôn ngữ lập trình bậc cao để
điều khiển thông điệp: C/C++, Fortran M
 Kết hợp ngôn ngữ lập trình với thư viện truyền
thông điệp (MPI, PVM)

Đỗ Huy Quang

9

MPICH / MPI


MPI - Message Passing Interface
 MPI là bộ thư viện hỗ trợ việc lập trình song song
 Nó bao gồm các thủ tục, kiểu dữ liệu, hằng định
nghĩa... dùng để đặc tả truyền thông điệp.

Ưu điểm :
Sự chuẩn hoá: dùng cho nhiều nền tảng và nhiều



ngôn ngữ lập trình.
Sự linh hoạt: Không cần thay đổi code khi biên



dịch ở các flatform khác nhau.
Khai thác tối ưu nền tảng phần cứng đẩy hiệu



suất lên cao nhất.
Đỗ Huy Quang

10

MPICH / MPI


Một số thủ tục chính của MPI

Đỗ Huy Quang

11

MPICH / MPI


Viết chương trình đầu tiên
#include"mpi.h"
#include
int main(int argc, char *argv[])
{
MPI_Init(&argc, &argv);

printf("Hello, world!\n");

MPI_Finalize();
return 0;
}

Đỗ Huy Quang

12

MPICH / MPI


Viết chương trình đầu tiên

Đỗ Huy Quang

13

MPICH / MPI


Thủ tục môi trường
 int MPI_Init(int argc, char **argv)
• Khởi tạo môi trường MPI
• Gán hạng cho các tiến trình
• Được gọi một lần duy nhất trong một
chương trình
• Gọi trước tất cả các thủ tục MPI khác
 int MPI_Finalize()
• Đóng môi trường MPI
• Không thủ tục nào được sử dụng sau
thủ tục này kể cả MPI_Init
Đỗ Huy Quang

14

MPICH / MPI


Thủ tục môi trường
 MPI Communicator (Kênh truyền thông)
Kênh truyền thông là một tập hợp các tiến
trình tham gia liên lạc với nhau.
Các tiến trình trong đó được định danh,
gán rank cho các tiến trình là các số từ 0
đến size - 1
MPI_COMM_WORLD là kênh truyền thông
đã được định nghĩa sẵn, bao gồm tất cả
các tiến trình.

Đỗ Huy Quang

15

MPICH / MPI


Thủ tục môi trường
 int MPI_Comm_size(MPI_Comm comm, int *size)
•Trả về số lượng tiến trình
Tham số:
•comm - số hiệu kênh truyền thông dữ liệu
•size - giá trị trả về số lượng tiến trình
 int MPI_Comm_rank(MPI_Comm comm, int
*rank)
• Trả về số hiệu các tiến trình
 Tham số:
• comm - số hiệu kênh
• rank - giá trị trả về số hiệu của tiến trình
trong phạm vi từ 0…size-1
Đỗ Huy Quang

16

MPICH / MPI


Thủ tục môi trường
Ví dụ : đưa ra rank của tiến trình hiện tại và số lượng tiến trình.

Đỗ Huy Quang

17

MPICH / MPI


Thủ tục môi trường

Đỗ Huy Quang

18

MPICH / MPI


Thủ tục truyền thông điểm – điểm
Buffered blocking
operations
Lệnh send(): sender sẽ bị
khóa cho đến khi message đã
được sao chép đầy đủ lên bộ
đệm nhận.
Lệnh receive(): receiver
cũng bị khóa cho đến khi
message đã được nhận từ bộ
đệm.

Đỗ Huy Quang

19

MPICH / MPI


Thủ tục truyền thông điểm – điểm
MPI_Send
int MPI_Send(void *buf, int count,
MPI_Datatype datatype, int dest,int msgtag,
MPI_Comm comm)
 Thực hiện nhiệm vụ gửi các thông điệp tới các
tiến trình
MPI_Recv
int MPI_Recv(void *buf, int count,
MPI_Datatype datatype, int source,int msgtag,
MPI_Comm comm, MPI_Status *status)
 Thực hiện nhiệm vụ nhận các thông điệp truyền về từ
các tiến trình
Đỗ Huy Quang

20

MPICH / MPI


Thủ tục truyền thông điểm – điểm

Đỗ Huy Quang

21

MPICH / MPI


Bảng ánh xạ kiểu dữ liệu

Đỗ Huy Quang

22

MPICH / MPI


Thủ tục truyền thông điểm – điểm
MPI_Isend
int MPI_Isend(void *buf, int count,
MPI_Datatype datatype, int dest,int msgtag,
MPI_Comm comm, MPI_Request *request)
 Thủ tục gửi không bị khoá
MPI_Irecv
int MPI_Irecv(void *buf, int count,
MPI_Datatype datatype, int source,int msgtag,
MPI_Comm comm, MPI_Status *request)
 Thủ tục nhận không bị khoá
Đỗ Huy Quang

23

MPICH / MPI


Thủ tục truyền thông điểm – điểm

Đỗ Huy Quang

24

MPICH / MPI


Thủ tục truyền thông tập hợp
MPI_Bcast
int MPI_Bcast(void* buf, int count, MPI_Datatype
datatype, int root, MPI_Comm comm )
 Thực hiện việc gửi một thông điệp từ tiến
trình gốc tới toàn bộ các tiến trình còn lại
trong comm

Đỗ Huy Quang

25

MPICH / MPI


Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay

×