或者如何将 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 重载)