2010-11-22 51 views
6

我目前有一個代碼(以C語言),具有OpenMP並行化的外部循環(它在共享內存列表中本地運行)。我用C++重寫了它,對於很多事情,我發現BOOST_FOREACH宏是一個很好的語法,用於迭代列表,數組等等的循環構造。混合增強FOREACH宏和OpenMP並行化

我的問題是:有沒有一種方法可以同時使用該語法並行化OpenMP風格的循環?

回答

2

複製值得1個kilowords:

$ g++ a.cpp -I/opt/boost-1.45.0/include -O -fopenmp 
a.cpp: In function ‘int main()’: 
a.cpp:12: error: for statement expected before ‘if’ 
0

是的,它應該工作。 BOOST_FOREACH只是for循環的助手宏,所以OpenMP應該識別並並行化該循環。

+1

我不完全相信......據我可以從頭看到,BOOST_FOREACH宏擴展到比for循環更多,因爲它首先包含一系列`if` -`else` ...因此,如果我將我的OpenMP指令放在宏的上方,它們不會超出`for`循環本身。 – 2010-11-22 15:48:54

0

爲什麼不簡單地嘗試一下,並分析結果?

如果OpenMP paralized boost_foreach,我會留下深刻的印象,因爲foreach嚴重依賴模板技巧來扣除容器類型。如果我處於你的位置,我會重寫foreach的常規for循環。從終端

+2

地獄,這個答案有很多錯誤的東西......計算機科學大部分不是經驗科學。如果它在一個給定的系統上運行,使用給定的編譯器(以及一組選項),它不能保證它可以在任何其他系統或其他編譯器上運行。 – 2010-11-22 19:22:49