gpt4 book ai didi

c++ - Eigen 程序中的性能瓶颈

转载 作者:行者123 更新时间:2023-11-27 22:58:46 26 4
gpt4 key购买 nike

作为一个更大问题的一部分,我在处理 Eigen 中的稀疏矩阵时遇到了性能瓶颈。

我需要从稀疏矩阵 (G) 中的每个元素中减去一个 float (x),包括系数为零的位置。所以零元素应该有一个值 -x

目前我的做法是这样的:

//calculate G
x=0.01;
for(int i=0;i<rows;i++){
for (int j=0; j<cols; j++) {
G.coeffRef(i, j) -= x;
}
}

当 G 的大小很大时,这种简单的计算就会成为瓶颈。

我还尝试将稀疏矩阵 G 转换为密集矩阵并减去 P(一个用值 x 填充的矩阵):

MatrixXd DenseG=MatrixXd(G);
x=0.01;
for(int i=0;i<rows;i++){
for (int j=0; j<cols; j++) {
DenseG(i, j) -= x;
}
}

这种方法要快得多。但是,我只是想知道是否有其他解决方法不涉及将 G 转换为密集矩阵,这在非常大的矩阵的情况下需要大量内存。

最佳答案

当您从所有 n^2 元素中减去时,您的“稀疏”计算实际上是一个密集的计算。一个主要的区别是,不是在内存条上完成单个操作,而是每次访问零元素时几乎都必须为矩阵分配内存。通常,稀疏矩阵在稀疏时是高效的,并且对于大多数操作会产生大量开销。只需存储很少的元素即可平衡这种开销,因此只需重复操作几次。

另一种可能的选择是利用 Eigen's lazy evaluation ,但这有点取决于您没有在此处列出的具体要求。

关于c++ - Eigen 程序中的性能瓶颈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29795427/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com