3

am by 2 行列 (2 列) を取り込んで操作するカスタム関数があります。これは、列ベクトルの 1 つ (for ループ内) を順次通過するいくつかの行列乗算を含み、他の列ベクトルからの対応する値に応じて、乗算する行列を選択するため、かなり複雑な関数です。列に要素がある累積行列積に似ていますが、列の 1 つの値に条件付きです。

例えば。、:

 col1 col2
 0   0.03
 0   0.04
 1   0.02
 0   0.1
 1   0.004

値が 0 の場合、乗算する行列が 1 つ選択されます。値が 1 の場合は、別の行列が選択されます。次に、累積行列積が取得されます。つまり、Values = diag(Valuesmat); cumulMatProduct = ini;

  for ix = 1:length(col2)
      if col1(ix) == 0
          matrixToMultiply = matrix1;
      elsif col1(ix) == 1
          matrixToMultiply = matrix2;
      end

      anotherMatrixtoMultiply = diag( exp(Values).*col2(ix) );
      cumulMatProduct = matrixToMultiply*anotherMatrixtoMultiply*cumulMatProduct;

   end

  etc., 

基本的に、それが関数の機能です。

現在、そのような列データが多数あるため、GPU 計算を使用できるかどうかを知りたいです。(PCT と TESLA s2050 を使用して Matlab r2013A にアクセスできる)

私は次のようなことをしたいと思います:

    DataMatrix1 = [col1; col1; col1] ;
    DataMatrix2 = [col2; col2; col2];

    gpuDat1 = gpuArray(DataMatrix1);
    gpuDat2 = gpuArray(DataMatrix2);

    [resultVect] = myFuncCall(gpuDat1, gpuDat2, ValueMat,ini); 
     %(ValueMat & ini is not sliced & each processor will have its copy)

つまり、行列を各 gpuProcessor の列としてスライスし、各プロセッサに myfunction を使用させて、これらの入力列のデータのcumulativeMatrixProductの出力を提供します。(CPUノード/ワーカーへの独立した粒度の高い並列化に似ていますが、GPU上にあります)

arrayfun や bsxfun などの要素単位の操作は、ここでは役に立たないと思います。提案と助けを本当に感謝します。御時間ありがとうございます。

4

1 に答える 1