在Matlab中使用多个GPU

问题描述 投票:0回答:1

我正在使用Matlab,我想利用我的2个GPU我有一个不适合1个GPU的大矩阵,但是一半的矩阵适合1个GPU。因此,我想将矩阵切成两半,然后让我的2个GPU中的每一个都在矩阵的一半上工作。我的工作如下

try 
    parpool('local',gpuDeviceCount)
end
spmd
    gpuDevice
end
dp = 0.00001;
R = zeros(1,2);
parfor k=1:1:2
   if k==1
      M = gpuArray([dp:2*dp:10])
   else
      M = gpuArray([2*dp:2*dp:10])
   end
   R(k) = arrayfun(@(x) myfun,M);
end

[我的问题是:我怎么知道我确实在每个GPU上创建了2个M向量(它们是不同的)?是否有一个内置函数可以显示此内容?为什么我们需要spmd gpuDevice end?目前,我可以感觉到,就速度而言,parfor似乎比常规for快2倍。但是如何确定每个GPU确实存储了不同的M我不知道它是否实际复制了两次gpuArray([dp:2*dp:10])和两次gpuArray([2*dp:2*dp:10])

并且在这段代码完成之后,我发现我的向量M没有出现在工作区中。但是parfor代码之外定义的其他变量仍在工作空间中。如果我只使用for而不是parfor(但使用M较小的尺寸以便可以容纳1个GPU),则在for loop之后,向量M在工作区中,其类型为gpuArray。为什么使用parfor,然后在parfor loop之后,在parfor loop中定义的那些变量都消失了?

matlab gpu-programming
1个回答
0
投票

回答您的一些问题。

© www.soinside.com 2019 - 2024. All rights reserved.