我正在使用从中导入 MPI 的 mpi4py 编写 python 代码。然后,我设置了全局通信器 MPI.COMM_WORLD 并存储在变量 comm 中。
我正在使用 n > 1 个线程运行此代码,并且在某些时候它们都进入了一个 for 循环(所有内核都有相同数量的迭代要通过)。
在 for 循环中,我有一个“comm.reduce(...)”调用。这似乎适用于少数核心,但随着问题规模的增加(比如 64 个核心),我体验到我的程序“挂起”。
所以我想知道这是否与 reduce(...) 调用有关。我知道这个调用需要所有线程(也就是说,假设我们总共运行了 2 个线程。如果一个线程进入循环但另一个没有出于某种原因,程序将挂起,因为 reduce(...) 调用等待对于两个线程)。
我的问题是: reduce 调用是“同步”任务吗,即它是否像“comm.Barrier()”调用一样工作?而且,如果可能,更一般地说,同步任务是什么(如果有的话,除了障碍)?