MPI例程说明文档

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MPI例程说明文档
很简单的一个小程序,理解了MPI中的几个基本函数。

以及环境的使用方法。

#include
#include"mpi.h"
#include
#include
#include
using namespace std;
int main(int argc, char *argv[])
{
int myid, numprocs;
MPI_Status status;//状态记录
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &myid);//myid为当前线程编号
MPI_Comm_size(MPI_COMM_WORLD,
&numprocs);//numprocs为该任务总线程数
if (numprocs == 1)//线程数若为1时特殊处理,避免自己向自己发消息的deadlock
{
int data = 123456;
double start = MPI_Wtime();
cout << "data is " << data << endl;
cout << "time left " << endl;
cout << (MPI_Wtime() - start) << "s" << endl; //输出时间
}
else//正文
{
if (myid == 0)//对于第一个线程
{
int data = 123456, feedback;//记录当前时间start_time,以及数据data
double start = MPI_Wtime();
MPI_Send(&data, 1, MPI_INT, (myid + 1) % numprocs, 1, MPI_COMM_WORLD);//向下一进程发送数据
MPI_Recv(&feedback, (myid - 1 + numprocs) % numprocs, MPI_INT, numprocs - 1, 1, MPI_COMM_WORLD, &status);//等待最后一个进程的数据
cout << "data is " << feedback << endl;
cout << "time left " << endl;
cout << (MPI_Wtime() - start) << "s" << endl; //输出时间
}
else//而对于其它进程
{
int deliever;
MPI_Recv(&deliever, 1, MPI_INT, myid - 1, 1, MPI_COMM_WORLD, &status);//等待上一线程所给数据MPI_Send(&deliever, 1, MPI_INT, (myid + 1) % numprocs, 1, MPI_COMM_WORLD);//将数据给下一进程
}
}
MPI_Finalize();
return 0;
}。

相关文档
最新文档