對不起,如果標題不清楚。我不知道該怎麼說。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