大きな行列の場合、CUDAを使用してGPUで行列乗算を実装する必要があります。各マトリックスのサイズだけでも、GPUメモリよりも大きくなります。ですから、それを効率的に行うためのアルゴリズムが必要だと思います。インターネットを回ったのですが、見つかりませんでした。誰かが私にそのようなアルゴリズムの名前またはリンクを教えてもらえますか?
質問する
7747 次
1 に答える
18
これには正式なアルゴリズムはありません。一般に、問題全体が同時にメモリに格納されないこの種の線形代数演算は、「コア外」演算と呼ばれます。
それを解決するために、特に精巧なアルゴリズムは必要なく、CUBLAS ライブラリと鉛筆と紙だけが必要です。たとえば、次のように行列積を分解できます。
これにより、4 つの独立した部分行列乗算演算が得られます。これらは、非常に単純なホスト コードを使用して CUBLAS gemm を 4 回呼び出すことで計算できます。問題のサイズと GPU の容量に合わせて、必要な数の部分行列にアイデアを拡張できます。同じ原理を使用して、複数の GPU で行列乗算の問題を実装することもできます (例については、この質問を参照してください)。
別の方法として、ハーバードが開発したSciGPU-GEMMコードベースとHPL-CUDA linpack 実装で、この正確なアイデアの実用的な実装を見つけることができます(免責事項: 私は後者のコードベースと提携しています)。
于 2013-01-28T08:32:01.357 に答える