2014-10-19 132 views
-1

因此,我运行矩阵乘法OpenCL代码, 问题是相同的代码,在GPU中运行像一个魅力,但给CPU的错误。 的错误即时得到的是:抛出错误'std :: bad_alloc',OpenCL对于CPU而不是GPU

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

使用从这个链接被引用的代码IM,

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

我做了细微的变化按我的要求,otherwse代码是非常相同。 任何人都可以帮我解决错误的原因。

在此先感谢

+1

这看起来不像C程序会给你的错误。 C dos没有例外或命名空间。 – 2014-10-19 16:19:12

+0

它的OpenCL for CPU – 2014-10-19 18:32:03

回答

0

在内核执行之前,期间或之后抛出此异常吗?你能缩小这个例外被抛出的线吗?

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

+0

在内核执行之前引发异常,是的,我在大型数组上运行它,但是即使当我试图在较小的阵列上运行它时,它也会提供相同的问题。 – 2014-10-20 01:58:39

+0

你能指出_exactly_抛出异常的地方(即什么行)?如果不知道代码中哪里出现这个问题,就很难得到很多帮助。 – 2014-10-20 13:02:11

相关问题