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