我知道启用嵌套并行性将允许嵌套的omp并行for循环也可以并行化。但我在我的嵌套for循环(for for inside)中使用collapse(2)代替。
有区别吗?为什么或者为什么不?假设最佳情况:循环索引与其他相等的东西之间没有依赖关系。
答案 0 :(得分:1)
是的,存在巨大差异 - 使用collapse
(不是collapsed
)。不要使用嵌套并行。
嵌套并行性意味着有独立的线程团队在不同级别的工作共享上工作。您可以遇到各种各样的麻烦,无论是将CPU内核超额配置到太多线程 - 还是不使用CPU内核,因为有些线程在错误的团队中,现在没有工作。从嵌套并行性中获得不错的性能相当困难。这就是您通常需要明确启用它的原因。
另一方面,折叠循环意味着不同的循环在工作共享级别上是联合的。这允许一组线程(通常具有与可用CPU核心一样多的线程)有效地处理循环的不同迭代。