2012-03-16 102 views
6

いくつかのコードでは、対称実行列(Ax = lamba Bx)で一般化された固有値問題の自動ベクトルと自動値を取得する必要があります。このコードはLACPACKのDSPGVXを使用します。 MAGMA機能を使用してGPUでスピードアップしたかったのです。私たちは、行列の大きさ(N)は、分子内の原子の数に関連し、さらに100から50000まで行くと、このGPUで固有値と固有ベクトルを計算する際のパフォーマンスが低い

http://icl.cs.utk.edu/magma/docs/zhegvx_8cpp.html

については、このフォーラムに尋ね、答えを得ました。

a)Nが2500(約)より大きい場合、MAGMAは機能しません。セグメンテーションエラー b)MAGMAは常にLAPACKシーケンシャルよりも遅く約10倍遅く実行されます

この動作は正常ですか?誰もこの類似の問題に取り組んでいる誰かがまともなスピードアップを得る参照を報告することはできますか?あなたがより良い固有値に切り替えることにより、より高いパフォーマンスの利点を得ることができるかもしれ私の経験で

おかげ

+3

「動作しません」という意味は...実行されませんか?それは間違った結果を生み出しますか?それは実行時にクラッシュして焼けますか? – prelic

+0

これを実行しているGPUは何ですか? – talonmies

+0

テスラc2070、4GBのRAM – flow

答えて

4

。私が知っている最良のソルバーはARPACKです。あなたの行列には、例えば、それらがまばらな場合など、いくつかの構造を持つことが最も効果的です。このソルバは、固有値ペアの総数のほんの一部を抽出する必要がある場合にも、最も効率的です。

私は、CPU上で実行している問題でこのソルバーを試すことから始めます。これだけでは、あなたのニーズに十分なパフォーマンスが得られることがあります。そうでなければ、ARPACKの計算コアをGPUに移動するのは比較的簡単です。または、ARPACKのパラレルバージョンが利用可能です。

+0

ARPACKを密行列の場合に適用できると思いますか?もしそうなら、いくつかの例を指摘できますか?ありがとう – flow

+0

行列の種類については何も仮定していません。逆引きインターフェースについて読むと、これがなぜそうであるか理解できます。 –

+0

あなたはあなたの感動的な答えだけでなく、あなたの優れた画像を与えたので、恩恵を得るに値する – flow

2

CULA http://www.culatools.com/を試しましたか? CULAはNVIDIAによってCUDA用にLapackに変換されているので、少なくとも理論的には、一般化された固有値問題のための最良の実装の1つを持つべきです。単精度バージョンは無料だと思うので、試してみてください。

+0

私は見ましたが、一般化された固有値問題の実装に関連する情報は見られませんでした。単純な固有値問題に関する情報だけが報告されていますが、そうですか? – flow

+2

@flowそうです。私は一般化された問題ではなく、対称固有値問題を解くためだけにCULAを使いました。誤解をおかけして申し訳ありません。 – mmisu

関連する問題