巢做for循环并行内部的并行for循环
问题描述:
我想这样的:巢做for循环并行内部的并行for循环
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个线程。我怎样才能做到这一点?
答
您可以指定区域中所需的线程数。
所以,如果你这样做:
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个线程,因此您的描述有点令人困惑。不要忘记它是嵌套的,所以它们会相乘。