使用MATLAB的函数与CUDA GPU变量

时间:2011-11-26 14:45:55

标签: arrays matlab cuda gpu

将2D阵列从CPU转换到GPU的内存以在GPU上运行后,我面临来自Matlab的内置函数minmax(array)的多个错误,表明我的GPU变量不是数组或单元格:

  

???使用==>时出错minmax at 27 Data不是矩阵或单元阵列。

虽然传递的变量是转换后的2D数组,但类型已从<11x4096 double>更改为<11x4096 parallel.gpu.GPUArray>

任何人都可以帮我让Matlab明白GPU变量是一个数组吗?

谢谢大家。

1 个答案:

答案 0 :(得分:1)

GPU上存储的数组(即GPUArray类型的数组)只支持一小部分MATLAB命令。

有关支持哪些功能的详细信息,请参阅Parallel Computing Toolbox中的this documentation page。您会注意到该列表仅包含基本MATLAB的函数,如算术,指数和三角函数,线性代数和傅里叶变换;与神经网络工具箱中的minmax等高级工具箱功能无关。

重载GPUArray输入的函数,使其在GPU而不是CPU上执行,是一项重要工作,涉及为新的高度并行架构重新实现算法。此外,只有某些类型的高度并行算法通常会受益于GPU并行性。因此,我不希望MathWorks在神经网络工具箱中提供GPUArray支持。

如果你特别需要在GPU上并行化minmax,而不是一般的神经网络,那么你自己也不会那么难 - 可能只是涉及min的几行, maxarrayfun

话虽如此,错误消息可以提供更多的问题解释。看起来开发人员也知道这一点:如果您输入edit nntype.data并查看第93行(错误消息来自哪里),您会看到注释行% TODO - More detailed response。尼斯!