2011-11-26 83 views
1

在将二维数组从CPU转换到GPU的内存以在GPU上运行时,我面临Matlab的内置函数(如minmax(array))中的多个错误,指出我的GPU变量不是数组或单元格:使用MATLAB的函数与CUDA GPU变量

???错误使用==> minmax at 27数据不是矩阵或单元格数组。

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

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

谢谢大家。

+0

如果您切换到夹克,您将能够运行minmax。外套是更好的反正:http://accelereyes.com/compare – arrayfire

回答

1

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

请参阅Parallel Computing Toolbox的this documentation page以了解支持哪些功能的详细信息。您会注意到该列表仅包含基本MATLAB的函数,如算术,指数和三角函数,线性代数和傅立叶变换;与Neural Network Toolbox的高级工具箱功能minmax没有任何关系。

为GPUArray输入重载一个函数,以便它在GPU上而不是CPU上执行,这是一项重要的工作,涉及重新实现新的高度并行体系结构的算法。另外,只有某些类型的高度并行算法通常会受益于GPU并行性。因此,我不希望MathWorks在不久的将来能够在神经网络工具箱中提供GPUArray支持。

如果你特别需要并行minmax在GPU上,而不是在一般的神经网络,它不会那么难做到这一点吧 - 也许只是一对夫妇涉及minmaxarrayfun线。

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

+0

非常感谢,我已经在另一种方式执行minmax在GPU上执行,但minmax是许多错误的开始尝试运行自组织映射(SOM)来自MATLAB的GPU。两者都造成同样的错误,所以我想如果我能得到一个答案,那么其余的将是相同的。 –

+0

太棒了 - 很高兴它似乎有所帮助。如果你认为答案是正确的,那么你可以通过点击投票按钮上的刻度标记来将它标记为已接受吗?这有助于他人找到答案。 –