2014-01-25 182 views
0

我是OpenCL的新手,並且已經關注了this tutorial以開始使用。創建cl::Context之前,教程將創建三個cl_context_properties靜態數組,它並不能說明它是什麼,但將其作爲在cl::Context構造的性能說法。OpenCL:cl :: Context構造函數中的屬性參數是什麼?

然而,當看着the reference page for cl::Context,沒有解釋什麼屬性參數是,但它確實表示它「保留並且必須爲零」。那麼爲什麼教程發送一個非零值作爲該參數?它的用途是什麼?如果你之前能夠通過這個論點,它是如何突然被「保留」的,這不會使OpenCL不向後兼容嗎?

代碼編譯並運行良好,無論有沒有參數。唯一的區別是我得到一個警告,cprops未使用時,NULL而不是cprops

而且,當我通過CL_DEVICE_TYPE_CPU | CL_DEVICE_TYPE_GPU作爲類型參數的構造函數cl::Context,我的應用程序會崩潰(SIGSEGV)當我後來嘗試創建與上下文cl::Buffer。爲什麼?我無法指定多個設備類型同時使用嗎?

更新:通過賦予NULL的性能參數的構造函數cl::Context,變量platformList突然不能使用了相關的任何東西的OpenCL。本教程似乎用platformList指定該cl::Context要創建的平臺,但現在的上下文是這樣剛創建:

cl::Context context(
       CL_DEVICE_TYPE_GPU, 
       NULL, 
       NULL, 
       NULL, 
       &err); 

所以我沒有得到指定的平臺。我不應該這樣做嗎?它是如何發生的當我的教程似乎在做這件事時我不能這麼做?

回答

0

有關您的第一個問題,請參閱官方OpenCL文檔以獲取該參數的說明:http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/。這是C API,但它與C++ API相同。

至於你的第二個問題 - 你可能想檢查創建上下文的錯誤結果,看看它爲什麼不喜歡你指定的類型參數。

+0

謝謝。創建上下文時我沒有遇到任何錯誤,這就是爲什麼程序可以繼續並創建緩衝區,否則它會退出。這也是他們在教程中所做的。 – HelloGoodbye

相關問題