【发布时间】:2014-08-07 05:46:38
【问题描述】:
我正在将 Eigen 与大型矩阵一起使用,并且我正在考虑如何优化我的代码,专注于减少动态内存分配。
我正在尝试将两个矩阵相乘。这些矩阵时不时地改变一点,但它们的大小保持不变。
我希望看到乘法的输出转到一个预定义的矩阵(该矩阵已经为其分配了内存)。
所以这是我正在做的一个例子:
Eigen::MatrixXd left, right,result;
// ...
result = left * right;
// ... left and right values change a little
result = left * right;
我正在寻找类似的解决方案:
void Multiply(
Eigen::MatrixXd const& left,
Eigen::MatrixXd const& right,
Eigen::MatrixXd& result);
void Example()
{
Eigen::MatrixXd left, right, result;
// ...
Multiply(left, right, result);
// ...
Multiply(left, right, result);
}
目的基本上是重用result 矩阵内存,因为理论上它不应该改变维度。我在考虑使用operator*=,但我意识到它仍然需要一个中间矩阵来进行计算。
【问题讨论】:
-
您是否检查了
result=left*right在结果已经具有正确大小时实际上重新分配?
标签: c++ performance eigen