带有可变数量的项目的OpenMP循环

时间:2018-06-25 17:10:56

标签: c++ for-loop parallel-processing openmp

我正在制定一种算法,该算法可以将一个子片段细分为……或不可以,并且每个子片段都可以再次细分等。是的,这是递归函数的完美示例,但由于性能原因我尝试同时进行。

omp_set_num_threads(omp_get_num_procs());
#pragma omp parallel for schedule(dynamic)
for (int index = 0; index < toMakePartition.size(); index++)
{
    mItemClass* currItem = toMakePartition[index];
    makePartition(currItem);

    #pragma omp critical
    {
        for (int child = 0; child < currItem->children.size(); child++)
        {
            toMakePartition.push_back(currItem->children[child]);
        }  
        int numPartitionItems = toMakePartition.size();
        printf("END %i of %i   \n\n", index, numPartitionItems);
    }
}

打印结果显示numPartitionItems正确增长,但不幸的是,在第一个循环退出之后。如果没有OpenMP并行性,该算法就可以正常工作。

关于如何使并行版本工作的任何想法?

0 个答案:

没有答案