我有一个自定义函数,它接受 2 个矩阵(2 列)并对其进行操作。这是一个相当复杂的函数,因为它涉及几个矩阵乘法,依次通过一个列向量(在 for 循环中),并根据来自另一个列向量的相应值选择要相乘的矩阵。更像是一个累积矩阵乘积,其中元素在列上,但以其中一列中的值为条件。
例如。,:
col1 col2
0 0.03
0 0.04
1 0.02
0 0.1
1 0.004
如果值为 0,则选择一个矩阵相乘,或者如果它为 1,则选择不同的矩阵。然后取一个累积矩阵乘积。即,值 = 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 为这些输入数据列提供累积矩阵产品的输出。(更像是对 cpu 节点/工作人员的独立、粒度并行化,但在 GPU 上)
我不认为像 arrayfun 或 bsxfun 这样的元素操作在这里会有帮助。将非常感谢建议和帮助。谢谢你的时间。