スパースなコレスキー分解を計算するための並列アルゴリズムを誰に教えてもらえますか? GPUでの実行に適している必要があります。 CUDA、OpenCL、または擬似コードの回答は高く評価されます。GPUのスパースコレスキー分解アルゴリズム
答えて
一般に、直接スパースメソッドは、GPUにはあまり適していません。最良のダイレクトソルバー(ここではCHOLMOD、SuperLU、MUMPSなどのパッケージについて考える)は、L3 BLASを使用して処理できる密なサブブロックを生成するための戦略を使用しますが、ブロックのサイズと形状はGPU BLAS加速のために。それができないことを意味するものではなく、パフォーマンスの向上がその努力に値するものではないかもしれないということだけです。
あなたが疎なコレスキー分解について質問しているのを見て、私は行列が対称正定であると仮定しました。その場合、反復ソルバーの使用を検討することもできます。共役勾配法や他のKrylov部分空間法のいくつかを使用する単純なプリコンディショナーを使用して、多くの優れた実装があります。 CUDA用のCuspライブラリは、問題が反復可能なメソッドに適しているかどうかを調べる価値があります。 ViennaCLライブラリでは、OpenCLを探している場合も同様の機能を提供します。
まず、共役勾配法を試してみましょう。ありがとう! –
ACM(SC'08とPPoPP '09は優れた会議です)の礼状を参照してください。
V.V. Volkov、J.W.Demmel。高密度線形代数を調整するためのGPUベンチマークSC'08。
Jung、J.H.、O'Leary、D.P.コレスキー分解と GPUでの線形プログラミングScholarly Paper、University of Maryland、2006.
G. Quintana-Orti、F. D. Igual、E. S. Quintana-Orti、R. A. van de Geijn。複数のハードウェアアクセラレータを備えたプラットフォーム上で高密度線形システムを解く。 PPoPP'09。
ACM Portal/DLを介してアクセスできない場合は、どこかオンラインである可能性があります。そうでなければ...私はおそらく、最も関連性の高いセクションの一部を引用して引用し、それを公正に使用することができます。
編集:
これを確認してください。
EDIT2: "スパース" についての一部を逃しました。
オンラインで、ACM/IEEEで見ても、私が飛び出すことはほとんどありません。私が見ていることは有望だとは思わない...これは、GPUを使うことによる多くの利益がある計算ではないかもしれない。
これらの参照はすべて密な行列因子分解のようです。疎な分解のためのアルゴリズムは少し異なっています... –
ああ、完全に質問でそれを逃した。もう一度見てみましょう... – Patrick87
マルチフロントアルゴリズムは、パラレルスパース因子分解の一般的な選択肢のようです。 MUMPS
パッケージhereを確認してください。
私が理解しているように、コードはレベル3 BLAS
コール(DGEMM
など)を使用して、高性能を達成しています。 ではなくGPU
を使用したい場合は、CUDA BLAS
などのGPU
ベースのBLAS
の実装にリンクすることが可能かどうかを調査します。
高密度因子分解とは対照的に、疎行法は、浮動小数点作業に加えて無視できない量の整数作業を常に含んでいます(ただし浮動小数点は依然として支配的です)。私はGPU's
の専門家ではありませんが、はGPU
よりも整数作業に適していますか?これは、GPU
のアルゴリズム全体を実装することについての議論かもしれません...
希望することができます。
整数そのものは、GPUとの議論ではありません。つまり、不規則なメモリアクセスパターン/データ構造(例えばポインタ付き)および/または分岐/分岐制御フローは、GPUを使用することに対する強力な議論である。私は疎なコレスキー分解を専門にしていませんが、スパースなコレスキーを行うことは、不規則なメモリアクセスと発散的な制御フローの子供の大部分です。 – Patrick87
@ Patrick87 - 良い点。私が上でコメントしたように、私は私の質問でそのように具体的であってはならない。線形方程式の疎な対称系を解くための任意のアルゴリズムが行う。 –
@Pat:高密度サブ構造が高密度のカーネル(すなわちBLASルーチン)を使用できるようにする浮動小数点の作業では、良いアルゴリズム(つまり、マルチフロント、スーパーノーダルなど)で "ブロック" 。最初の「シンボリック」整数相は、一般に私が理解する限り、不規則なアクセスを含みます。 –
GPUでのスパース性のコルスキー分解は未解決の問題です。前述のLinear Programmingpaperでさえ、密なアルゴリズムを使用しますが、ほとんどの問題はまばらです。市販のLPソルバー市場は非常に競争が激しいですが、GPUをまだ多く使用している製品はありません。
UHM - 組み立てられていないハイパーマトリックスソルバーを参照してください。 1つのホスト上で複数のGPUを使用して、疎なコレスキー分解を計算できます。
- 1. GPUシリアライゼーション分解
- 2. CADの分解図アルゴリズム
- 3. GPU用の最も速いDelaunay三角形分割アルゴリズム
- 4. GPUに優しい2D線分交差アルゴリズム
- 5. GPUメモリの分布
- 6. GPUのスケーラビリティ解析
- 7. 複雑なポリゴンを分解するアルゴリズム
- 8. GPUの分岐予測
- 9. 分散分布アルゴリズム
- 10. ワード分離アルゴリズム
- 11. cuda gpu cudaMemcpyToSymbolでメモリを解放する
- 12. GPUアクセラレーションによるXML解析
- 13. Javaテキスト分割アルゴリズム
- 14. 線分交点アルゴリズム
- 15. 均等配分アルゴリズム
- 16. 円弧分割アルゴリズム
- 17. アルゴリズムの再帰の分析
- 18. 分類アルゴリズムの「パラメータ」とは
- 19. 変動分析のアルゴリズム
- 20. アルゴリズムの問題分類
- 21. 木の分割征服アルゴリズム
- 22. Big O分析のアルゴリズム
- 23. 名前エンティティの解析アルゴリズム
- 24. Cazeの迷路解決アルゴリズム
- 25. CPUコアで関数を呼び出すアルゴリズムを分割し、GPUカーネルで関数を実行する
- 26. 隣人のリストを計算するための最善のGPUアルゴリズム
- 27. パラレルデラウネイ三角形分割アルゴリズム
- 28. 機械学習 - 分類アルゴリズム
- 29. 分散レート制限アルゴリズム
- 30. 最適な分類アルゴリズム
通常のユニプロセッサでこれを行うための疑似コードを投稿してください。GPUに移植することについて喜んで話します。また、これはおそらく既に存在するものです...私は迅速な検索をさせてください。ああ。下の私の答えを見てください。 – Patrick87
それはCholessky分解でなければならないのですか?一般的にスパースでは、高性能なspMV実装を活用できる反復メソッドは、ソルバを指示するGPUにはるかに適しています。 – talonmies
@talonmies - ああ!私はそのようなものであってはならない。私が本当に必要とするのは、線形方程式の疎な対称系を解くアルゴリズムです。コレスキー分解は、現在この問題を解決するために使用されているものです。しかし、GPUの場合、他のアルゴリズムがより適切であれば、私はそれを公開しています。 –