2014-03-02 58 views
1

AMD只保留了2.9,2.8和2.7版本的SDK online,所有這些版本都適用於OpenCL 1.2。 我想讓我的應用程序與OpenCL 1.1硬件兼容。 由於我堅持使用1.2 SDK並且沒有太多的硬件支持來測試,我想知道什麼是正確的方法來做到這一點?使用AMD APP SDK 2.9創建符合OpenCL 1.1的應用程序?

  1. 我從Khronos網站下載了1.1頭文件,並將它們用於我的MinGW編譯器。 該應用程序在我的ATI GPU上僅使用OpenCL 1.1驅動程序,但我不確定自己是否正確。我有這個疑問,因爲我仍然從OpenCL 1.2的SDK鏈接OpenCL.lib。

  2. 我也應該從我的應用程序SDK分發OpenCL.dll?

  3. 什麼是通過禁用OpenCL代碼以避免在非兼容硬件中error message至少其他所有內容都運行的最佳方法?

回答

2

看看cl.h頭:

每個API函數的宏,定義了它屬於哪個版本:

extern CL_API_ENTRY CL_EXT_PREFIX__VERSION_1_1_DEPRECATED cl_mem CL_API_CALL 
clCreateImage2D(cl_context    /* context */, 
       cl_mem_flags   /* flags */, 
       const cl_image_format * /* image_format */, 
       size_t     /* image_width */, 
       size_t     /* image_height */, 
       size_t     /* image_row_pitch */, 
       void *     /* host_ptr */, 
       cl_int *    /* errcode_ret */) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED; 

因此,爲了使您的應用程序的OpenCL 1.1符合,使用1.1及更高版本的功能。考慮到,可能的函數(如clCreateImage2D)在新的API版本中已被棄用。在這種情況下,您需要定義CL_USE_DEPRECATED_OPENCL_1_1_APIS宏 - 但我不知道這是不是好習慣。

+0

感謝您的建議。現在假設我的應用程序符合OpenCL 1.1並且正常工作。但是,如果它在低於該版本的硬件上運行,它將顯示錯誤消息,我的應用程序將不會啓動。如何禁用不支持OpenCL的硬件? –

+0

應用相同的原則 - 您應該使用版本1.0中的API。所有主要供應商都支持OpenCL 1.1,因此您描述的情況很難成爲 –

+0

@Cool_Coder最簡單的方法是使用clGetPlatformInfo和CL_PLATFORM_VERSION組合來詢問首個支持OpenCL版本的設備。如果它低於您的要求,則打印警告消息並將路徑轉移到C實現。 – Meluha

相關問題