【问题标题】:Using MATLAB's function with CUDA GPU variables将 MATLAB 的函数与 CUDA GPU 变量一起使用
【发布时间】:2012-01-06 22:18:02
【问题描述】:

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

???在 27 处使用 ==> minmax 时出错数据不是矩阵或元胞数组。

虽然传入的变量是转换后的二维数组,但是类型从<11x4096 double>变成了<11x4096 parallel.gpu.GPUArray>

谁能帮我让 Matlab 明白 GPU 变量是一个数组?

谢谢大家。

【问题讨论】:

标签: arrays matlab cuda gpu


【解决方案1】:

对于存储在 GPU 上的数组(即 GPUArray 类型的数组),仅支持一小部分 MATLAB 命令。

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

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

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

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

【讨论】:

  • 非常感谢,我已经以另一种方式实现了 minmax 以在 GPU 上执行,但 minmax 是许多错误的开始,这些错误是由于尝试在 MATLAB 上运行自组织映射 (SOM) 而导致的显卡。两者都导致了同样的错误,所以我想如果我能得到一个答案,那么其余的都是一样的。
  • 太棒了 - 很高兴它似乎有所帮助。如果您认为答案是正确的,您能否通过单击投票按钮上的勾号将其标记为已接受?这有助于其他人找到答案。
猜你喜欢
  • 2021-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-20
  • 2019-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多