2
我有一個遞歸程序,我想加快使用openMP。結構如下所示。如何在openMP中單個區域內並行for循環?
我對omp task
不熟悉,剛剛從here瞭解到了一些東西。看起來我必須在omp single
區域包裝buildTree
。
但是,我也想並行化buildTree
內的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
}
}
}