带有 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=2000
,parfor
几乎与普通 for
循环花费相同的时间(当使用 parfor
时,似乎我的 MATLAB 连接到 6 个工人)。那是因为我的笔记本电脑只有 1 个 GPU,所以 parfor
没有帮助吗?
parfor
不是在 GPU 上 运行,而是在您的计算机 CPU 的可用内核上 运行 多个 "workers"。一般来说,GPU 核心不能充当 matlabpool/parpool 工作者。
如果您有多个 GPU,您可以将 parfor
与 spmd
结合使用,以便在 GPU 上 运行 它。 mathwork answer 但如果您想在 GPU 上执行特定功能。
我正在 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=2000
,parfor
几乎与普通 for
循环花费相同的时间(当使用 parfor
时,似乎我的 MATLAB 连接到 6 个工人)。那是因为我的笔记本电脑只有 1 个 GPU,所以 parfor
没有帮助吗?
parfor
不是在 GPU 上 运行,而是在您的计算机 CPU 的可用内核上 运行 多个 "workers"。一般来说,GPU 核心不能充当 matlabpool/parpool 工作者。
如果您有多个 GPU,您可以将 parfor
与 spmd
结合使用,以便在 GPU 上 运行 它。 mathwork answer 但如果您想在 GPU 上执行特定功能。