我正在制定一种算法,该算法可以将一个子片段细分为……或不可以,并且每个子片段都可以再次细分等。是的,这是递归函数的完美示例,但由于性能原因我尝试同时进行。
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并行性,该算法就可以正常工作。
关于如何使并行版本工作的任何想法?