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的加速

看起来inpRow是一个副本,您有什么理由不能使用引用吗?@jamesmithell谢谢您的回答!我不是100%确定,但eigen应该提供惰性的计算代理对象(类似于块)。所以应该没有副本。但是我不确定
#define EIGEN\u NO\u DEBUG
?@Rzu已经添加了:(