将2D阵列从CPU转换到GPU的内存以在GPU上运行后,我面临来自Matlab的内置函数minmax(array)
的多个错误,表明我的GPU变量不是数组或单元格:
???使用==>时出错minmax at 27 Data不是矩阵或单元阵列。
虽然传递的变量是转换后的2D数组,但类型已从<11x4096 double>
更改为<11x4096 parallel.gpu.GPUArray>
。
任何人都可以帮我让Matlab明白GPU变量是一个数组吗?
谢谢大家。
答案 0 :(得分:1)
GPU上存储的数组(即GPUArray类型的数组)只支持一小部分MATLAB命令。
有关支持哪些功能的详细信息,请参阅Parallel Computing Toolbox中的this documentation page。您会注意到该列表仅包含基本MATLAB的函数,如算术,指数和三角函数,线性代数和傅里叶变换;与神经网络工具箱中的minmax
等高级工具箱功能无关。
重载GPUArray输入的函数,使其在GPU而不是CPU上执行,是一项重要工作,涉及为新的高度并行架构重新实现算法。此外,只有某些类型的高度并行算法通常会受益于GPU并行性。因此,我不希望MathWorks在神经网络工具箱中提供GPUArray支持。
如果你特别需要在GPU上并行化minmax
,而不是一般的神经网络,那么你自己也不会那么难 - 可能只是涉及min
的几行, max
和arrayfun
。
话虽如此,错误消息可以提供更多的问题解释。看起来开发人员也知道这一点:如果您输入edit nntype.data
并查看第93行(错误消息来自哪里),您会看到注释行% TODO - More detailed response
。尼斯!