C++ 如何在openMP中对单个区域内的循环进行并行?
我有一个递归程序,我想用openMP加速。结构如下图所示 我不熟悉omp任务,只是从中学到了一些东西。似乎我必须将C++ 如何在openMP中对单个区域内的循环进行并行?,c++,openmp,C++,Openmp,我有一个递归程序,我想用openMP加速。结构如下图所示 我不熟悉omp任务,只是从中学到了一些东西。似乎我必须将buildTree包装在omp-single区域中 然而,我还想并行化构建树中的for循环,我该如何实现呢 int main() { #pragma omp parallel { #pragma omp single nowait buildTree(); } } void buildTree { if(endRecu
buildTree
包装在omp-single
区域中
然而,我还想并行化构建树中的for循环,我该如何实现呢
int main()
{
#pragma omp parallel
{
#pragma omp single nowait
buildTree();
}
}
void buildTree
{
if(endRecursion)
return;
for(int i = 0; i < problemSize; i++)
{
// I want to parallelize these code using omp for
}
if(problemSizeIsSmall)
{
buildTree(subProblemSize); // left subtree
buildTree(subProblemSize); // right subtree
}
else
{
#pragma omp task
{
buildTree(subProblemSize); // left subtree
}
#pragma omp task
{
buildTree(subProblemSize); // right subtree
}
}
}
intmain()
{
#pragma-omp并行
{
#pragma-omp-single-nowait
buildTree();
}
}
虚空构建树
{
if(结束递归)
返回;
for(int i=0;i
我想你可以在你的问题中使用。
您的代码在main()
中是这样的:
在buildTree()
中:
omp_set_num_threads(4);//4或任意数量的线程
#pragma-omp并行
for(int i=0;i
查看my的第4.3节示例4–2对并行区域内OpenMP例程的调用
,了解更多详细信息
#pragma omp parallel for num_threads(2)
buildTree();
omp_set_num_threads(4); // 4 or whatever number of threads you want
#pragma omp parallel for
for(int i = 0; i < problemSize; i++)