MPI函数说明及示例
2011-09-19 22:57
127 查看
MPI函数说明 (1)并行初始化函数:int MPI_Init(int *argc,char ***argv) 参数描述:argc为变量数目,argv为变量数组,两个参数均来自main函数的参数 (2)并行结束函数: int MPI_Finalize() 例如:hello.c #include "./mpich2/include/mpi.h" #include <stdio.h> int main(int argc,char **argv){ MPI_Init(&argc,&argv);//并行部分开始 printf("hello parallel world!\n"); MPI_Finalize(); } (3)获得当前进程标识函数:int MPI_Comm_rank(MPI_Comm comm,int *rank) 参数描述:comm为该进程所在的通信域句柄,rank为调用这一函数返回的进程在通信域中的标识号 (4)获取通信域包含的进程总数函数:int MPI_Comm_size(MPI_Comm comm,int *size) 参数描述:comm为通信域句柄,size为函数返回的通信域comm内包含的进程总数 (5)获得本进程的机器名函数:int MPI_Get_processor_name(char *name,int *resultlen) 参数描述:name为返回的机器名字符串,resultlen为返回的机器名长度 例如:who.c #include "./mpich2/include/mpi.h" #include <stdio.h> int main(int argc,char **argv) { int myid,numprocs; int namelen; char processor_name[MPI_MAX_PROCESSOR_NAME]; MPI_Init(&argc,&argv); MPI_Comm_rank(MPI_COMM_WORLD,&myid);//获得本进程的ID MPI_Comm_size(MPI_COMM_WORLD,&numprocs);//获得总的进程数目 MPI_Get_processor_name(processor_name,&namelen);//获得本进程的机器名 printf("hello World!Process %d of %d on %s \n",myid,numprocs,processor_name); MPI_Finalize(); } (6)消息发送函数:int MPI_Send(void *buf,int count,MPI_Datatype datatype,int dest,int tag,MPI_Comm comm) 参数描述:buf为发送缓冲区的起始地址,count为将发送的数据个数(以后面的数据类型进行计数),datatype为发送数据的数据类型,dest为目的进程标识号,tag为消息标识,comm为通信域 MPI_Send()将发送缓冲区buf中得count个datatype数据类型的数据发送到标识号为dest的目的进程,本次发送的消息标识是tag (7)消息接收受函数:int MPI_Recv(void *buf,int count,MPI_Datatype datatype,int source,int tag,MPI_Comm,MPI_Status *status) 参数描述:buf为接收缓冲区的起始地址,count为最多可接收的数据个数,datatype为接收数据的数据类型,source为接收数据的来源进程标识号,tag为消息标识,应与相应发送操作的标识相匹配,comm为本进程和发送进程所在的通信域,status为返回状态 例如:message.c #include <stdio.h> #include <string.h> #include "./mpich2/include/mpi.h" int main(int argc,char **argv) { int myid,numprocs,source; MPI_Status status; char message[100]; MPI_Init(&argc,&argv); MPI_Comm_rank(MPI_COMM_WORLD,&myid); MPI_Comm_size(MPI_COMM_WORLD,&numprocs); if(myid != 0) { strcpy(message,"Hello World!");//为发送字符串赋值 //发送字符串时长度要加1,从而包括串结束标志 MPI_Send(message,strlen(message)+1,MPI_CHAR,0,99,MPI_COMM_WORLD); } else { //除0进程的其他进程接收来自于0进程的字符串数据 for(source = 1;source < numprocs;source++) { MPI_Recv(message,100,MPI_CHAR,source,99,MPI_COMM_WORLD,&status); printf("I am process %d.I receive string '%s' from process %d.\n",myid,message,source); } } MPI_Finalize(); } 另附:MPI预定义数据类型与C语言数据类型的对应关系
MPI 数据类型 | 对应C 数据类型 |
MPI_CHAR | Signed char |
MPI_SHORT | Signed short int |
MPI_INT | Signed int |
MPI_LONG | Signed long int |
MPI_UNSIGNED_CHAR | Unsigned char |
MPI_UNSIGNED_SHORT | Unsigned short int |
MPI_UNSIGNED | Unsigned int |
MPI_UNSIGNED_LONG | Unsigned long int |
MPI_FLOAT | Float |
MPI_DOUBLE | Double |
MPI_LONG_DOUBLE | Long double |
MPI_BYTE | 无相应数据类型 |
MPI_PACKED | 无相应数据类型 |
MPI_LONG_LONG_INT | Long long int |
相关文章推荐
- MPI 函数说明 Dining philosophers哲学家进餐问题
- C语言 fread()与fwrite()函数说明与示例
- fopen()、fwrite()、fread()函数使用说明与示例
- fopen()、fwrite()、fread()函数使用说明与示例
- System.DateUtils This of that functions部分函数示例及说明
- System.DateUtils Pick-a-field functions部分函数示例及说明
- C语言 fread()与fwrite()函数说明与示例
- Transact SQL 常用语句以及函数简易说明(含示例)
- C语言 fread()与fwrite()函数说明与示例
- C语言 fread()与fwrite()函数说明与示例
- C语言 fread()与fwrite()函数说明与示例
- Jquery DataTable 函数说明及示例
- C语言 fread()与fwrite()函数说明与示例
- 字段名称Asp.Net中替换JSON中主键内容的函数(很简单,示例+说明)
- System.DateUtils Range checking functions部分函数示例及说明
- C语言 fread()与fwrite()函数说明与示例
- react native 中函数Share示例与说明
- C语言 fread()与fwrite()函数说明与示例
- MPI初学-安装及OpenMPI函数说明
- System.DateUtils Range checking functions部分函数示例及说明