12

重い線形代数計算を行う必要があるプログラムを開発しています。

現在、 LAPACK/BLASルーチンを使用していますが、自分のマシン (24 コア Xeon X5690) を活用する必要があります。

pblasscalapackなどのプロジェクトを見つけましたが、それらはすべて分散コンピューティングと MPI の使用に重点を置いているようです。

利用可能なクラスターがありません。すべての計算は単一のサーバーで行われ、MPI を使用するのはやり過ぎのように見えます。

これについて何か提案はありますか?

4

2 に答える 2

10

@larsmans (たとえば MKL) が述べたように、LAPACK + BLAS インターフェイスを引き続き使用しますが、プラットフォーム用に調整されたマルチスレッド バージョンを見つけるだけです。MKL は優れていますが、高価です。その他のオープンソースのオプションには次のものがあります。

  • OpenBLAS / GotoBLAS、Nehalem サポートは正常に動作するはずですが、westmere のサポートはまだ調整されていません。マルチスレッドを非常にうまく処理します。
  • Atlas : インストール時にアーキテクチャに合わせて自動的に調整されます。おそらく「典型的な」マトリックス(たとえば、正方形のSGEMM)では遅くなりますが、奇妙なケースでは速くなる可能性があり、westmereではOpenBLAS / GotoBLASを打ち負かすことさえありますが、これは自分でテストしていません. ほとんどがシリアルの場合に最適化されていますが、並列マルチスレッド ルーチンが含まれています。
  • Plasma - マルチコア用に特別に設計された LAPACK 実装。

マークのコメントにも同意します。使用しているLAPACKルーチンによっては、MPIを使用した分散メモリのほうが実際にはマルチスレッドよりも高速になる場合があります。BLAS ルーチンの場合はそうではありませんが、より複雑なもの (LAPACK の固有値/ベクトル ルーチンなど) については、テストする価値があります。MPI 関数呼び出しがオーバーヘッドであることは事実ですが、分散メモリ モードで処理を行うと、偽共有や共有変数へのアクセスの同期などについてそれほど心配する必要がなくなります。

于 2012-04-05T12:54:15.213 に答える
2

インテル® MKLの使用を検討してください。>クアッドコアマシンではまだ実行していませんが、 OpenBLASも非常に高速です。

于 2012-04-05T09:19:04.770 に答える