Hello all,
I am trying to figure out whether/how to use a reduction variable as the output of an arrayfun performed on the GPU. The basic problem is something of the form.
x = zeros(bigNumber,1);
for i = 1:I
x = x + f(i,argin);
end
where bigNumber makes x a large vector, f is some function, and argin are the arguments of that function. Now, using parfor, I can actually run this on the cpu in a manner where x is a reduction variable. However, I want to be able to run this on the GPU. Normally I would do something like:
function x = mainFun()
x = gpuArray.zeros(bigNumber,1);
v = arrayfun(@(i) loopedFun(gpuArray(i),args), 1:N,'UniformOutput',false)
v = sum(cat(2,v{:}),2);
x = x + v
end
function v = loopedFun(i,args)
v = someFunction(i,args);
end
This typically works, but since we are creating a [bigNumber,N] matrix in the intermediate stage this can rapidly fill up memory and become a huge computational burden in concatenation and summation stage. It should be far more efficient if I can initialize x as a reduction variable, and allow arrayfun to write to it in the same OOp independent manner that parfor would. However, I cannot find any examples of this type of operation. SO:
- Is using reduction variables possible on the gpu, using something like arrayfun,cellfun, etc.?
- What is the syntax, if it is? Reduction variables in parfor are pretty sensitive to syntax.
Thanks, -Dan
0 件のコメント
サインインしてコメントする。