1

或者如何将 Parfor 循环转换为 gpuArray 操作?

手头的问题:对大型数据矩阵的按列操作,通过 parfor 分配给多个 CPU(工作程序)。

data = 1000 x 200 matrix
[nrows, ncols] = size(data)
parfor ix = 1:ncols
     workerData = data(:,ix);
     colwiseResult(ix) = function(workerData,params);
end

现在,如何有效地利用 GPU 呢?特别是因为问题需要扩展到 1000x1000 矩阵(以及更多)

dataGPU = gpuArray(data);

但我没有找到一种更简单的在 GPU 上进行按列操作的方法。诸如 arrayfun 或 bsxfun 之类的函数逐个元素地操作,这不是我感兴趣的。由于这些是微不足道的并行任务,因此在 GPU 中利用多个处理器可能是理想的(并且避免了 parfor 等的困扰,)

(实际上,我正在执行一个似然计算,使用 Workers 内部的 for 循环在列向量上的每个数据点上逐步进行矩阵对角化、指数和乘积)。已检查所有这些操作是否都具有 gpu 重载)

4

1 回答 1

0

你看过这个教程吗?

http://www.mathworks.ch/videos/introduction-to-gpu-computing-with-matlab-68770.html

请先检查您是否可以使用您的 GPU,因为并非所有 GPU 都受支持。之后,您可以将变量传递给您的 GPU,或者您可以将 GPU 包含到您的 parfor 循环中,如下所示:

parfor ix = 1:10
gd=gpuDevice;
end

归根结底,使用一个 GPU 并不是一个很大的优势。请提供有关您的工作站的更多详细信息以获取更多信息。

于 2013-08-05T14:22:19.630 回答