2016-05-14 10 views
5

私はほぼすべての私の数学的線形代数の仕事のためにEigenに慣れています。 最近Boostは、Basic Linear Algebra Library(Boost::uBLAS)を提供するC++テンプレートクラスライブラリも提供していることを発見しました。これは私のコードの主要なライブラリであるため、私はすべての作業をブーストだけに基づいて行うことができるのかどうか疑問に思いました。Boost :: uBLAS vs Eigen

の両方をよく見るが、本当に私にそれらの間の明確な区別得ませんでした:

  • ブーストを:: uBLAS:

uBLASは密、ユニット用テンプレートC++クラスを提供し、疎ベクトル、高密度、同一性、三角形、帯状、対称、エルミートおよびスパース行列。ベクトルや行列のビューは、範囲、スライス、アダプタクラス、および間接的な配列を使用して作成できます。ライブラリはベクトルと行列に関する通常の基本線形代数演算をカバーしています。異なるノルムの減少、ベクトルと行列の加減算、ベクトルのスカラー、内外の積、行列ベクトルと行列行列積、三角ソルバーとの乗算をカバーします。

...

  • 固有:

それは小さな固定サイズの行列から任意の大きさの密行列、さらにはスパース行列に、すべてのマトリックスサイズをサポートしています。

std :: complex、integersなどのすべての標準数値型をサポートしており、カスタム数値型に簡単に拡張できます。

さまざまなマトリックス分解とジオメトリ機能をサポートしています。

サポートされていないモジュールのエコシステムは、非線形最適化、行列関数、多項式ソルバー、FFTなどの多くの特殊な機能を提供します。

...

誰もが彼らの主な相違点について、我々はそれらの間で選択可能なベースでより良いアイデアを持っていますか?

答えて

2

式テンプレートによって導入されたパフォーマンスとパフォーマンスの向上を気にする場合は、Eigenを選択し、式テンプレートのみを学習する場合は、uBlasを選択します。

http://eigen.tuxfamily.org/index.php?title=Benchmark

+0

Eigenも式テンプレートを使用します。 –

+0

@quant_devもっと明確にしました。 – kangshiyin

+0

これらのベンチマークはかなり古い(2011年以降)独立したものではないことに注意してください。 –

1

私はかなり些細な行列計算のためのブーストと固有の時間複雑さの比較をしました。これらの結果は、限定されたものとして限定され、ブーストがはるかに優れた選択肢であることを示しているようです。 私は、前処理部分(要素行列をセットアップし、それらをまとめて)を行うFEMコードを持っていました。当然ながら、これには多くのメモリ割り当てが必要です。

enter image description here

IはC++(GCC 5.4.0は、Ubuntu 16.04、インテルI3クワッドコア2上のブーストおよび固有とコードの同じ部分を書きました。40GHz、RAM:4Gb)、linux cl-utilityを使用してノードサイズ(N)と計算時間を変えて別々に実行しました。 私が懸念している限り、Boostで自分のコードを進めることに決めました。

+0

メモリの割り当てが結果に影響しますか? –

+4

あなたはここで何をしていますか? – myradio

+1

このベンチマークのソースを間違いなく表示する必要があります。 – Synxis

関連する問題