我試圖編寫一個小型C程序來弄清楚OpenMP如何工作。這個例子應該計算1到1000之和;然而,它在終端打印出0。我只能在#pragma
的東西出來後才能得到想要的結果。有人可能會告訴我原因嗎?OpenMP如何在內部工作
This guide表示#pragma omp for
將for循環的工作劃分爲當前團隊的線程。它不會創建線程,它只會將工作分配給當前正在執行的團隊的線程。所以我們應該在整個執行過程中只有一個主線程,對嗎?
#include <stdio.h>
int main() {
int n, sum = 0;
#pragma omp for
for (n = 0; n <1000; n++) {
sum += n;
}
printf("%d\n");
return 0;
}
這是我第一天開始學習並行編程,感謝您指出這些錯誤。你有沒有在線推薦的書籍或幻燈片?我發現的大多數材料都假設讀者在這個領域有一些相關的經驗.. –
@YufanFei [這是一個很好的教程](https://computing.llnl.gov/tutorials/openMP/),我已經提到幾次。雖然在我看來這本書的最好的書是[這一個](http://www.amazon.com/Using-OpenMP-Programming-Engineering-Computation/dp/0262533022)。非常方便新人。 – NoseKnowsAll
相關的for循環中的循環變量被預先確定爲「private」,因此private(n)是多餘的。 –