C++ 本征行加/减性能
在分析我的程序时,我发现以下几行代码是瓶颈C++ 本征行加/减性能,c++,performance,matrix,eigen,eigen3,C++,Performance,Matrix,Eigen,Eigen3,在分析我的程序时,我发现以下几行代码是瓶颈 // Some big nested loop { const auto inpRow = inpMap.row(counter); outMap.row(adjRow) -= inpRow; outMap.row(colInd) += inpRow; } outMap和inpMap是Eigen::Map其中Eigen::MatrixRX定义为Eigen::Matrix即行主矩阵 是否有办法提高此类行动的绩效?(当然除了并行的
// Some big nested loop
{
const auto inpRow = inpMap.row(counter);
outMap.row(adjRow) -= inpRow;
outMap.row(colInd) += inpRow;
}
outMap
和inpMap
是Eigen::Map
其中Eigen::MatrixRX
定义为Eigen::Matrix
即行主矩阵
是否有办法提高此类行动的绩效?(当然除了并行的之外)你可以做的不多,因为这样的表达式应该已经完全矢量化了。然而,这里有一些提示:
- 确保启用了编译器优化,
-O3-march=native
- 然后测量所需的时间并计算触发器,看看您离CPU的理论峰值性能有多远(在该实验中禁用turbo boost)
- 如果距离理论峰值很远,则很可能会发生缓存未命中。您可以通过将两个分配拆分为小于16kB的块来减少它们。您可能会从中获得到x2的加速
#define EIGEN\u NO\u DEBUG
?@Rzu已经添加了:(