函数在matlab中的gpuArrays上按列运行

时间:2013-09-11 17:10:08

标签: matlab parallel-processing gpu

我有一个自定义函数,它接受一个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这样的元素操作在这里可能会有所帮助。 真的很感激建议和帮助。谢谢你的时间。

1 个答案:

答案 0 :(得分:0)

如果你有多GPU,你可以使用spmd或parfor。

您希望对GPU资源进行低级访问,而只能使用CUDA和Mex文件。

本书Accelerating MATLAB with GPU Computing可能是正确的开始。