2

そのため、私が行っているプロジェクト(2D空間シミュレーター)にEigenマトリックスライブラリを使用することを考えています。私は先に進んで、Eigen :: Vector2dを使用し、裸の配列を使用してコードのプロファイルを作成しました。配列内の要素への値の割り当てが10倍向上し、内積の計算が40倍向上したことに気付きました。

これが私のプロファイリングです。チェックしたい場合は、基本的には〜0.110秒に対して〜4.065秒です。

明らかに、裸の配列はドット積や割り当てにおいてはるかに効率的です。では、なぜEigenライブラリ(または他のライブラリ、Eigenが最速のように見えた)を使用するのでしょうか。安定ですか?自分で効率的にコーディングするのが難しい複雑な数学?

4

3 に答える 3

3

これらのライブラリの本当の利点は、組み込みの SIMD ベクトル化です。

eigen はデフォルトでそれを有効にしていないようで、define / compiler スイッチで有効にする必要があります。(編集:リンクを読み間違えてください。コンパイラがそれをサポートしていることを検出した場合に有効になります。一部のコンパイラでは命令を有効にする必要がありますが、コンパイラではデフォルトで有効になっている場合とされていない場合があります)

(それらは通常、自家製のソリューションよりも徹底的にテストされており、手作業でコーディングするのが本当に難しい、あらゆる種類の複雑で興味深いものを可能にするという事実は言うまでもありません)

于 2012-12-12T04:45:21.227 に答える
1

ベンチマークを見て、次の結果を得ました。

g++ -I/usr/include/eigen3/ eigen.cpp -o eigen
g++ -O3 -I/usr/include/eigen3/ eigen.cpp -o eigen_opt
g++ -I/usr/include/eigen3/ matrix.cpp -o matrix
g++ -O3 -I/usr/include/eigen3/ matrix.cpp -o matrix_opt

./eigen  3.10s user 0.00s system 99% cpu 3.112 total
./eigen_opt  0.00s user 0.00s system 0% cpu 0.001 total
./matrix  0.06s user 0.00s system 96% cpu 0.058 total
./matrix_opt  0.00s user 0.00s system 0% cpu 0.001 total

コンパイラの最適化をオンにしない限り、Eigen は実際には高速ではありません。また、この場合のコンパイラは-O3、ベンチマーク文字に対して機能する最適化を行っていると思われます。あなたはそれを調べたいかもしれません。

これにより、ライブラリを使用しないというあなたのポイントの1つ、つまり速度が削除されると思います。その基準がなくなったら、アカデミックな目的で何かをしたい、または独自のライブラリを作成したい以外に、既存のライブラリを使用しないと考える理由はありません。最近、独自の Matrix および Vector クラスを実装するライブラリまたはその他のコードを目にするたびに、可能であればそれを避けるようにしています。Eigenがあれば、Matlabの必要性ははるかに低くなります...

于 2012-12-12T10:09:39.937 に答える
1

標準ライブラリ コードを選択する理由はいくつかあります。

  • より良い携帯性。個々の開発者は、複数のプラットフォームを検討していない (またはアクセスできない) 可能性があります。
  • 信頼性の向上。(Donnie が述べたように) 通常、ライブラリはより徹底的にテストされます。
  • 開発者の機動性が向上します。標準ライブラリ コンポーネントを使用している場合、他の人のコードで作業する方が簡単です。
  • 車輪の再発明を回避します。各開発者が同じコンポーネントを独自の方法で開発するという状況は避けたいと考えています。
  • カスタム実装はすぐに古くなる可能性があります。ライブラリのバージョンの更新とサポートを継続できる時間は限られています。標準ライブラリには、より多くのサポート作業が必要になる可能性があります。
  • より良い「外部」サポート。たとえば、C++ STL ライブラリを考えてみましょう。元の開発者ではない人々からのリソースがたくさんあります。また、教科書には標準ライブラリ コンポーネントが含まれているため、新しいユーザーや学生が開発者に負担をかけずに学習するのに役立ちます。

PS/免責事項: 申し訳ありませんが、Eigen ライブラリについては知りません。上記のポイントは、標準ライブラリに関するより一般的な観点からのものです。

于 2012-12-12T04:52:18.793 に答える