我正在尝试使用OpenMP并行化Guibas Stolfi Delaunay三角剖分算法。
这里有两个需要并行化的部分 - 其中一个是mergesort(),我已经完成了;另一个是divide(),但我目前卡在这一步。
在divide()中采用的分治策略与mergesort()相同,但是应用相同的并行化技术(omp sections)只适用于mergesort()。
我尝试了这里展示的并行化技术,但它也不起作用。 我在某个地方读到过嵌套并行处理(nested parallelism),但我不确定如何实现它。 有人能解释一下如何并行化分治算法吗?
代码:在主函数中调用了两次mergesort,并应用了sections结构。对于divide函数做同样的事情就不起作用。
#pragma omp parallel
{
#pragma omp sections nowait
{
#pragma omp section
{
merge_sort(p_sorted, p_temp, 0, n/2);
}
#pragma omp section
{
merge_sort(p_sorted, p_temp, (n/2)+1, n-1);
}
}
}