对不起,如果标题不清楚。我不知道该怎么说。OpenMP迭代并行区域循环
我不知道是否有什么办法可以做到以下几点:
#pragma omp parallel
{
for (int i = 0; i < iterations; i++) {
#pragma omp for
for (int j = 0; j < N; j++)
// Do something
}
}
忽略的东西,如在省略私人符for循环,是没有办法,我可以派生我的外表外螺纹任何方式循环,以便我可以并行内部循环?从我的理解(如果我错了,请纠正我),所有线程都会执行外部循环。我不确定内部循环的行为,但我认为for
会将块分发给每个遇到它的线程。
我想要做的是不必叉/加入iterations
次,但只是在外环做一次什么。这是否是正确的策略?
如果有什么是另一个外部循环不应该并行?这是...
#pragma omp parallel
{
for (int i = 0; i < iterations; i++) {
for(int k = 0; k < innerIterations; k++) {
#pragma omp for
for (int j = 0; j < N; j++)
// Do something
// Do something else
}
}
}
这将会是巨大的,如果有人点我到一个大的应用程序的示例使用OpenMP,这样我可以更好地了解策略使用OpenMP时可以采用并行。我似乎无法找到任何。
澄清:我正在寻找不改变循环排序或涉及阻塞,缓存和一般性能考虑的解决方案。我想了解如何在指定的循环结构中的OpenMP中完成此操作。 // Do something
可能有也可能没有依赖关系,假设他们这样做,并且你不能移动。
也许你可以举一个你想做什么的例子。我的意思是填写代码//做些什么 – 2013-05-08 15:36:54
@raxman,这没有帮助。这意味着要求解决这个问题的一般解决方案,而不是针对特定应用的解决方案。 – Pochi 2013-05-08 16:05:18
你可以继续并upvote /接受一些答案。似乎人们付出了一些努力,并得到了所有的最小upvotes。 – 2015-10-14 15:28:47