2017-06-14 55 views
0

我對openmp很新,遇到這樣的問題。cout命令的OpenMP並行

#pragma omp parallel for 
for (int i = 0; i < 10; ++i) { 
    if (i == 0) 
     for (int j = 0; j < 100000000; ++j); // Create a delay for i = 0. 
    cout << i << flush; 
} 

我預計0應該是打印出來的最後一個整數,因爲有一個延遲。但是,實際產出總是隨機的。

這是由某種編譯器優化造成的嗎?或者我誤解了parallel for

我有版本

#define _OPENMP 201307 

感謝。

+3

除了別的,編譯器可能已經優化了「延遲」。如果你想要一個適當的延遲使用類似於http://en.cppreference.com/w/cpp/thread/sleep_for –

+0

此外代碼似乎添加了i == 0的所謂延遲,而不是我== 1. –

回答

1

這很可能是你誤會了parallel for

在大多數情況下,當您沒有設置scheduleomp for, 時,每個線程將執行一個循環。

所以如果你想1爲0後,執行試加schedule(static, 2) 1執行幾乎同時以0

+0

我已經開發了超過5年的openmp應用程序。但我在這裏回答問題時是個新人。如果我沒有給你明確的要求,請發表評論。 –

+0

謝謝你的回答很清楚! – frankyjuang