gpt4 book ai didi

matlab - 在 matlab 中对 gpuArrays 按列操作的函数

转载 作者:行者123 更新时间:2023-12-04 19:47:43 24 4
gpt4 key购买 nike

我有一个自定义函数,它接收一个 m x 2 矩阵(2 列)并对其进行运算。这是一个相当复杂的函数,因为它涉及多个矩阵乘法,依次通过一个列向量(在 for 循环中),并根据另一个列向量的相应值选择要相乘的矩阵。更像是一个累积矩阵乘积,其元素在列上,但以其中一列中的值为条件。

例如:

 col1 col2
0 0.03
0 0.04
1 0.02
0 0.1
1 0.004

如果值为 0,则选择一个矩阵进行乘法运算;如果值为 1,则选择另一个矩阵。然后采用累积矩阵乘积。 IE。, 值 = 诊断 (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 节点/worker 的独立、细粒度的并行化,但在 GPU 上)

我认为 arrayfun 或 bsxfun 等元素级操作在这里没有帮助。非常感谢建议和帮助。感谢您的宝贵时间。

最佳答案

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

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

本书Accelerating MATLAB with GPU Computing可能是正确的起点。

关于matlab - 在 matlab 中对 gpuArrays 按列操作的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18747288/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com