C++ C++;特征矩阵和映射迭代器的并行化

C++ C++;特征矩阵和映射迭代器的并行化,c++,boost,openmp,eigen,boost-thread,C++,Boost,Openmp,Eigen,Boost Thread,我有一个计算矩阵和的函数(使用特征框架),矩阵存储在std::map中。具体地说,我必须做一些看起来像这样的事情: Eigen::Matrix2f Summer::DoSum(){ Eigen::Matrix2f sum = Eigen::Matrix2f::Zero(); BOOST_FOREACH(const auto& myPair,pairMap){ const Voxel* voxel = myPair.first; const Eigen:

我有一个计算矩阵和的函数(使用特征框架),矩阵存储在std::map中。具体地说,我必须做一些看起来像这样的事情:

Eigen::Matrix2f Summer::DoSum(){
  Eigen::Matrix2f sum = Eigen::Matrix2f::Zero();
  BOOST_FOREACH(const auto& myPair,pairMap){
    const Voxel*       voxel = myPair.first;
    const Eigen::Matrix2f& b = myPair.second;
    const float&           a = voxel->GetA();
    sum += a*b;
  }
  return sum;
}

地图相当大,所以我考虑过将其并行化。似乎有两个主要选项:openmp和boost。在这种情况下,两者的优缺点是什么?在这两种情况下,代码是否需要大量重写?从我所看到的,这个示例的openmp实现并不简单。

为什么openmp不简单?你需要一个
#pragma omp parallel for
和一个围绕
sum
的互斥锁。我的印象是
#pragma omp parallel for
只能用于并行循环中的随机访问迭代器。我认为你是对的,迭代器看起来需要是随机的。但是为什么要将矩阵存储在
映射中呢?你不能改用
向量吗?@vsoftco我需要代码中其他地方地图的关键查找功能。我可以复制到一个向量,但乍一看,这似乎有些过分。矩阵M*N的数量级和地图的大小是多少?