作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个递归程序,我想使用 openMP 来加速它。结构如下。
我不熟悉omp task
,只是从here 中学到了一些东西| .看来我必须将 buildTree
包装在 omp single
区域中。
但是,我还想在 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
}
}
}
最佳答案
我想你可以使用 nested parallelism在你的问题中。您的代码在 main()
中看起来像这样:
#pragma omp parallel for num_threads(2)
buildTree();
在 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++)
查看我的 first link 的第 4.3 节 示例 4–2 调用并行区域内的 OpenMP 例程
了解更多详情
关于c++ - 如何在 openMP 的单个区域内并行 for 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30294883/
我有数百个位置的列表,只想显示当前屏幕上这些位置的 MKPinAnnotation。屏幕从 2 英里半径内的用户当前位置开始。当然,用户可以滚动和缩放屏幕。现在,我等待 map 更新事件,然后循环遍历
我试过检查 CGRect: CGFloat imageX1 = imageView.frame.origin.x; CGFloat imageY1 = imageView.frame.origin
我是一名优秀的程序员,十分优秀!