2016-05-05 23 views
0

システムに2つのGPU(2x Nvidia Quadro 410)を異なるpciスロットにインストールしました。これら両方のGPUでのマルティクスの乗算を解決するには、各GPUが出力行列の一部を処理/計算して戻すように入力行列を分割する方法を教えてください。 たとえば、第1のGPU上で100個の要素(10×10)50個の要素を計算し、残りの50個(すなわち、50個)の要素を計算するように、出力行列C = A×Bを計算する。 bは2番目のGPUで計算されます。 私はOpenCLで実装しようとしています。しかし、私が解決策を考案するのに役立つアルゴリズムは歓迎されています。一般にマルチGPUを使用した並列行列乗算

答えて

1

、あなたは(サイズX baの、最初の列)の行列Xを有する場合(サイズX cbの)Y、この擬似コードで

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

vcat縦連結である(いずれかを置きます例えば、2x3マトリクスで連結された4x3マトリクスは6x3マトリクスを生成する)、:は範囲を表し、[]はインデックスを付ける。

異なるGPUでvcatの両方の引数を計算することができます。連結は、出力バッファの異なる部分領域に出力を指定するだけで可能です(C配列の場合)。 Xの最初の分割は、(行に沿って分割されるため)異なる部分領域を使用するだけで同様に達成できます。

+0

ありがとうございます。私はこれについて実装を開始し、進捗状況をお知らせします。これを行うには、これが最も効率的な方法だと思いますか?すべての要素を半分に分けていないので、 – pradyot

+0

私はあなたが何を意味するのか分かりません。この分割は完全に仮想です。実際には、行列の乗算ルーチンを異なるGPUの配列の異なる部分に向けるだけです。 – fjarri

+0

ありがとうございます。これは完全に働いた!! – pradyot