如何用OpenMP 2.0函数替换OpenMP 3.0任务?

时间:2017-09-22 08:03:32

标签: visual-c++ visual-studio-2015 openmp

我正在使用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任务将限制递归期间的线程数,而每个循环的构造生成并行数达到每个处理器一个进程(或配置的线程数)。

那么替换原始构造的最优雅,最有效的方法是什么?

0 个答案:

没有答案