2014-10-19 131 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

相關問題