0

システムの異なる pci スロットに 2 つの GPU (2x Nvidia Quadro 410) をインストールしました。これらの GPU の両方で Martix 乗算を解決するには、各 GPU が出力行列の一部を処理/計算してから返すように入力行列を分割するにはどうすればよいですか。たとえば。2 つの行列 A、B のそれぞれが 10x10 の次数の場合、出力行列 C= A x B を計算し、100 要素 (10 x 10) のうち 50 要素を最初の GPU で計算し、残りの半分、つまり 50 をb は 2 番目の GPU で計算されます。OpenCLで実装しようとしています。ただし、解決策を考え出すのに役立つアルゴリズムは大歓迎です。

4

1 に答える 1

1

一般に、行列X(サイズax b、行が最初) と Y (サイズbx c) がある場合、

X * Y = vcat(X[0:a/2,0:b] * Y, X[a/2:a,0:b] * Y)

この疑似コードでは、vcatは垂直方向の連結 (1 つのマトリックスを互いに重ね合わせます。たとえば、2x3 マトリックスと連結された 4x3 マトリックスは 6x3 マトリックスを生成します) は、:範囲を示し、[]インデックスを付けます。

の両方の引数vcatは異なる GPU で計算でき、連結は、出力バッファーの異なるサブ領域に出力をポイントするだけで実現できます (C 順序配列があると仮定します)。の最初の分割は、X異なるサブ領域を使用するだけで同様に実現できます (行に沿って分割されるため)。

于 2016-05-05T05:07:33.867 に答える