Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何在GPU上输出3D阵列中每个切片或页面的总和向量_Matlab_3d_Parallel Processing_Gpu - Fatal编程技术网

Matlab 如何在GPU上输出3D阵列中每个切片或页面的总和向量

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内

我试图在Matlab中完成的过程:

  • 将3D阵列发送到GPU
  • 将每个片或“页”(:,:,i)分发到GPU上的处理器
  • 输出这些总和的向量
  • 将向量返回给CPU

    %我的尝试:
    数组=gpuArray(一(3,3,5));
    Array=pagefun(@sum,Array);
    数组=聚集(数组);
    %所需输出:阵列=9的1x5矢量

  • 这会引发一个错误,即pagefun不喜欢求和函数

    在CPU上,类似的过程也可以正常工作。它在GPU上也可以在FOR循环中工作,但这并不能将过程矢量化以获得理想的速度。CUDA内核是否能够更好地执行类似的操作?有更好的方法吗?这是否更适合集群而不是GPU

    谢谢你的帮助,威尔


    设置: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作为源。您可以在此处使用
    []
    作为维度,让
    重塑
    为您解决问题。