有一些关于这个问题的文章,但他们都不满足我。 我没有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中的任务了。 –