BLAS、LAPACK、およびその他の線形代数ライブラリの関係は何ですか?


26

私が取り組んでいるプロジェクトのC ++線形代数ライブラリを検討しています。私がまだ把握していないことは、BLASとLAPACKを他の線形代数ライブラリに接続することです。

線形代数ライブラリに関するこの記事を見ると、次のことが興味深いことがわかりました。

  • 一部のライブラリはBLASおよびLAPACKから独立しています
  • 一部にはBLASとLAPACKが必要です
  • 一部にはBLASおよびLAPACKへのオプションのインターフェースがあります
  • そして、私が理解しているように、BLASとLAPACKを使用して線形代数の問題を直接解決できます。

一部のライブラリは、CおよびFortranで記述されたBLASおよびLAPACKライ​​ブラリに対する単なるC ++インターフェイスであり、他のライブラリは独自の代替ルーチンを実装していると想像できますが、

  1. BLASおよびLAPACKへのオプションのインターフェイスの意味は何ですか?オプトアウトすることで失うものは何ですか?代わりにライブラリは何をしていますか?

  2. ライブラリは、単なるインターフェイス以上のものを提供しますか?たとえば、UMFPACKはCで記述されており、BLASおよびLAPACKへのオプションのインターフェースがあります。BLASとLAPACKが単独ではできないUMFPACK(または他のライブラリ)は何ができますか?

回答:


15

私の知る限り、Lapackは多くのアルゴリズム(非対称高密度固有値ソルバー、擬似2次時間対称固有値ソルバー、高速Jacobi SVD)の公開されている唯一の実装です。BLAS + Lapackに依存しないほとんどのライブラリは、行列乗算、LU分解、QR分解などの非常に原始的な操作をサポートする傾向があります。Lapackには、他のどこにも実装されていないと思われる、密行列計算のための最も洗練されたアルゴリズムのいくつかが含まれています。

(少なくとも部分的に)あなたの質問に答えるために、

  1. BLAS / Lapackをオプトアウトすることにより、通常、機能が失われることはありません(オプションのインターフェイスが、代替実装が存在しないように設計されている場合を除きます)。非常に高度な操作を実行したい場合、他のライブラリはおそらくそれ自体を実装しません。BLASはアーキテクチャに合わせて高度に調整できるため、大幅な高速化を逃してしまう可能性があります(速度の差は一桁も前代未聞ではありません)。

  2. スパース行列因数分解用のUMFPACKについて言及します。BLAS / Lapackは、密な行列のみに関心があります。あるレベルのUMFPACKは、中規模の高密度の問題に対処する必要があります。これは、カスタム実装を使用するか、BLAS / Lapackを呼び出すことで実行できます。ここでの違いは速度のみです。

速度が重要な場合は、オプションのBLAS / Lapackバインディングをサポートするライブラリを使用してみて、より速くしたいときに最後に使用してください。


3
  1. BLASルーチンとLAPACKルーチン(最も重要なのはBLASルーチン)の適切な実装は、同じ関数の単純な単純な実装よりもはるかに高速です。ただし、効率的な実装には通常、実行している特定のコンピューターに固有の最適化が含まれます。同じメーカーの異なるモデルのプロセッサー(Intel x86-64プロセッサーなど)でさえ、優れたパフォーマンスを得るために非常に異なるコードを必要とすることがよくあります。最適化されたBLAS / LAPACKライ​​ブラリーをソフトウェアパッケージに提供することにより、通常、最適化されていないルーチンを使用するよりもコードを高速化できます。ただし、多くの一般ユーザーには最適化されたルーチンをインストールする専門知識がないため、一般的な最適化されていない線形代数ルーチンを使用するオプションを提供することも一般的です。

  2. UMFPACKは、スパース行列(0エントリの割合が高い行列)上の線形代数のルーチンのライブラリです。BLAS/ LAPACKを使用して、遭遇する密な行列(または行列内の密なブロック)を処理できます。


1

ショートバージョン:それらは、Fortranで主に書かれたライブラリであり、多くの言語の数値演算に使用されます-速度と最適化が非常に優れているため、一部のCプログラムでも使用できます。また、多くのアルゴリズムの唯一のオープンソース実装です:)

依存関係がない限り、ライブラリを使用する必要はありません。iircこれらのほとんどは非常に独立しており、アーキテクチャに適したベクトル化された関数など、独自の数学関数をいつでも作成できます。


1
ほとんどの最適化されたBLASおよびLAPACKルーチンは、Fortranで記述されなくなってからずっと経ちました。通常、最速のBLASおよびLAPACKルーチンは、netlibからダウンロードされたものではありません。ほとんどのプロセッサのベンダーは、チップ専用に設計されたBLASおよびLAPACKの最適化バージョンを販売または配布しています。
ビル・バルト

申し訳ありませんが、ネット上で配布されているもの-一般的なもの; もちろん、チップ固有のものは移植性が高くありません。つまり、IntelのベクタートリックのいくつかはAMDチップではうまく機能しないため、ライブラリに関する免責事項があります。そして、私はそれらが別の名前でブランド変更されたと確信していますか?
エイリオウフォンカウフ

@BillBarth BLASは間違いありませんが、LAPACKルーチンも書き換えられますか?Afaikは、BLAS 3のパフォーマンスが非常に高い(またはマルチスレッド化されている)限り、すべて良好です。
stali

1
BLASとLAPACKは、関数とインターフェイスの名前だと思います。さまざまな実装があります(ACML、ESSL、MKL、ATLASなど)。
ビル・バルト

1
これらは単なるインターフェイスです.. .ATLASのように、実際のライブラリではありません。
エイリオウフォンカウフ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.