我想这样做:
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个线程。我怎么能这样做?
答案 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个线程。不要忘记它是嵌套的,所以它们会成倍增加。