2
在特征文档中,我没有找到一个确切的说明,当一个表达式被懒评估。对我而言,只有系数式表达才是有趣的,也就是说没有混叠的可能性。Eigens惰性评估与中间变量
以ArrayXXf a(10000, 10000);
,然后
a = a.cube() * a.cube();
评估我在250毫秒〜PC上一样,同样
auto aCube = a.cube();
a = aCube * aCube;
而
ArrayXXf aCube = a.cube();
a = aCube * aCube;
在〜550ms进行评估。
可以这样说:当一个表达式被分配给一个显式数组类型(比如ArrayXXf)时,表达式总是被计算出来吗?
该代码编译与MinGW版本-O3
p.s.这是一个普遍的问题,这个例子只是化妆
这是否也算矩阵?然后,你需要像'matrix1.noalias()= matrix2 * matrix2;'记录[这里](https://eigen.tuxfamily.org/dox/TopicLazyEvaluation.html)这样的外文文档中的noalias() – yar
因为当时'matrix2 * matrix2'被分配给'matrix1',它会被评估(除非你写'auto matrix1 = ...;')。对于矩阵产品,Eigen不能确定没有别名,因此默认情况下它会评估为临时值。 – chtz
明白了,谢谢! – yar