mpi/c++;将代码转换为并行

mpi/c++;将代码转换为并行,mpi,Mpi,我是mpi新手。我正在尝试用mpi并行我的代码(需要更快地运行一些实验)。它应该是这样工作的:master向从机发送一个字符串数组,它们执行一些工作并将status_ready发送回master。当所有从机准备就绪时,主机进入循环并迭代地向从机发送一个双倍向量,从机处理该向量并将其结果(2个向量)发送回主机。当接收到所有tje消息时,master将对其进行处理,循环将进行迭代(master将结果发送给从机等),其工作方式如下 // master - init sendVectorWithStri

我是mpi新手。我正在尝试用mpi并行我的代码(需要更快地运行一些实验)。它应该是这样工作的:master向从机发送一个字符串数组,它们执行一些工作并将status_ready发送回master。当所有从机准备就绪时,主机进入循环并迭代地向从机发送一个双倍向量,从机处理该向量并将其结果(2个向量)发送回主机。当接收到所有tje消息时,master将对其进行处理,循环将进行迭代(master将结果发送给从机等),其工作方式如下

// master - init
sendVectorWithStrings2Slaves();

// slaves
doSomeStuff();
sendReady();

// master
receiveStatuses();

// master - when all slaves are ready
while(some condition)
{
  // master
  sendVector2Slaves()

  //slaves
  receiveVector();
  process();
  sendTwoVectorsBack2Master();

  // master
  receiveAllVectors();
  checkThatAllMessagesReceived();
  processResults();
}

stopSlaves();

有人能帮我学习mpi吗?

下面是一些伪代码指南:

int myrank,ntasks;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
MPI_Comm_size(MPI_COMM_WORLD, &ntasks);

if (myrank == 0) {
  // master - init
  for (int rank = 1; rank < ntasks; ++rank)
    sendVectorWithStrings2Slave(rank);
  for (int rank = 1; rank < ntasks; ++rank)
    recieveReady();
} else {
  // slaves
  recieveVectorWithStringsFromMaster();
  doSomeStuff();
  sendReady();
}

// master - when all slaves are ready
while(some condition)
{
  if (myrank == 0) {
    // master
    for (int rank = 1; rank < ntasks; ++rank)
      sendVector2Slave(rank)

    // master
    for (int rank = 1; rank < ntasks; ++rank)
      receiveVector();

    processResults();
  } else {
    //slaves
    receiveVector();
    process();
    sendTwoVectorsBack2Master();
  }
}
int-myrank,ntasks;
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_Comm_WORLD和myrank);
MPI_通信大小(MPI_通信世界和ntasks);
如果(myrank==0){
//主初始化
for(整数秩=1;秩