OpenMP的omp_set_num_threads()如何同时进行2个OMP操作

时间:2019-07-11 15:31:48

标签: visual-studio-2017 openmp

OpenMP的omp_set_num_threads()函数如何影响两个同时执行的OpenMP操作?线程数量是累积的还是硬限制的?

例如,假设有两个工作线程完全同时命中以下代码块

omp_set_num_threads(4);
#pragma omp parallel for shared(n)  
for (int i=0; i<n; i++) 
{
    // ... some complicated, parallelizable math here...
}

每个操作将获得自己的4个线程(总共8个线程),还是将总共4个线程分配给两个同时进行的操作?

(我假设如果使用OMP_NUM_THREADS环境变量或num_threads子句,行为将是相同的。如果我有此错误,请告诉我...)

我问,因为我有一个客户端在具有完整Lotta核心的机器上使用我的SDK。他需要多次调用通过OpenMP实现的我的SDK函数之一。 (我没有写它。我继承了它)。他想尝试并行化对此函数的调用,以寻求更快的整体吞吐量。而且他已经可以控制我的代码用于omp_set_num_threads()的参数。

我已经意识到我不具备足够的知识来建议他使用什么线程号值,或者即使并行化(在OpenMP实现之上)也值得探讨。因此,至少在开始自己的测试之前,我至少想了解OpenMP在这种情况下应该做什么。

如果有问题,我使用的是Visual Studio 2017的Open MP,那么我猜只是2.0的实现

0 个答案:

没有答案