0
假设我有一个非固定分支因子b
函数f
。执行从深度0开始,并在给定的固定深度停止。我想并行执行f
,以便当深度为0时,深度为1 的每个分支及其深度大于1的整个执行将执行到不同的线程上(在同一线程上)。
我正在使用OpenMP来实现此目的,但我无法确定编译指示对递归代码(更精确地说是代码中的变量)的影响。基本上,我的问题归结为下面的代码(不正确行为):
#include <stdio.h>
#include "omp.h"
int b = 6;
int maxDepth = 4;
void f(int depth) {
if (depth == maxDepth)
return;
{
int i;
for (i = 0; i < depth; i++) printf(" ");
}
printf("D %d TID %d\n", depth, omp_get_thread_num());
if (!depth) {
int i;
#pragma omp parallel for private(i)
for (i = 0; i < b; i++) {
f(depth+1);
}
}
else {
int i;
for (i = 0; i < b; i++) {
f(depth+1);
}
}
}
int main() {
omp_set_num_threads(4);
f(0);
printf("\n");
return 0;
}
至于上面的代码,我应该怎么设置使用编译指示该变量的隐私(shared
,private
),以我应该使用哪些变数,和为什么?
我强烈建议你看看OpenMP的任务递归probllems如这一个。 –