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 などの要素単位の操作は、ここでは役に立たないと思います。提案と助けを本当に感謝します。御時間ありがとうございます。