【问题标题】:mpi/c++ convert the code to parallelmpi/c++ 将代码转换为并行
【发布时间】:2013-09-19 13:01:49
【问题描述】:

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

【问题讨论】:

    标签: mpi


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-08-16
      • 1970-01-01
      • 2016-02-01
      • 2013-07-12
      • 1970-01-01
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多