Bài giảng Tính toán lưới - Bài 4: Truyền thông điểm điểm trong lập trình song song truyền thông điệp - Nguyễn Hữu Đức

Truyn thông đim-đim  
Truyn thông đim đim trong lp trình  
song song truyn thông đip  
Truyn thông đim-đim  
Ni dung bài hc  
.
.
.
.
.
.
Khái nim Tiến trình ngun và Tiến trình đích  
Cu trúc thông đip  
Quá trình gi/nhn thông đip  
Gi nhn thông đip có ràng buc  
Gi nhn thông đip không ràng buc  
Các chế đgi  
Truyn thông đim-đim  
Tiến trình ngun và tiến trình đích  
. Truyn thông đim đim là truyn thông hai phía  
Đòi hi khi to quá trình truyn thông tchai phía  
Gm mt tiến trình gi và mt tiến trình nhn  
Tiến trình gi gi là tiến trình ngun  
Tiến trình nhn gi là tiến trình đích  
Truyn thông đim-đim  
Tiến trình ngun và tiến trình đích  
.
Nói chung, tiến trình ngun và tiến trình đích là không đng bộ  
Tiến trình  
gi  
Tiến trình  
nhn  
Tiến trình  
gi  
Tiến trình  
nhn  
Thi gian  
chca  
tiến trình  
gi  
MPI_Recv(sourc  
e = rank ca  
tiến trình  
gi)  
MPI_Send(dest =  
rank ca tiến  
trình nhn)  
MPI_Send(dest =  
rank ca tiến  
trình nhn)  
MPI_Recv(sour  
ce = rank ca  
tiến trình  
gi)  
Thi gian  
chca tiến  
trình nhn  
Truyn thông đim-đim  
Cu trúc thông đip  
.
Gm 2 phn:  
Thông tin vthông đip  
Ni dung thông đip  
.
Thông tin vthông đip gm 4 phn:  
Ngun: tiến trình gi  
Đích: tiến trình nhn  
Nhóm truyn thông: Nhóm tiến trình bao gm cngun và đích  
Tag: Dùng đphân bit vi các thông đip khác  
Quan trng  
Cách dùng phthuc tng chương trình.  
Truyn thông đim-đim  
Ni dung thông đip  
.
Ni dung thông đip gm 3 phn:  
Bđm: Dliu trao đi  
buffer  
Thường là mt mng  
Loi dliu: Loi ca dliu trao đi  
datatype  
Loi dliu ca mng  
Bđếm: Slượng dliu trong bđm cn trao đi  
count: count * sizeof(dtype)  
Sphn tca mng  
Truyn thông đim-đim  
Quá trình gi nhn thông đip  
.
Quá trình gi thông đip  
Ngun (đnh danh người gi) là ngm đnh  
Thông tin và ni dung ca thông đip phi được khai báo rõ ràng  
bi tiến trình gi  
.
Thông đip treo (a pending message)  
Thông đip đã gi nhưng chưa được nhn  
Không được lưu trong hàng đi  
Cha các thuc tính phc vquá trình nhn  
Truyn thông đim-đim  
Qúa trình gi nhn thông đip  
.
Quá trình nhn thông đip  
Chđnh thông tin thông đip đso khp vi các thông đip treo  
Thành công: thông đip được nhn, quá trình nhn kết thúc  
Không thành công: tiếp tc chđi, so khp, quá trình nhn chưa  
hoàn thành  
Cung cp đkhông gian lưu trcho ni dung thông đip  
Truyn thông đim-đim  
Gi nhn thông đip có ràng buc  
.
Dùng hai đnh tuyến (routine)  
MPI_Send: gi thông đip  
MPI_Recv: nhn thông đip  
.
.
Chai đnh tuyến đu ràng buc vi tiến trình gi nó  
Sràng buc kết thúc khi quá trình truyn thông hoàn thành  
.
.
Khi nào hoàn thành truyn thông?  
Hin tượng deadlock có tn ti?  
Truyn thông đim-đim  
Đnh tuyến MPI_Send  
buffer  
Ni dung thông đip  
count  
datatype  
destination  
tag  
Thông tin thông đip (source được hiu ngm đnh)  
communicator  
Truyn thông đim-đim  
Đnh tuyến MPI_Send (tiếp)  
MPI_Send(void* buf, int count, MPI_Datatype dtype, int dest,  
int tag, MPI_Comm comm)  
Truyn thông đip trong buf đến tiến trình dest  
Giá trtrvca hàm là mã li  
IN/OUT  
Tên biến  
Loi biến  
Mô tả  
biến con tr(không  
đnh kiu)  
trđến vùng nhcha dữ  
liu  
IN  
buf  
slượng phn ttrong dữ  
liu  
IN  
count  
int  
IN  
IN  
IN  
dtype  
dest  
tag  
MPI_Datatype  
kiu dliu  
int  
int  
rank ca tiến trình đích  
đxác đnh thông đip  
communicator ca tiến  
trình gi và nhn  
IN  
comm  
MPI_Comm  
Truyn thông đim-đim  
Đnh tuyến MPI_Recv  
buffer  
Ni dung thông đip  
count  
datatype  
source  
Thông tin thông đip (destination được hiu ngm  
đnh) - đso khp vi thông đip treo  
tag  
communicator  
status  
Thông tin vthông đip đã nhn  
Giá trca tag, source có thlà các ký tthay thế.  
Truyn thông đim-đim  
MPI_Recv(void* buf, int count, MPI_Datatype dtype, int source,  
int tag, MPI_Comm comm, MPI_Status* status)  
Nhn truyn thông đip tsource đưa vào buf  
Giá trtrvca hàm là mã li  
IN/OUT  
Tên biến  
Loi biến  
Mô tả  
Biến con tr(không  
đnh kiu)  
Trđến vùng nhcha dữ  
liu  
OUT  
buf  
Slượng phn ttrong dữ  
liu  
IN  
count  
int  
IN  
IN  
IN  
dtype  
source  
tag  
MPI_Datatype  
kiu dliu  
int  
int  
Rank ca tiến trình gi  
đxác đnh thông đip  
Communicator ca tiến  
trình gi và nhn  
IN  
comm  
status  
MPI_Comm  
MPI_Status  
Thông tin vthông đip đã  
nhn  
OUT  
Truyn thông đim-đim  
Mt slưu ý quan trng vđnh tuyến MPI_Recv  
Nếu thông đip nhn được có slượng phn tln hơn giá trị  
count, sphát sinh li.  
Tiến trình gi và nhn phi đng ý vi nhau vloi dliu truyn  
thông. Nếu không, kết qulà không xác đnh (MPI không kim tra  
được chính xác dliu)  
Khi đnh tuyến trvgiá trị  
Dliu nhn đã được chuyn vào bđm;  
Đi sstatus cho biết giá trcác tham ssource, tag, và số  
lượng dliu thc snhn được  
Truyn thông đim-đim  
Ví d1 – Truyn thông đim đim  
1. /* simple send and receive */  
2. #include <stdio.h>  
3. #include <mpi.h>  
4. #include <math.h>  
5. int main (int argc, char **argv) {  
6. int myrank,i;  
7. MPI_Status status;  
8. double a[100],b[100];  
9. MPI_Init(&argc, &argv); /* Initialize MPI */  
10.MPI_Comm_rank(MPI_COMM_WORLD, &myrank); /* Get rank */  
Truyn thông đim-đim  
Ví d1 – Truyn thông đim đim  
11.if( myrank == 0 ){/* Send a message */  
12.  
for (i=0;i<100;++i) a[i]=sqrt(i);  
13.  
MPI_Send( a, 100, MPI_DOUBLE, 1, 17, MPI_COMM_WORLD );  
14.}  
15.else if( myrank == 1 ) /* Receive a message */  
16. MPI_Recv( b, 100, MPI_DOUBLE, 0, 17, MPI_COMM_WORLD,  
&status );  
17.MPI_Finalize(); /* Terminate MPI */  
18.}  
Truyn thông đim-đim  
Ví d1 – Truyn thông đim đim  
mpicc comm_pp.c –o comm_pp
Biên dch:  
Truyn thông đim-đim  
Ký tthay thế, biến status  
.
Tiến trình nhn được phép nhn dliu ttiến trình gi bt kỳ vi tag  
bt kỳ.  
.
.
.
Bt kỳ ngun nào: MPI_ANY_SOURCE  
Bt kỳ tag nào: MPI_ANY_TAG  
Có thdùng ký tthay thế cho ngun hoc tag hoc chai  
Truyn thông đim-đim  
Ký tthay thế, biến status  
.
Thông tin ca tiến trình gi nm trong biến status  
status.MPI_SOURCE  
status.MPI_TAG  
int MPI_Get_count(MPI_Status *status, MPI_Datatype dtype, int  
*count);  
Kích thước ca thông đip  
Sphn tđược gi, các phn tcó loi dliu xác đnh  
Truyn thông đim-đim  
Ví d2 – Truyn thông đim đim  
1. #include <stdio.h>  
2. #include <mpi.h>  
3. #include <math.h>  
4. int main (int argc, char **argv) {  
5. int myrank,i;  
6. MPI_Status status;  
7. double a[100],b[300];  
8. MPI_Init(&argc, &argv); /* Initialize MPI */  
9. MPI_Comm_rank(MPI_COMM_WORLD, &myrank); /* Get rank */  
Tải về để xem bản đầy đủ
pdf 54 trang Thùy Anh 29/04/2022 7860
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Tính toán lưới - Bài 4: Truyền thông điểm điểm trong lập trình song song truyền thông điệp - Nguyễn Hữu Đức", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_tinh_toan_luoi_bai_4_truyen_thong_diem_diem_trong.pdf