9. }
Truy n thông đi m-đi mề ể ể
Tránh hi n tệ ượng deadlock
Phân tích thi t k chế ế ương trình phù h pợ
T ch c chổ ứ ương trình không ph thu c kích thụ ộ ước b đ m c a MPIộ ệ ủ
Có th debug chể ương trình song song b ng các công c h tr nh ằ ụ ỗ ợ ư
ch c năng debug c a ptp, hay m t s công c hi n th tr c quan khác,ứ ủ ộ ố ụ ể ị ự
…
Truy n thông đi m-đi mề ể ể
Truy n thông không ràng bu cề ộ
Th c thi các đ nh tuy n g i, nh n mà không khóa ti n trình g i nó.ự ị ế ử ậ ế ọ
Tách quá trình kh i t o và hoàn thành thành hai l i g i MPI khác nhau.ở ạ ờ ọ
• Kh i t o quá trình g i/nh nở ạ ử ậ
• Hoàn thành quá trình g i/nh nử ậ
Gi a hai l i g i, chữ ờ ọ ương trình có th th c hi n các đ nh tuy n khác.ể ự ệ ị ề
Truy n thông t ng th p là gi ng nhau, m c dù giao di n c a th vi n là ề ầ ấ ố ặ ệ ủ ư ệ
khác nhau.
Truy n thông đi m-đi mề ể ể
Kh i t o, hoàn thành, trình đi u khi nở ạ ề ể
Kh i t o:ở ạ
• Kh i t o quá trình g iở ạ ử
• Kh i t o quá trình nh nở ạ ậ
Sau khi kh i t o quá trình g i/nh n, có hai cách đ hoàn thành quá ở ạ ử ậ ể
trình:
• Ki m tra xem quá trình đã hoàn thành hay ch aể ư
• Đ i cho đ n khi hoàn thànhợ ế
Trình đi u khi n:ề ể
• Luôn được tr v b i các đ nh tuy n g i/nh n không ràng bu cả ề ở ị ề ử ậ ộ
Truy n thông đi m-đi mề ể ể
Đ nh tuy n kh i t o MPI_Isendị ế ở ạ
MPI_Isend(void *buf, int count, MPI_Datatype dtype, int dest, int tag, MPI_Comm comm, MPI_Request *request)
Không đ c/ghi bi n nào trong l i g i trọ ế ờ ọ ước giai đo n hoàn thànhạ
IN/OUT Tên bi nế Lo i bi nạ ế Mô tả
IN buf bi n con tr (không ế ỏ
đ nh ki u)ị ể tr đ n vùng nh ch a d li uệỏ ế ớ ứ ữ
IN count int s lố ượng ph n t trong d ầ ử ữ
li uệ
IN dtype MPI_Datatype ki u d li uể ữ ệ
IN dest int rank c a ti n trình đíchủ ế
IN tag int đ xác đ nh thông đi pể ị ệ
IN comm MPI_Comm communicator c a ti n ủ ế
trình g i và nh nử ậ
Truy n thông đi m-đi mề ể ể
Đ nh tuy n kh i t o MPI_Irecvị ế ở ạ
MPI_Irecv(void* buf, int count, MPI_Datatype dtype, int source, int tag, MPI_Comm comm, MPI_Request *request)
Không đ c/ghi bi n nào trong l i g i trọ ế ờ ọ ước giai đo n hoàn thànhạ
IN/OUT Tên bi nế Lo i bi nạ ế Mô tả
OUT buf Bi n con tr (không ế ỏ
đ nh ki u)ị ể Tr đ n vùng nh ch a d li uệỏ ế ớ ứ ữ
IN count int S lố ượng ph n t trong d ầ ử ữ
li uệ
IN dtype MPI_Datatype ki u d li uể ữ ệ
IN source int Rank c a ti n trình đíchủ ế
IN tag int đ xác đ nh thông đi pể ị ệ
IN comm MPI_Comm Communicator c a ti n ủ ế
trình g i và nh nử ậ
Truy n thông đi m-đi mề ể ể
Bi n request: xác đ nh ti n trình kh i t o g i/nh nế ị ế ở ạ ử ậ
MPI_Wait tr v đi u khi n khi ti n trình kh i t o g i/nh n hoàn thànhả ề ề ể ế ở ạ ử ậ
Bi n status:ế
• Đ nh tuy n kh i t o g i: mã l i cho quá trình g iị ế ở ạ ử ỗ ử
• Đ nh tuy n kh i t o nh n: thông tin c a thông đi p nh n.ị ế ở ạ ậ ủ ệ ậ
Đ nh tuy n hoàn thành: MPI_Waitị ế
Truy n thông đi m-đi mề ể ể
Bi n request: xác đ nh ti n trình kh i t o g i/nh nế ị ế ở ạ ử ậ
MPI_Test tr v đi u khi n ngay khi g i xong.ả ề ề ể ọ
Bi n flag:ế
• true: đ nh tuy n kh i t o đã hoàn thànhị ế ở ạ
• false: đ nh tuy n kh i t o ch a hoàn thànhị ế ở ạ ư
Bi n status: khi (flag == true)ế
• Đ nh tuy n kh i t o g i: mã l i cho quá trình g iị ế ở ạ ử ỗ ử
• Đ nh tuy n kh i t o nh n: thông tin c a thông đi p nh n.ị ế ở ạ ậ ủ ệ ậ
•Đ nh tuy n hoàn thành: MPI_Testị ế
int MPI_Test(MPI_Request *request, int *flag, MPI_Status* status)
Truy n thông đi m-đi mề ể ể