在并行for循环中嵌套并行for循环

时间:2011-12-30 19:49:35

标签: c openmp

我想这样做:

omp_set_nested(1);
#pragma omp parallel for private(j)
for (i = 0; i < n; ++i) {
    #pragma omp parallel for
    for (j = 0; j < m; ++j) {
    /* do smth */
    }
}

这意味着,如果我有8个线程,并且第一个循环只使用4个线程,我希望内部循环也使用其他4个线程。我怎么能这样做?

1 个答案:

答案 0 :(得分:3)

您可以指定区域中所需的线程数。

所以如果你这样做了:

omp_set_nested(1);
#pragma omp parallel for private(j) num_threads(2)
for (i = 0; i < n; ++i) {
    #pragma omp parallel for num_threads(4)
    for (j = 0; j < m; ++j) {
        /* do smth */
    }
}

然后外循环将有2个线程。然后这两个线程中的每一个都将为内部循环产生4个线程。 (总共8个)

您的描述有点令人困惑,因为您希望每个循环使用4个线程。不要忘记它是嵌套的,所以它们会成倍增加。