带有 parfor 循环的 GPU 上的 MATLAB arrayfun

MATLAB arrayfun on GPU with parfor loop

我正在 MATLAB 中使用 arrayfun 和 GPU 进行一些繁重的计算工作。

我的代码是这样的

N = 2000;
dp = 0.005;
p1 = [0:dp:1];
p2 = [0:dp:1];
pB = [0:dp:2];
[p1,p2,pB] = meshgrid(p1,p2,pB);
p1 = gpuArray(p1);
p2 = gpuArray(p2);
pB = gpuArray(pB);
A = zeros(N,1);
parfor i = 1:N
       A(i) = arrayfun(@MYFUN,p1,p2,pB);
end

首先,令我惊讶的是 N=2000parfor 几乎与普通 for 循环花费相同的时间(当使用 parfor 时,似乎我的 MATLAB 连接到 6 个工人)。那是因为我的笔记本电脑只有 1 个 GPU,所以 parfor 没有帮助吗?

parfor 不是在 GPU 上 运行,而是在您的计算机 CPU 的可用内核上 运行 多个 "workers"。一般来说,GPU 核心不能充当 matlabpool/parpool 工作者。

如果您有多个 GPU,您可以将 parforspmd 结合使用,以便在 GPU 上 运行 它。 mathwork answer 但如果您想在 GPU 上执行特定功能。