2014-05-12 130 views
0

我嘗試啓動至少有很多參數的空內核,但在函數enqueueNDRangeKernel中出現內存訪問衝突。請檢查我的代碼,也許我錯過了一些東西或者只是不知道。OpenCL中的訪問衝突錯誤enqueueNDRangeKernel

主機代碼: https://dl.dropboxusercontent.com/u/71256314/main.cpp 起初去一些初始化,然後我創建緩衝區,然後設置參數。沒有錯誤出現。它在第一次enqueueNDRangeKernel函數調用時崩潰。

內核代碼: https://dl.dropboxusercontent.com/u/71256314/baum_kernel.cl 即使內核爲空,它也不起作用。

緩衝區的一些問題我猜,但沒有錯誤返回。

版本: AMD APP SDK 2.8版 - AMD催化劑™12.10(9.002) GPU:ATI的Mobility Radeon HD 5650

+1

檢查編譯和庫鏈接。這看起來像程序沒有正確鏈接到OpenCL。 API不應該以這種方式崩潰。 – DarkZeros

+0

@DarkZeros我不認爲這是問題。我在VS 2012中設置了項目,就像它在這裏描述的一樣(對於x64系統): http://kode-stuff.blogspot.ru/2012/11/setting-up-opencl-in-visual-studio_1.html I試圖用這種配置運行簡單的helloworld示例,並且它們運行良好。 –

+0

Sry告訴你他們放置的Hello world示例是無用的,只是調用一個不運行的OpenCL函數(只返回一些ID)。即使它起作用,鏈接也可能是錯誤的。您遇到的錯誤的典型問題是鏈接錯誤的庫版本或以錯誤的方式動態加載它。 – DarkZeros

回答

1

1)問題是行

err = kernel.setArg(11, Otr); checkErr(err, "Kernel::setArg()11"); 

我是路過指向浮動Otr而不是將相應的OpenCL緩衝區Otr_b傳遞給setArg函數。 OpenCL一直在試圖將指針複製到期望緩衝區的內核。毫無疑問存在訪問違規錯誤。


2)DarkZeros提到的另一個重要的一點:檢查你的庫鏈接,也ATI驅動程序和AMD APP SDK版本之間的對應關係。以下是列出驅動程序和SDK兼容性的鏈接:Versions of AMD APP SDK。我的情況是我的AMD APP SDK v2.8.1與12.10(9.002)驅動程序不兼容。我最終安裝了v2.8.0版本。