将超时设置为mpi进程启动

时间:2016-10-26 20:44:35

标签: c++ parallel-processing mpi distributed-computing mpich

当我在多个主机上运行mpi程序时,如果可执行程序无法在任何主机上启动(由于缺少库等原因),其他主机只是等待进程出现。该计划永远挂起。有没有办法在这种情况下设置超时,如果并非所有进程都在给定的超时时间内启动,MPI应该中止?

由于

编辑: 我提出了以下解决方案,在mpi_init和future / promise范例之前产生一个新线程。我仍然愿意接受更好的解决方案。

int main() {
  std::promise<std::string> mpi_launch_promise;
  std::future<std::string> mpi_launch_future = mpi_launch_promise.get_future();

  // Separate thread is launched which makes sure mpi is initialized in specified time limit.
  std::thread mpi_launch_thread(
    [](std::future<std::string>& current_host, const int& timeout = 2) {
    auto status = current_host.wait_for(std::chrono::minutes(timeout));
    if (status == std::future_status::timeout) {
      // exit program with error message
    } else if (status == std::future_status::ready) {
      // notify success of mpi launch
    }
  }, std::ref(mpi_launch_future), 2 /* wait 2 min*/);
  mpi_launch_thread.detach();

  MPI_Init(&argc, &argv);

  // Notify success of mpi_init to mpi_launch_thread
  mpi_launch_promise.set_value(/*send hostname*/);
}

0 个答案:

没有答案