【发布时间】:2016-10-21 13:13:28
【问题描述】:
我想知道如何以安全的方式并行化下面的 for 循环。我找到了一些可能的解决方案,例如 this 。但是我只能使用 OpenMP 2.0 版和 Boost 1.59 版。
算法解释:
它遍历边界框内的所有三角形,然后在 _considerTriangle 函数中检查相交的可能性(具有唯一三角形)。最后在 _considerTriangle 中,如果一个三角形相交,它会将三角形插入一个集合容器 intersectedTri。
//Iterating through every triangle
std::set<Triangle> intersectedTri;
for(IntersectedTrianglesIterator it=tree.Begin_IteratorByBoundingBox(bbox_min,bbox_max);it!=tree.End_IteratorByBoundingBox(bbox_min,bbox_max);++it)
_ConsiderTriangle(it->GetTriangle());
我想知道如何安全地将其平行化。
【问题讨论】:
-
您必须提供有关您的代码的更多信息。完全不清楚底层数据结构是什么(
tree),某些操作有多昂贵(IntersectedTrianglesIterator::operator++vs_ConsiderTriangle,GetTriangel),在迭代期间修改了什么状态,IntersectedTrianglesIterator是否是随机的访问迭代器,....请提供minimal reproducible example。 -
顺便说一句:OpenMP 2.0 已有 14 年 的历史。你真的没有更新的版本吗?
-
我用的是 Visual Studio,你现在连 VS2015 都不支持任何更新版本的 openMP。
标签: c++ openmp boost-thread boost-mutex