当我在多个主机上运行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*/);
}