下面是一个简单的递归程序,每次递归调用都会将其拆分为两个.正如预期的那样,结果是2+4+8次调用rec,但线程数始终相同:两个,ID在0和1之间来回反弹.我希望每次递归调用都能保留id,最终会生成8个线程.到底发生了什么?代码有问题吗?
#include <stdio.h>
#include <omp.h>
void rec(int n) {
if (n == 0)
return;
#pragma omp parallel num_threads(2)
{
printf("Currently at %d -- total %d\n", omp_get_thread_num(), omp_get_num_threads());
rec(n - 1);
}
}
int main() {
omp_set_nested(1);
rec(3);
}