複数の(n個としましょう)GPU上のCUDAで疎行列ベクトル積 y = Ax を計算する最速の方法は何だろうと思っていました。
私の素朴なアプローチは、ベクトル x と y を n 個のチャンク (各 GPU で 1 個のチャンク) に分割することです。次に、行列 A をより小さな n^2 ブロック A_ij に分割し、計算します。
y_i = \sum_j A_{i,j} x_j, // GPU j stores A_{i,j} and x_j, result is copied
// to and summed up on GPU i
さまざまな GPU で j=1..n を cuSPARSE としましょう。これは機能しますか?ユニファイド メモリ アーキテクチャでは、原則としてすべての GPU がグローバル メモリにアクセスできる必要があります。
GPU 間のメモリ転送は非常に遅くなりますか? 大幅な高速化は期待していませんが、単一の GPU で行列とベクトルの乗算を実行するよりも遅くなるかどうか疑問に思っていました。