我有一个自定义函数,它接受一个m乘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为我提供这些输入数据列的cumulativeMatrixProduct输出。 (更像是对cpu节点/工作者的独立,粒度并行化,但在GPU上)
我认为像arrayfun或bsxfun这样的元素操作在这里可能会有所帮助。 真的很感激建议和帮助。谢谢你的时间。
答案 0 :(得分:0)
如果你有多GPU,你可以使用spmd或parfor。
您希望对GPU资源进行低级访问,而只能使用CUDA和Mex文件。
本书Accelerating MATLAB with GPU Computing可能是正确的开始。