2016-05-12 3 views
1

固有のドキュメントを読んでいて、最適化に関する小さな議論がありました。議論は、それは例を示しますhttp://eigen.tuxfamily.org/dox/group__TutorialMatrixArithmetic.html固有値:乗算と加算による簡単な最適化

ドキュメントのこのページでタイトル「A note about expression templates」の下にある

VectorXf a(50), b(50), c(50), d(50); 
... 
a = 3*b + 4*c + 5*d; 

と終わりにそれは、あなたが恐れてはならない

このように述べていますEigenで比較的大きな算術式を使用すると、Eigenに最適化の機会が増えます。

私はそれがどのように最適化を行い、どのように最適化の機会を提供するのか理解できません。説明がうまくいくでしょう。あなたがの選択肢を持っている場合は、引用されているページとWriting efficient matrix product expressionsページによると、ポイントは、ある

+1

あなたが引用した文章の前に、あなたがリンクしているページに説明があります。あなたが説明の一部を理解するのに問題がある場合は、少なくともあなたには分かりませんが、あなたにはっきりとは分かりませんが、ここで答えが出るのを避けるためです。 – hvd

+1

これは祝福と呪いであり、非常に奇妙なバグの源泉になることもあります。例えばhttp://eigen.tuxfamily.org/dox/TopicLazyEvaluation.htmlを参照してください。 –

答えて

1

MethodOne

VectorXf a(50), b(50), c(50), d(50); 
... 
a = 3*b + 4*c + 5*d; 

MethodTwo

VectorXf a(50), b(50), c(50), d(50); 
... 
a = 3*b + 4*c; 
a += 5*d; 

あなたはMethodOneを好むべきです。

したがって、ソフトウェアの最適化は、あなたのベクトルを通じて反復を獲得することができ

配列は一度だけ横断されるように固有値は、ただ一つのループのためにそれをコンパイルします。

も、最適化のためのより多くの部屋が.noalias()コールを通じて利用可能で、これは単一の評価(可能ならば、制限が存在する)に式を簡素化:

使用.noalias()アイゲンを指示します結果と右辺はエイリアスではありません。それ以外の場合、製品m2 * m3は一時的に評価されます。

関連する問題