How to select GPU when doing thread-based parallel?
조회 수: 2 (최근 30일)
이전 댓글 표시
Hi,
I am running programs using multiple GPUs that are shared with other users in our university's super computer. To improve speed, I run programs parallelly in many workers. I would like to put more workers to GPUs that are freer, and less on GPUs that are busier. For example, I would like 4 workers to use a GPU that is 100% free, and 2 workers to a GPU that has 50% occupied by another user.
I know how to do this when I use process-based pool. I can assign a GPU to a worker by doing:
spmd
gpuDevice(GPUindex(labindex));
end
But I do not know how to do it using thread-based pool, i.e., a pool generated using
parpool("threads");
Using spmd is not available for a thread-based pool.
I would really appreciate your input on this. Thanks.
댓글 수: 3
Edric Ellis
2022년 7월 12일
gpuArray should be documented as working on thread-based pools, thanks for pointing out this omission.
채택된 답변
Edric Ellis
2022년 7월 12일
Unfortunately, spmd is indeed not yet supported for thread-based pools. Until it is, you can do something like the following to get a stable worker ID. Note that I am not advocating this as an example of sensible programming... this relies on the fact that thread-based workers are guaranteed to have different random number streams.
% Cause each worker to create a (hopefully) unique random number, store in
% 'c.Value' per worker.
c = parallel.pool.Constant(@rand);
% Retrieve all values back to the client
allVals = fetchOutputs(parfevalOnAll(@(c) c.Value, 1, c));
% This function, when evaluated on a worker, will indicate which position
% that worker got in the list ...
fcn = @(c) find(allVals == c.Value);
% ... like this:
fetchOutputs(parfevalOnAll(fcn, 1, c))
추가 답변 (1개)
B. S.
2022년 10월 26일
Hi,
Please, how can I use your solution in a thread-based parfor pool to get thread ID ? Basically said, the code looks like the following:
parpool('Threads',8);
parfor i=1:100
A(,:,:,i)=rand(2,2)^i;
Thread_Id(i)= ??? % I want to get thread ID for each i and store them in a vector for later use.
end
Thank you in advance for your kind reply.
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Parallel and Cloud에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!