CUDA を使用した数百の小さな行列の固有分解について質問があります。
数百 (たとえば 500) の小さな (64 行 64 列) の実対称行列の固有値と固有ベクトルを同時に計算する必要があります。チェスのトーナメント順序付けを用いたヤコビ法で実装してみました(詳しくはこちらの論文(PDF)をご覧ください)。
このアルゴリズムでは、各ブロックで 32 のスレッドが定義され、各ブロックが 1 つの小さな行列を処理し、32 のスレッドが連携して、収束するまで 32 の非対角要素を膨張させます。しかし、私はそのパフォーマンスにあまり満足していません。
私の質問に対するより良いアルゴリズム、つまり多くの 64 行 64 列の実対称行列の固有値分解がどこにあるのか疑問に思っています。私は世帯主の方法がより良い選択かもしれないと思いますが、それがCUDAで効率的に実装できるかどうかはわかりません. 他のほとんどのプログラマーは、多くの小さな行列ではなく、1 つの大きな行列を分解するために CUDA/OpenCL を使用することに関心があるため、オンラインには有用な情報があまりありません。