/ / CUDA - 行列、cuda、opencl、線形代数、数値的方法を使用して、数百の小さな行列の固有値/固有ベクトルを計算する

CUDA - 行列、cuda、opencl、線形代数、数値法を使用して、数百の小さな行列の固有値/固有ベクトルを計算する

CUDAを使って何百もの小さな行列の固有分解について質問があります。

私は固有値を計算する必要があります。数百(例えば、500)個の小さな(64×64)実対称行列を並行して生成する。私はチェスのトーナメント秩序を使ってJacobiの方法でそれを実装しようとしました(see この論文(PDF) 詳細については)。

このアルゴリズムでは、32個のスレッドがそれぞれに定義されています各ブロックは1つの小さな行列を処理し、32個のスレッドは協調して収束するまで32個の非対角要素を膨張させます。しかし、私はそのパフォーマンスに満足していません。

私はどこに良いのだろうと思っていますアルゴリズム、すなわち多くの64×64の実対称行列の固有分解。私は家主の方法がより良い選択かもしれないが、それがCUDAで効率的に実装できるかどうかは確かではない。オンラインの有益な情報はほとんどない。ほとんどの他のプログラマーはCUDA / OpenCLを使って大きな行列の代わりに大きな行列を使用します。

回答:

回答№1の場合は3

少なくともEigenvaluesでは、サンプルはCuda SDKにあります

http://www.nvidia.de/content/cudazone/cuda_sdk/Linear_Algebra.html

画像は壊れているように見えますが、サンプルのダウンロードは引き続き機能します。私は完全なSDKをダウンロードし、そのexsampleを見てお勧めします。また、このペーパーは役に立つかもしれません:

http://docs.nvidia.com/cuda/samples/6_Advanced/eigenvalues/doc/eigenvalues.pdf