2016-02-21 44 views
1

我有一個問題在的的OpenCL代碼(與AMD-APP SDK 3.0版編譯)用下面的內核代碼的執行:的OpenCL 2.0 - 錯誤:函數「work_group_reduce_add」隱式聲明

__kernel void sumGPU (__global const int *input, 
         __global int *sum) 
{ 
    uint local_id = get_local_id(0); 
    uint group_size = get_local_size(0); 
    uint global_id = get_global_id(0); 

    uint res = input[global_id];   

    // workgroup reduction (introduced in OpenCL 2.0) 
    res = work_group_reduce_add(res); 

    // atomic reduce in global memory 
    if (local_id == 0) 
    atomic_add(sum, res); 
} 

這用於計算所有數組元素的總和。

我得到以下錯誤:

CL Compilation failed: 
"/tmp/OCL32344T1.cl", line 11: error: function "work_group_reduce_add" 
      declared implicitly 
    res = work_group_reduce_add(res); 
     ^

1 error detected in the compilation of "/tmp/OCL32344T1.cl". 
Frontend phase failed compilation. 
Aborted 

看來work_group_reduce_add的是樣機失蹤,但我不能找到它進入的OpenCL 2.0(CL/cl.h)。

任何人都可以看到有什麼問題嗎?謝謝

+0

不知道爲什麼這是獲得downvotes,沒有辦法神奇地知道你需要做一些特殊的事情來獲得2.0的工作像接受的答案告訴你。剛剛有同樣的問題,謝謝你提出這個問題,因爲它最終爲我節省了很多時間。 – pmos

回答

2

爲了在內核中使用OpenCL 2.0功能,您需要通過clBuildProgram-cl-std=CL2.0標誌傳遞給編譯器。

+0

謝謝,上面的錯誤已經消失,但另一個在執行時發生:「CL編譯失敗: 錯誤:aclBinary初始化失敗 中止」 任何想法? – youpilat13

+0

從https://community.amd.com/message/1306688#1306688,我必須得出結論:我的Radeon HD 7970不支持OpenCL 2.0嗎? – youpilat13

+1

是的,這可能是原因。您可以使用'clGetDeviceInfo'和'CL_DEVICE_VERSION'和'CL_DEVICE_OPENCL_C_VERSION'標誌查詢您的設備是否支持OpenCL 2.0。 – jprice

相關問題