我正在使用Visual Studio 2015,需要编译一些树代码,这些代码与OpenMP任务并行化,如下所示:
void recursiveFunction(Object *input_obj) {
for(Obj * loop_obj=input_obj->child; loop_obj!= input_obj->child + input_obj->numChildren; loop_obj++) {
#pragma omp task untied if(loop_obj->numValues > 100)
recursiveFunction(loop_obj);
}
#pragma omp taskwait
}
由于Visual Studio 2015不支持OpenMP 3.0任务,因此我需要使用OpenMP 2.0函数对其进行重构。我不知道最好的方法是什么,我喜欢这样的事情
void recursiveFunction(Object *input_obj) {
#pragma omp parallel for
for(int idx =0; idx < input_obj->numChildren;i++) {
// TODO: some code to replace the numValues > 100 condition
Object * loop_obj = obj + i;
recursiveFunction(loop_obj);
}
}
但我认为OpenMP任务将限制递归期间的线程数,而每个循环的构造生成并行数达到每个处理器一个进程(或配置的线程数)。
那么替换原始构造的最优雅,最有效的方法是什么?