3

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

4

1 回答 1

0

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

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

这本书用 GPU 计算加速 MATLAB可能是正确的起点。

于 2014-04-16T08:54:02.837 回答