有一些關於這個問題的文章,但他們都不滿足我。 我沒有openMp 3.0支持,我需要在地圖上並行化迭代。我想知道,如果這個解決方案將工作或沒有:openMp:並行化std :: map迭代
auto element = myMap.begin();
#pragma omp parallel for shared(element)
for(int i = 0 ; i < myMap.size() ; ++i){
MyKeyObject * current_first = nullptr;
MyValueObject * current_second = nullptr;
#pragma omp critical
{
current_first = element->first;
current_second = element->second;
++element;
}
// Here I can use 'current' as in a usual loop
}
所以我使用的for循環,以確保公正的線程將處理同樣相同數量的地圖元素。這是一個正確的猜測還是會失敗?
PS:我上的Visual Studio 2012的工作,所以如果你有一個關於如何使我的編譯器支持的OpenMP 3.0的提示,這也將解決我的問題..
OpenMP 3.0有什麼好處呢?如果你想在Visual Studio中使用OpenMP 3.0,那麼你需要一個集成到Visual Studio中的新編譯器(例如英特爾編譯器)。 –
@Zboson,OpenMP 3.0具有明確的任務,並允許在地圖上進行迭代並行執行,如show [here](http://stackoverflow.com/a/22936165/1374437)。 –
@HristoIliev,謝謝你,我認爲任務可能是正確的方法,因爲它是(std :: map)作爲二叉樹實現,據我瞭解。是時候學習OpenMP中的任務了。 –