how do I gather() a variable in atomicAdd()?
조회 수: 2 (최근 30일)
이전 댓글 표시
I am just wondering how to return result from atomicAdd(), since atomicAdd only changes one of its inputs. Here is my kernel (CUDA C):
__global__ void agpuhelloworld( double* c, double ato, double b ) {
*c = ato + b;
atomicAdd(&ato, b);
}
I know how to collect c, but how do I collect value of ato from this kernel with a MATLAB script? I cannot declare that as persistent, because ato is one of the inputs to MATLAB function. Following is my MATLAB code, I think it is something like that. I only show how to gather() c.
function out = gpuhelloworld(ato,b)
persistent gpuadd;
persistent c;
if isempty(gpuadd)
disp 'Initializing GPU drf calculation...';
gpuadd = parallel.gpu.CUDAKernel('agpuhelloworld.ptx','agpuhelloworld.cu','agpuhelloworld');
tmp = gpuDevice;
gpuadd.GridSize = [min(1024,tmp.MaxGridSize(1)) 1]; % min(1024, maxblocks)
gpuadd.ThreadBlockSize = [min(128,tmp.MaxThreadsPerBlock) 1 1]; % min(128, maxthreadsperblock)
c = gpuArray(zeros(1,1));
end;
c= feval(gpuadd, c,ato,b);
out = gather(c);
댓글 수: 0
채택된 답변
추가 답변 (1개)
참고 항목
카테고리
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!