C++ 如何在openMP中对单个区域内的循环进行并行?

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

我有一个递归程序,我想用openMP加速。结构如下图所示

我不熟悉omp任务,只是从中学到了一些东西。似乎我必须将
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++)