共有メモリのGPUで小さな非対称行列の固有ペアを見つける最速の方法


9

小さな(通常は60x60よりも小さい)非対称行列のすべての正(固有値は正)の固有ペアを見つける必要があるという問題があります。固有値が特定のしきい値より小さい場合、計算を停止できます。私は固有値が実在することを知っています。最高のパフォーマンスを絞り出すために使用できるアルゴリズムに関する提案はありますか?私はこれらの分解を数千回行わなければならないので、速度が重要です。

前もって感謝します。

編集:これをGPUの共有メモリで行う必要があります。行列も必ずしも同じサイズではありません。現在、これを行うライブラリーについては知りません。問題に適しているアルゴリズムの提案をいただければ幸いです。


1
私が正しく理解していれば、共有メモリ内の数千の小さな行列を計算するCUDAカーネルがあり、それらをグローバルメモリにコピーするつもりはありません。答えを出す前に、明確にすべきいくつかのポイントがあります。CUDAでは、共有メモリの存続期間はブロックの存続期間にバインドされています。分解する各マトリックスにスレッドがいくつありますか?極端なパフォーマンスは本当に重要ですか?(予測される固有値抽出時間は行列生成時間とどのように比較されますか?)どの固有引数に基づいて、固有システムが実数であると知っていますか?固有システムに欠陥がありますか?
ステファノM

こんにちはステファノ、コメントありがとうございます。とりあえず、分解したい行列の次元に最も近いワープサイズの倍数を取得します。行列の生成時間は大きく異なり、行列の生成時間はより高価になる場合がありますが、行列の生成時間が分解よりも短い状況が多くあります。行列の生成方法が原因で、固有値が実数であることを知っています。元の質問を損なうので、ここでは詳しく説明しません。最後に、はい、システムに欠陥がある可能性があります。
カントク2012

回答:


3

多くの検索を行わずに、MAGMAライブラリーを確認することをお勧めします。継続的にサポートされる無料で利用可能なコード。NVIDIA は、 MAGMAを「固有値問題のソルバーにおける画期的な進歩」として認識しました。

CULAライブラリーもあります。これは一般に商用製品ですが、最近では学術目的での使用が無料になっています(詳細はこちらを参照)。


返信ありがとうございます。以前に両方のライブラリを調べましたが、私の知る限り、関数はホストから呼び出され、メモリはグローバルメモリにある必要があります。オーバーヘッドは使用を正当化するには多すぎると思います。これらの行列はすべて共有メモリで生成され、カーネルで使用されてから破棄されます。それらをグローバルメモリに戻さなくても、そこに保持したいと思います。私がそれらをそこにプッシュしたとしても、ホストから多くのカーネル関数を呼び出すという問題がまだあります(複数のストリームではあります)。
カントク2012

1
@Kantoku、そうです、これらのライブラリはより一般的で、マトリックス全体をグローバルメモリに格納します。マトリックスが共有メモリにある場合、1つのSMだけが作業できますか?したがって、EVDの実装は非常に簡単です。
アレクサンダー

はい、そう思います。そのため、状況に適したアルゴリズムを探していました。私は非対称evdに過度に精通していないので、提案を探していました。
カントク2012

@Kantoku(およびAlexander)。非対称EVDは、シーケンシャルな場合でも、単純なものからはほど遠いものです。それはまだ活発な研究分野です。
Jack Poulson 2012

@JackPoulsonああ、そうですが、私は(そして私はアレクサンダーもそうだと思います)、サイズと性質を考慮に入れると多くの単純化が可能であることを考慮して、確立されたアルゴリズムを問題に適用することは簡単であることを意味しましたマトリックスの考慮。問題は:どのアルゴリズムか。
カントク2012

2

LAPACKの関数を使用します。独自の実装でそれらを打ち負かすことはほとんどありません。


こんにちはWolfgang。答えをありがとう、しかし私はこれをCUDAを使用してGPUに実装するつもりであり、数千のこれらの小さな行列(各ブロックは単一の行列の分解を処理する)のために、行列は必ずしも同じサイズではないため、実装する共有メモリを使用する自分自身が私の唯一の選択肢のようです。これらのタイプの行列に最適なアルゴリズムは何ですか?PS契約をありがとう。前学期KAUSTで行ったIIの講義。私はそれらを楽しんだ:)
カントク

2
@Kantokuこれらの詳細を質問に追加する必要があります。追加しないと誤解を招きます。
アレクサンダー

@アレクサンダー私はより詳細に質問を更新しました。提案をありがとう!
カントク2012

1
@Kantoku:GPUは私の領域を少し超えていますが、あなたが望むことを実行するライブラリがすでにそこにあると確信しています(そして実際、他の回答がすでにそれらにリンクしているのを私は見ています)。私のクラスが気に入ってくれてうれしいです!
Wolfgang Bangerth 2012
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.