線形代数演算に使用するGPUライブラリ


8

私が持っているコードを高速化するGPUライブラリを探しています。その主要な「高性能」領域には、特異値分解、QR分解、固有値、固有ベクトル計算があります。CuBLAS、MagmaなどのツールでNvidiaのWebサイトを確認しましたが、Cudaでコードを記述したくありません。

SVD、QRなどのメインCコードから「呼び出す」ことができるライブラリがあり、GPUで計算が行われるとすばらしいと思います。つまり、要約すると、集中的な線形代数演算が加速される通常のCコードがあります。これを行うことができるオープンソース(できれば)ライブラリを知っている人はいますか?

ありがとう。

回答:


8

[CU] BLASの場合、CUDAツールキット(src / fortran_thunking。{c、h})に「thunking」と呼ばれるラッパーがあり、CPUメモリからポインターを受け取り、すべてのGPU割り当て/コピーを実行します。次のようなプリプロセッサステートメントを使用して、コードにプラグインできます。

#define ZGEMV CUBLAS_ZGEMV
#define ZGEMM CUBLAS_ZGEMM
...

LAPACKの場合、Magmaはその機能のすべてではないにしてもほとんどがCPU側のインターフェースを持っているため(最初に実装される傾向がある)、サンクと同様に、呼び出しを交換するだけです。場合によっては、インターフェイスまたはワークスペースの要件が少し異なる可能性があるため、サンクよりも少し注意する必要があります。

必要な免責事項は無料の昼食がないことです。少なくともメモリコピーを明示的に処理するつもりがない場合、パフォーマンスは高い計算強度(フロップ/バイト)の大きな問題に制限されます。問題が小さい場合やバッチ処理されている場合は、メモリコピーをストリーミングするための制御コードと、メモリコピーと計算をオーバーラップするためのライブラリ呼び出しを書くことを強くお勧めします。カーネルを書く必要がないので、これはAPIほどではなく、実際にはCUDAではありません。CUBLASとMagmaはどちらも、ストリームを指定するためのAPI呼び出しを提供します。


4

ViennaCL(http://viennacl.sourceforge.net/)を執筆し、Computational Sci StackExに参加しているKarl Ruppは、ここでチャイムできるかもしれません-ライブラリには、SVD、LU、eigendecompなどの複数の行列分解があります。また、ヘッダーのみのライブラリであり、C ++(Cについては不明)コードでうまく機能するはずです。

LU分解で使用されている例-http://viennacl.sourceforge.net/viennacl-examples-dense-matrix.html


彼の以前の説明については、を参照してください。scicomp.stackexchange.com/questions/376/…–
ジェシーチャン

ViennaCLをC ++以外の言語で開く予定です。BLAS演算用の純粋なCインターフェースは、次の1.5.0リリースで利用可能になる予定で、1.6.0でより多くの因数分解アルゴリズムが利用可能になります。
Karl Rupp 2013年

3

単精度(無料版)と倍精度(完全版、つまり有料版)で最も一般的なLAPACK / BLAS演算を実装するCULAライブラリをご覧になることをお勧めします。

ライブラリはLAPACK / BLASの直接の代替として機能するため、元のコードでこれらの関数をすでに使用している場合は、何も変更する必要はありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.