2013-07-25 114 views

回答

28

OpenMP 4.0規範在幾天前完成併發布了here。它仍然強制要求的並行循環,應在規範形式(§2.6,第51頁):

for (INIT-EXPR;測試EXPR;INCR-EXPR)構造塊

該標準允許對提供在所有的表達式中使用的隨機訪問迭代容器,例如:

#pragma omp parallel for 
for (it = v.begin(); it < v.end(); it++) 
{ 
    ... 
} 

如果仍堅持使用C++ 11語法糖,如果它需要一個(比較)大量的時間來處理的stl_container每個元素,則可以使用單生產者任務圖案:

#pragma omp parallel 
{ 
    #pragma omp single 
    { 
     for (auto x : stl_container) 
     { 
     #pragma omp task 
     { 
      // Do something with x, e.g. 
      compute(x); 
     } 
     } 
    } 
} 

任務會產生一定的開銷,所以如果compute(x);花費很少的時間來完成,那麼使用這種模式是沒有意義的。

+0

我認爲迭代器是現在的方法,但是如果你想讓你的代碼用gcc編譯,你需要用!替換!=否則你會得到一個「無效的控制謂詞」錯誤。順便說一句,你知道爲什麼嗎? – DarioP

+0

根據這個網站:http://www.cplusplus.com/reference/iterator/RandomAccessIterator/ 它應該工作... –

+0

在該網站,他們沒有把任何編譯指示週期之前。只是試着編譯它:) – DarioP

相關問題