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

时间:2013-09-15 07:38:51

标签: mpi

我是一个mpi新手。我正在尝试将我的代码与mpi并行化(需要更快地运行一些实验)。它应该像这样工作:master向从服务器发送一个字符串数组,它们完成一些工作并将status_ready发送回主服务器。当所有从站都准备就绪时,主站进入循环并迭代地向从站发送双向量,从站处理该向量并将其结果(2个向量)发送回主站。当收到所有tje消息时,master将处理它并且循环迭代(master将结果发送给slave,等等)它应该像这样工作

// 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帮助我吗?

1 个答案:

答案 0 :(得分:0)

您的伪代码的一些准则可以在下面找到:

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();
  }
}