Mpi là gì

Cấu trúc chương trình MPINhóm (group) cùng ComunicatorTruyền thông trường đoản cú điểm cho tới điểmTruyền thông tập hợpNhững bài tập lập trình song song

MPI là gì?

M Phường I = Message Passing Interface, là đặc tả cho tất cả những người cải cách và phát triển và thỏng viện thiết kế truyền thông message thực hiện trong tính toán thù song song. Tập lệnh MPI triển khai bao hàm thỏng viện những giấy tờ thủ tục làm sao để cho hoàn toàn có thể Hotline được trường đoản cú những lịch trình Fortran, C, C++ xuất xắc Adomain authority.

Bạn đang xem: Mpi là gì

Mô hình lập trình

Xu hướng technology đổi khác, bộ nhớ chia sẻ kết hợp với mạng máy tính tạo thành dạng lai của hai khối hệ thống bộ nhớ lưu trữ share với bộ nhớ phân tán.Ngày nay MPI có thể chạy trên phần lớn các căn nguyên phần cứng:Bộ lưu giữ phân tách sẻSở lưu giữ phân tánDạng lai hai các loại trên

Cấu trúc công tác MPI

*

ví dụ như 1: Khởi chế tạo môi trường xung quanh, in ra id của những tác vụ

#include "mpi.h"#include "stdio.h"int main(int argc, char * argv<>)//Khoi tao moi truong đến MPIMPI_Init(&argc,&argv); int numtasks;//Chua so process vào groupint idtask;//Chua gia tri id cua moi processMPI_Comm_size(MPI_COMM_WORLD,&numtasks);MPI_Comm_rank(MPI_COMM_WORLD,&idtask); //in ra id cua cac tac vu va so tac vu khoi tao printf("Id tac vu: %d trong tong so: %d ",idtask, numtasks);//Giai phong moi truong MPIMPI_Finalize();return 0;Tđắm đuối khảo cách tích thích hợp MPI vào Visual Studio với cấu hình

Nhóm (group) và Comunicator

Một team là một trong tập tất cả nỗ lực từ bỏ của các các bước. Mỗi các bước trong một đội nhóm được thêm với một số trong những id duy nhất (rank). Các cực hiếm của rank ban đầu từ 0 tới N-1, tại đây N là số các bước trong đội. Trong MPI, một đội được đại diện thay mặt trong bộ nhớ hệ thống nlỗi một đối tượng người sử dụng.

Xem thêm: Hướng Dẫn Tải Pes 2013 Việt Hóa Mùa 2020 Thành Công 100%, Download Game Pes 2013 Việt Hoá

Nó rất có thể truy vấn vị những lập trình viện chỉ qua “handle”. Một team luôn luôn luôn gắn thêm với một đối tượng người dùng communicator.Một communicator tương quan mang lại một đội các các bước cơ mà hoàn toàn có thể giao tiếp với nhau. Tất cả những message MPI bắt buộc chỉ định và hướng dẫn bởi vì một communicator. Giống nlỗi group, những communicator được diễn tả vào bộ nhớ như các đối tượng người dùng cùng được truy cập vày xây dựng viên chỉ qua những “handle”. lấy một ví dụ, handle cho 1 communicator là bao hàm toàn bộ những tác vụ của MPI_COMM_WORLD.Về chu đáo xây dựng viên, một đội với một communicator là 1.

*

Ví dụ 2: Từ đội thuở đầu, tạo thành 2 nhóm đơn lẻ cùng thực hiện media trên mỗi nhóm

#include "mpi.h"#include "stdio.h"#define NPROCS 8int main(int argc, char *argv<>) {int rank, new_rank, sendbuf, recvbuf, numtasks, ranks1<4>=0,1,2,3, ranks2<4>=4,5,6,7;MPI_Group orig_group, new_group;MPI_Comm new_comm;//Khoi tao moi truong MPIMPI_Init(&argc,&argv);MPI_Comm_rank(MPI_COMM_WORLD, &rank);MPI_Comm_size(MPI_COMM_WORLD, &numtasks);if (numtasks != NPROCS) printf("So tac vu nen = %d. Ket thuc. ",NPROCS); MPI_Finalize(); sendbuf = rank;/* Lay ra handle cua nhom goc*/MPI_Comm_group(MPI_COMM_WORLD, &orig_group);/* Phan bỏ ra tkhô cứng 2 nhom rieng biet dua tren rank */if (rank

Truyền thông từ bỏ điểm tới điểm

lấy ví dụ như 3: Thực hiện truyền thông media có khoá gửi message ‘x’, ‘y’ từ tác vụ tất cả id = 0 cho tới tác vụ 1 cùng ngược lại

#include "mpi.h"#include "stdio.h"int main(int argc, char* argv<>) int noProc, idProc;char inmsg, outmsg = "x";int dest, source,tag = 1;MPI_Status Stat;MPI_Init(&argc,&argv);MPI_Comm_size(MPI_COMM_WORLD,&noProc);MPI_Comm_rank(MPI_COMM_WORLD,&idProc);//Gui msg tu tac vu co id = 0 toi tac vu co id = 1if(idProc == 0)//gui du lieu "x" toi tac vu co id = 1dest = 1;source = 1;MPI_Send(&outmsg,1,MPI_CHAR,dest,tag,MPI_COMM_WORLD); //nhan du lieu "y" tu tac vu co id = 1MPI_Recv(&inmsg,1,MPI_CHAR,source,tag,MPI_COMM_WORLD,&Stat);printf("ProcessID: %d, Message domain authority nhan duoc:%c ",idProc,inmsg);if(idProc == 1) source = 0;dest = 0; //nhan du lieu "x" tu tac vu co id = 0MPI_Recv(&inmsg,1,MPI_CHAR,source,tag,MPI_COMM_WORLD,&Stat);printf("ProcessID: %d, Message da nhan duoc:%c ",idProc,inmsg);outmsg = "y"; //gui du lieu "y" toi tac vu teo id = 0MPI_Send(&outmsg,1,MPI_CHAR,dest,tag,MPI_COMM_WORLD);//Giai phong MPIMPI_Finalize();return 0;

lấy ví dụ 4: Thực hiện truyền thông ko khoá, gửi message vòng tròn từ tác vụ bao gồm id 0 -> 1 …-> n-1 cùng ngược lại

#include "stdio.h"#include "mpi.h"int main(int argc, char* argv<>)int noProc, idProc, next, prev, tag1 = 1, tag2 = 2;char inmsg<2>, outmsg<2>;MPI_Request reqs<4>;MPI_Status stats<4>;outmsg<0> = "x";outmsg<1> = "y"; //Khoi tao moi truong MPI su dung cac doi so mac dinc cua ham mê mainMPI_Init(&argc,&argv);MPI_Comm_size(MPI_COMM_WORLD,&noProc);MPI_Comm_rank(MPI_COMM_WORLD, &idProc);next = idProc + 1;prev = idProc - 1;if(idProc == 0) prev = noProc - 1;if(idProc == (noProc -1)) next = 0; //gui va nhan du lieu theo kieu non-blockingMPI_Isend(&outmsg<0>,1,MPI_CHAR,next,tag1,MPI_COMM_WORLD,&reqs<0>);MPI_Irecv(&inmsg<0>,1,MPI_CHAR,prev,tag1,MPI_COMM_WORLD, &reqs<1>);MPI_Irecv(&inmsg<1>,1,MPI_CHAR,next,tag2,MPI_COMM_WORLD, &reqs<2>);MPI_Isend(&outmsg<1>,1,MPI_CHAR,prev,tag2,MPI_COMM_WORLD, &reqs<3>); //doi cac tien trinch nhan va gui message ket thuc//MPI_Wait(&reqs,&stats);MPI_Waitall(4,reqs,stats);printf("ProcessId:%d, Message tag1:%c ",idProc, inmsg<0>);printf("ProcessId:%d, Message tag2:%c ",idProc, inmsg<1>); MPI_Finalize();return 0;Giải thíchĐoạn code trên tiến hành gửi message vòng tròn từ giữa các tác vụ, ví tụ tác vụ tất cả id là i gửi tài liệu cho tới tác vụ i+1 với thừa nhận message từ bỏ i-1 cùng ngược trở lại.
*