0

我是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?

4

1 回答 1

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();
  }
}
于 2013-09-15T18:56:38.880 回答