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