我目前有一個代碼(以C語言),具有OpenMP並行化的外部循環(它在共享內存列表中本地運行)。我用C++重寫了它,對於很多事情,我發現BOOST_FOREACH宏是一個很好的語法,用於迭代列表,數組等等的循環構造。混合增強FOREACH宏和OpenMP並行化
我的問題是:有沒有一種方法可以同時使用該語法並行化OpenMP風格的循環?
我目前有一個代碼(以C語言),具有OpenMP並行化的外部循環(它在共享內存列表中本地運行)。我用C++重寫了它,對於很多事情,我發現BOOST_FOREACH宏是一個很好的語法,用於迭代列表,數組等等的循環構造。混合增強FOREACH宏和OpenMP並行化
我的問題是:有沒有一種方法可以同時使用該語法並行化OpenMP風格的循環?
複製值得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’
是的,它應該工作。 BOOST_FOREACH只是for循環的助手宏,所以OpenMP應該識別並並行化該循環。
爲什麼不簡單地嘗試一下,並分析結果?
如果OpenMP paralized boost_foreach,我會留下深刻的印象,因爲foreach嚴重依賴模板技巧來扣除容器類型。如果我處於你的位置,我會重寫foreach的常規for循環。從終端
地獄,這個答案有很多錯誤的東西......計算機科學大部分不是經驗科學。如果它在一個給定的系統上運行,使用給定的編譯器(以及一組選項),它不能保證它可以在任何其他系統或其他編譯器上運行。 – 2010-11-22 19:22:49
我不完全相信......據我可以從頭看到,BOOST_FOREACH宏擴展到比for循環更多,因爲它首先包含一系列`if` -`else` ...因此,如果我將我的OpenMP指令放在宏的上方,它們不會超出`for`循環本身。 – 2010-11-22 15:48:54