Я использую Matlab и хочу использовать мои 2 графических процессора. У меня большая матрица, которая не подходит для 1 графического процессора, но половина матрицы подходит для 1 графического процессора. Поэтому я хочу разделить матрицу пополам и позволить каждому из моих двух графических процессоров работать на половине матрицы. Я сделал следующее
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
. Мой вопрос: как я могу узнать, что я действительно создаю вектор 2 M
(они разные) на каждом моем GPU? Есть ли одна встроенная функция, чтобы показать это? Зачем нам нужен spmd gpuDevice end
? В настоящее время я чувствую, что с точки зрения скорости parfor
кажется в 2 раза быстрее, чем обычный for
. Но как я могу подтвердить, что на самом деле каждый графический процессор хранит разные 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
, исчезнут?