C++ C++;特征矩阵和映射迭代器的并行化
我有一个计算矩阵和的函数(使用特征框架),矩阵存储在std::map中。具体地说,我必须做一些看起来像这样的事情: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:
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的数量级和地图的大小是多少?