how do I gather() a variable in atomicAdd()?
    조회 수: 8 (최근 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!

