【发布时间】:2020-03-10 00:58:14
【问题描述】:
如何在并行区域内进行 OpenMP 缩减(求和)? (只有主线程需要结果)。
算法原型:
#pragma omp parallel
{
t = omp_get_thread_num();
while iterate
{
float f = get_local_result(t);
// fsum is required on master only
float fsum = // ? - SUM of f
if (t == 0):
MPI_Bcast(&fsum, ...);
}
如果我在 while iterate 循环中有 OpenMP 区域,则每次迭代的并行区域开销都会影响性能...
【问题讨论】:
-
我认为您将 OpenMP 与 MPI 混淆了。 OpenMP 只关注共享内存架构,而 MPI 更关注分布式架构。是否要在多个 MPI 进程之间执行
f的缩减? -
@JérômeRichard 这是一个混合代码。节点上的内核之间的 OpenMP,节点之间的 MPI。 OpenMP 主线程通过 MPI 与其他节点通信。
标签: openmp