How to use GPU and CPU simultaneously in a for loop ?
2 ビュー (過去 30 日間)
古いコメントを表示
% n be the number of iterations : 6
% A be the two dimensional matrix of size 10*10 stored in three dimension.
for i=1:n
A(:,:,i)=rand(10,10);
[Q(:,:,i),R(:,:,i)]=qr(A(:,:,i));
end
1)Here, n is the number of iterations and each iterations can run independently, I wanted to use both CPU and GPU i.e if (i==1) is running on CPU, (i==2) should run on GPU. If for example, GPU completes before CPU, then it should automatically carry on with the next iteration which is (i==3). Once the CPU completes, (i==1), it should proceed with (i==4) and so on. Both GPU and CPU should run asynchronously, where GPU itself should run in an asynchronous manner. How should I implement this ?
2) If i have 2 gpu's then same as the above method, if (i==1) is running on CPU, (i==2) should run on GPU1 and (i==3)should un on GPU2. Which ever completes work faster should take next iteration and so on. How to implement this ?
0 件のコメント
採用された回答
Matt J
2019 年 1 月 14 日
編集済み: Matt J
2019 年 1 月 15 日
You can't make the CPU and GPU do alternating loop iterations, but you can divide the slices of A into two batches, and make the CPU and GPU work asynchronously on their respective batch, as below.
Acpu=A(:,:,1:n/2); %chunk #1 : send to CPU
Agpu=gpuArray(A(:,:,n/2+1:end)); %chunk #2 : send to GPU with device index 1
p=parpool(2);
F(1)=parFeval(p, @deploy,2,Acpu);
F(2)=parFeval(p, @deploy,2,Agpu,1);
[Q,R] = fetchOutputs(F,'UniformOutput',false); % Blocks until complete
Q=cat(3,Q{1},gather(Q{2}));
R=cat(3,R{1},gather(R{2}));
function [q,r]=deploy(a,Id)
if nargin>1, gpuDevice(Id);end
for i=size(a,3):-1:1
[q(:,:,i),r(:,:,i)]=qr(A(:,:,i));
end
end
Naturally, you should pass the gpuDevice ID numbers that are actually assigned to the graphics cards on your machine. Above, I've assumed they are numbered 1,2, etc...
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で GPU Computing についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!