Matlab 如何在GPU上输出3D阵列中每个切片或页面的总和向量
我试图在Matlab中完成的过程:Matlab 如何在GPU上输出3D阵列中每个切片或页面的总和向量,matlab,3d,parallel-processing,gpu,Matlab,3d,Parallel Processing,Gpu,我试图在Matlab中完成的过程: 将3D阵列发送到GPU 将每个片或“页”(:,:,i)分发到GPU上的处理器 输出这些总和的向量 将向量返回给CPU %我的尝试: 数组=gpuArray(一(3,3,5)); Array=pagefun(@sum,Array); 数组=聚集(数组); %所需输出:阵列=9的1x5矢量 这会引发一个错误,即pagefun不喜欢求和函数 在CPU上,类似的过程也可以正常工作。它在GPU上也可以在FOR循环中工作,但这并不能将过程矢量化以获得理想的速度。CUDA内
%我的尝试:
数组=gpuArray(一(3,3,5));
Array=pagefun(@sum,Array);
数组=聚集(数组);
%所需输出:阵列=9的1x5矢量
设置:ASUS i7 quadcore,GTX Geforce 960运行CUDA驱动程序好吧,你可以尝试更丑陋的方式:
Array = reshape(sum(Array(:,:)), 1, 1, k); %k is whatever third dimension is
我找到了解决方案并将其发布到matlab论坛以下是我的答案,我也将其发布在matlab答案上
array = ones(3, 3, 5, 'gpuArray');
result = sum(reshape(array, [], size(array, 3)));
result = gather(reshape(result, 1, 1, []));
仅包含重定向到可能解决方案的URL的答案不是Stackoverflow的最佳实践。如果URL发生更改,其他有相同问题的用户将无法找到解决方案。最好在答案中详细说明解决方案本身,同时保留URL作为源。您可以在此处使用
[]
作为维度,让重塑
为您解决问题。