【问题标题】:throwing error 'std::bad_alloc', OpenCL For CPU and not GPU抛出错误'std::bad_alloc',OpenCL 用于 CPU 而不是 GPU
【发布时间】:2014-12-14 15:43:36
【问题描述】:

所以我正在运行矩阵乘法 OpenCL 代码, 问题是相同的代码,在 GPU 中运行起来就像一个魅力,但给出了 CPU 的错误。 我得到的错误是:

terminate called after throwing an instance of 'std::bad_alloc'
   what():  std::bad_alloc
 Command terminated by signal 6

我正在使用的代码从此链接中引用,

http://gpgpu-computing4.blogspot.com/2009/09/matrix-multiplication-2-opencl.html

我已根据我的要求进行了细微的更改,其他代码几乎相同。 谁能帮我看看为什么会出现错误。

提前致谢

【问题讨论】:

  • 这看起来不像 C 程序会给你的错误。 C 没有异常或命名空间。

标签: c exception opencl gpu gpgpu


【解决方案1】:

这个异常是在内核执行之前、期间还是之后抛出的?你能缩小抛出这个异常的范围吗?

您是在大型阵列上运行它吗?想到的一件事是,当您在 CPU 上启动时内存不足。起初这可能看起来很奇怪,因为您的 CPU 可能比 GPU 拥有更多可用内存,但请记住,如果您在 CPU 上执行,您会将每个缓冲区存储在 CPU 内存中两次 - 一次用于主机端设置代码,一次用于设备端内核代码。另一方面,如果您在 GPU 上执行,那么您的主 CPU 内存保存缓冲区的一个副本(主机端),而您的 GPU 内存保存另一个副本(由设备上的内核使用)。基本上,当 CPU 运行 OpenCL 内核时,它既是主机又是设备,因此请确保所有缓冲区(主机端和设备端)都适合它的内存。

【讨论】:

  • 在内核执行之前抛出异常,是的,我在一个大数组上运行它,但即使我试图在较小的数组上运行它,它也会出现同样的问题。
  • 你能指出确切异常是在哪里引发的(即哪一行)?如果不知道这个问题出现在代码中的哪个位置,很难提供很多帮助。
猜你喜欢
  • 2012-08-08
  • 1970-01-01
  • 2012-08-24
  • 1970-01-01
  • 2016-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多