how do I gather() a variable in atomicAdd()?
3 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
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 Commenti
Risposta accettata
m4 Chrennikov
il 22 Mar 2012
Try this:
[c, ato] = feval(gpuadd, c,ato,b);
out = gather(ato);
0 Commenti
Più risposte (1)
Vedere anche
Categorie
Scopri di più su GPU Computing in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!