OpenMP 指定 for 循环迭代的线程数

OpenMP specify thread number of a for loop iteration

我正在使用以下命令在程序的可用线程上并行化单个循环:

#pragma omp parallel for num_threads(threads)
for(long i = 0; i < threads; i++)
{
    array[i] = calculateStuff(i,...);
}

由于技术原因,我想保证0号线程执行i=0,1号线程执行i=1。换句话说,我想要总是 i=omp_get_thread_num()。这可能吗?

尝试

#pragma omp parallel for num_threads(threads) schedule(static,1)

现在@Hristo Iliev 出现了,我 100% 确信 OpenMP 标准要求静态调度将迭代 0 分配给线程 0、1 分配给线程 1, .

试一试,让我们知道你的表现如何。

然后再

#pragma omp parallel for num_threads(threads) schedule(dynamic,1)

也应该可以工作,因为您的迭代次数与线程数一样多。如果线程 0 在线程 n 启动之前完成其工作,那么线程 0 可能会获取迭代 n.

在这种特殊情况下,使用循环是一种资源浪费。只需使用 omp_get_thread_num():

#include <omp.h>

#pragma omp parallel num_threads(threads)
{
    int i = omp_get_thread_num();
    array[i] = calculateStuff(i,...);
}