ブーストウルフ製品の性能を向上させる方法はありますか?ブーストuBLASマトリックス製品が極端に遅い
私は2つの行列Aを持って、私はmulitply /追加/サブしたいB/...
MATLABでC対++私は次の時間を取得[s]は2000×2000の行列演算のための
OPERATION | MATLAB | C++ (MSVC10)
A + B | 0.04 | 0.04
A - B | 0.04 | 0.04
AB | 1.0 | 62.66
A'B' | 1.0 | 54.35
なぜこのような大きなパフォーマンスの低下がありますか?
マトリクスは実際の倍数に過ぎません。 しかし、私はまた、正定値、対称、長方形の製品が必要です。
EDIT: コードは自明である
matrix<double> A(2000 , 2000);
// Fill Matrix A
matrix<double> B = A;
C = A + B;
D = A - B;
E = prod(A,B);
F = prod(trans(A),trans(B));
EDIT 2: 結果は10 trysの平均値です。 STDDEVは、私は多分50にではなく、要因2-3を期待0.005未満
た
EDIT 3(!): すべてがリリース(NDEBUG/MOVE_SEMANTICS/..)モードでベンチました。
EDIT 4: プロダクト結果の事前割り当て済み行列はランタイムに影響しませんでした。
きれいなMatlabを再実行してください。キャッシュする傾向があります。まあ、すべてです。まったく無関係ですが、まともなパフォーマンスを得ることができるはずです。[Eigen](http://eigen.tuxfamily.org/index.php?title=Main_Page)の簡単な構文です。 (私はそれがあなたの小さなベンチマークにどのように関係しているか興味を持っています:-) – rubenvb
私は乗算と加算のために2000倍の時間を期待しています。 – ruslik
uBlasのリリースモードをオンにすることを覚えましたか? [link = http://www.boost.org/doc/libs/1_47_0/libs/numeric/ublas/doc/index.htm]の最後にある[よくある質問]を参照してください。 '-DNDEBUG'や他のいくつかのフラグを使用して、リリース用にコンパイルすることができます。 –