c++ - 我可以将 `std::this_thread::sleep_for()` 用于 MPI 进程吗?

标签 c++ c++11 mpi sleep stdthread

MPI 使用多个进程运行我的程序。

我希望其中一个进程休眠一段时间,以便它使用最少的 CPU。

std::this_thread::sleep_for() 看起来像我想要的,但是那个 thread 位在这种情况下看起来有点粗略。

这样做可以吗?

最佳答案

这样做完全没问题 - 任何事情都不应因此而崩溃或挂起。

但是,您的“使其使用最少的 CPU”有点令人担忧。您运行的 MPI 进程是否超过可用于执行它们的硬件线程?这种超额订阅通常对性能很糟糕,应该避免。每个硬件节点的进程数比它提供的硬件线程数少一个时,通常会出现最佳性能,以允许系统进程在某个地方运行而不会抢占应用程序。

如果您的程序有一部分的并行性低于进程,那么这可能是合理的(我刚刚发布了 a paper)。如果您在具有 Turbo Boost 的 Intel CPU 上运行,那么让空闲进程实际休眠可以让运行工作进程的内核以更高的时钟速度运行。

关于c++ - 我可以将 `std::this_thread::sleep_for()` 用于 MPI 进程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37062120/

相关文章:

c++ - 测试时全局抑制 c++ std::cout

c++ - 如何在 openmp + mpi 的 While 循环中启动多进程

c++ - 同步 MPI-2 单向通信的顺序问题

数组结构的 MPI 数据类型

c++ - C++ 中对 const Callable 的引用和对 Callable 的引用之间的区别

c++ - 从 Objective-c 委托(delegate)给 c (或者更好地称之为 : Creating listener from C to OBJ-C)

c++ - 如何解决此 MISRA 警告 : C++

c++ - Boost单元测试链接错误

c++ - 为什么 nvcc 无法使用 boost::spirit 编译 CUDA 文件?

c++ - sizeof(T) 值的标准类型特征