我想在Matlab中完成的过程:
将矢量返回到CPU
% My stab at it:
Array = gpuArray(ones(3,3,5));
Array = pagefun(@sum,array);
Array = gather(Array);
% Desired output: Array = 1x1x5 vector of 9's
这会引发一个错误,即pagefun不喜欢求和函数。
在CPU上,类似的过程工作得很好。它在GPU上也可以在FOR循环中工作,但这并不能使过程呈现理想速度。 CUDA内核是否能更好地做这样的事情?有一个更好的方法吗?这更适合群集而不是GPU吗?
帮助表示赞赏,
设置:华硕i7 quadcore,GTX Geforce 960运行CUDA驱动程序
答案 0 :(得分:2)
嗯,你可以尝试更丑陋的方式:
Array = reshape(sum(Array(:,:)), 1, 1, k); %k is whatever third dimension is
答案 1 :(得分:0)
我找到了解决方案并将其发布到了matlab论坛here
答案 2 :(得分:0)
这是我的回答,我也发布了MATLAB答案。
array = ones(3, 3, 5, 'gpuArray');
result = sum(reshape(array, [], size(array, 3)));
result = gather(reshape(result, 1, 1, []));