Giao thức truyền thông điệp
Thuật ngữ MPI là viết tắt của Message Passing Interface, chỉ một dạng giao thức kết nối của máy tính. Nó nằm trong chuẩn de facto cho kết nối giữa các nút chạy một chương trình song song trên bộ nhớ chia sẻ được phân phối. Tập MPI thi hành bao gồm một thư viện các thủ tục sao cho có thể gọi được từ các chương trình Fortran, C, C++ hay Ada. Lợi thế của MPI so với các thư viện cũ là nó vừa thuận tiện (vì MPI thực thi cho hầu hết các kiến trúc bộ nhớ phân phối) vừa nhanh (vì mỗi thủ tục được tối ưu hóa cho phần cứng mà nó đang chạy). Thường được so sánh với PVM và có thể kết hợp nó để tạo thành PVMMPI.
Chương trình mẫu
sửaDưới đây là chương trình "Hello World" dùng MPI trong ngôn ngữ C. Chúng ta gửi thông điệp hello
đến mỗi chip, chạy như bình thường, gửi kết quả trở lại chip chính, cuối cùng in ra.
/*
Test of MPI
*/
#include <mpi.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
char idstr[32];
char buff[128];
int numprocs;
int myid;
int i;
MPI_Status stat;
MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
MPI_Comm_rank(MPI_COMM_WORLD,&myid);
if(myid == 0)
{
printf("We have %d processors\n", numprocs);
for(i=1;i<numprocs;i++)
{
sprintf(buff, "Hello %d! ", i);
MPI_Send(buff, 128, MPI_CHAR, i, 0, MPI_COMM_WORLD);
}
for(i=1;i<numprocs;i++)
{
MPI_Recv(buff, 128, MPI_CHAR, i, 0, MPI_COMM_WORLD, &stat);
printf("%s\n", buff);
}
}
else
{
MPI_Recv(buff, 128, MPI_CHAR, 0, 0, MPI_COMM_WORLD, &stat);
sprintf(idstr, "Processor %d ", myid);
strcat(buff, idstr);
strcat(buff, "reporting for duty\n");
MPI_Send(buff, 128, MPI_CHAR, 0, 0, MPI_COMM_WORLD);
}
MPI_Finalize();
return 0;
}
Xem thêm
sửaLiên kết ngoài
sửa- MPI specification
- MPI DMOZ category
- Open MPI web site
- LAM/MPI web site
- MPICH
- SCore MPI
- Scali MPI Lưu trữ 2006-04-27 tại Wayback Machine
- HP-MPI[liên kết hỏng]
- MVAPICH: MPI over InfiniBand
- Parawiki page for MPI Lưu trữ 2006-10-04 tại Wayback Machine
- Global Arrays Lưu trữ 2006-08-13 tại Wayback Machine
- PVM/MPI Users' Group Meeting (2006 edition)
- MPI Samples
- Manage MPI jobs with Moab Lưu trữ 2008-08-27 tại Wayback Machine
- MPICH over Myrinet (GM, classic driver) Lưu trữ 2006-05-06 tại Wayback Machine
- MPICH over Myrinet (MX, next-gen driver) Lưu trữ 2006-03-22 tại Wayback Machine
- Parallel Programming with MatlabMPI Lưu trữ 2006-06-30 tại Wayback Machine
- MPI Tutorial Lưu trữ 2008-05-02 tại Wayback Machine
- Parallel Programming with MPI
- MacMPI Lưu trữ 2007-05-04 tại Wayback Machine