2013-05-29 43 views
1

如果這是一個noob問題,我很抱歉,但我是C++的新手,我弄亂了openCL的一部分原因是爲了學習更多的C++。如何從NVIDEA頭文件訪問cl命名空間?

我安裝了CUDA SDK,並將其放在這裏的OpenCL頭文件:

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\include\CL 

我添加了以下兩個目錄中的附加包括在Visual C目錄++:

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\include 
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\include\CL 

但是當我嘗試引用cl命名空間中的任何內容,like they do in this tutorial它不起作用,因爲cl未定義。

enter image description here

+0

請張貼您的代碼。 你有'使用命名空間cl;'行嗎? – AlexK

+0

使用命名空間cl;給出錯誤「名稱必須是名稱空間」 – user1873073

+1

我認爲你已經下載了C的綁定,而不是C++的。你從哪裏得到這些東西?我沒有安裝CUDA SDK來檢查,但它們可能安裝在其他地方。 – slugonamission

回答

1

這個問題已經得到解決,所以我只寫在這裏添加一些信息。

除了使用Nvidia CUDA SDK,您可以使用Intel或AMD SDK(我更喜歡Intel)。它們都自動包含cl.hpp並支持OpenCL 1.2(Nvidia SDK僅支持OpenCL 1.1)。您可能需要添加#define CL_USE_DEPRECATED_OPENCL_1_1_APIS以確保您的內核在Nvidia設備上可用。

SDK與編譯和運行內核的設備驅動程序無關。這是由供應商的視頻驅動程序完成的。事實上,您可以安裝Nvidia視頻驅動程序,AMD Radeon驅動程序(即使您沒有AMD視頻卡)以及英特爾OpenCL驅動程序。然後你可以用例如編譯你的主機代碼。 Intel OpenCL SDK並在Nvidia GPU和Intel/AMD CPU上運行您的內核。

+0

如果cuda有gl_interop,那麼你可以使用gl空間,然後使用cl_gl interop可以給cuda和opencl之間的鏈接。 –

1

的問題是,nVidia的的的OpenCL框架(與CUDA捆紮)不附帶的C++包裝庫。但幸運的是,其中一個是使用現有的OpenCL C API的頭文件庫。因此,您只需要從Khronos下載official cl.hpp,並將其包含在您的源文件中(在將其放入可訪問的include目錄中後,最好與nVidia的OpenCL標頭一起使用)。事實上,一旦你包含並使用cl.hpp,你不需要包含任何其他頭文件。

但要知道,這個C++包裝只能針對OpenCL 1.1(而絕不是最好的C++封裝一個可以拿出其一),但的nVidia沒有的OpenCL 1.2的支持反正。