MPI六个基本的调用函数

一、初始化:

1、函数原型:

int MPI_Init(int *argc, char ***argv);

2、调用格式:

int main(int argc, char *argv[])
{	
    MPI_Init(&argc, &argv);
    return 0;
}

3、解释:

MPI_Init() 是MPI程序的第一个调用,它完成MPI程序所有的初始化工作,所有MPI程序的第一条可执行语句都是这条语句。MPI系统通过argc和argv得到命令行参数,并且将MPI系统专用的参数删除,留下用户的解释参数。

二、结束MPI:

1、函数原型:

int MPI_Finalize(void);

2、调用格式:

int main(int argc, char *argv[])
{
    MPI_Init(&argc, &argv);
    // ...
    MPI_Finalize();
    return 0;
}

3、解释:

结束MPI程序的运行。每个进程都必须调用,使用后不准再调用任何MPI函数。若不执行MPI_Finalize()函数,进程可能被悬挂。在调用该函数前,应确保非阻塞通讯结束。

三、获取通信域中的进程数:

1、函数原型:

int MPI_Comm_size(MPI_Comm comm, int *size);

2、调用格式:

int main(int argc, char *argv[])
{
    int numprocs;
    MPI_Init(&argc, &argv);
    MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
    // ...
    MPI_Finalize();
    return 0;
}

3、解释:

这一调用返回给定的通信域中所包括的进程的个数,不同的进程通过这一调用得知在给定的通信域中一共有多少个进程在并行执行。mpirun命令中选项 -np <进程数>有关,MPI_COMM_WORLD是MPI系统提供的缺省的通信器。

四、获取进程标识号:

1、函数原型:

int MPI_Comm_rank(MPI_Comm comm, int *rank);

2、调用格式:

int main(int argc, char *argv[])
{
    int myid;
    MPI_Init(&argc, &argv);
    MPI_Comm_rank(MPI_COMM_WORLD, &myid);
    // ...
    MPI_Finalize();
    return 0;
}

3、解释:

这一调用返回调用进程在给定的通信域中的进程标识号

五、发送数据:

1、函数原型:

int MPI_Send(void* buf,int count,MPI_Datatype datatype,int dest,int tag,MPI_Comm comm);

2、参数说明:

void *buf                    待发送数据的首地址
int count                    待发送的数据个数
MPI_Datatype datatype        待发送数据的数据类型
int dest                     目标进程标识号
int tag                      发送数据包的标签号
MPI_Comm comm                在指定通信域的进程组中发送数据

3、解释:

MPI_Send将发送缓冲区中的count个datatype数据类型的数据发送到目的进程,目的进程在通信域中的标识号是dest,本次发送的消息标志是tag,使用这一标志就可以把本次发送的消息和本进程向同一目的进程发送的其它消息区别开来。

六、接收数据:

1、函数原型:

int MPI_Recv(void* buf,int count,MPI_Datatype datatype,int source,int tag,MPI_Comm comm,MPI_Status *status);

2、参数说明:

void *buf                存放所接收数据的首地址(需有足够空间)
int count                所接收的数据个数
MPI_Datatype datatype    所接收数据的数据类型
int source               根据发送数据的进程标识号接收
int tag                  根据数据包的标签号接收
MPI_Comm comm            根据指定通信域接收
MPI_Status *status       执行本接收操作的状态

3、解释:

MPI_Recv从指定的进程source接收消息,并且该消息的数据类型和消息标识和本接收进程指定的datatype和tag相一致,接收到的消息所包含的数据元素的个数最多不能超过count,并将该过程的状态信息写入status中。MPI_Status有数据成员MPI_SOURCE, MPI_TAG, MPI_ERROR,分别表示发送数据的进程标识,发送数据使用tag标识和该接收操作返回的错误代码。

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值