這是關於openCL編譯時參數的問題。 我有固定大小的常數的陣列,並且我將它作爲編譯時參數,如下所示:AMD編譯時參數錯誤
-DCOEFF=0.1f,0.2f,0.5f,0.2f,0.1f
而在內核,我讀它作爲,
__kernel void Smoothing(__global const float *in, __global float *out)
{
float chnWeight[] = {COEFF};
}
這樣,使用intel-SDK,與將係數作爲內核的另一個參數傳遞相比,我獲得了相當大的性能優勢。
問題出在AMD上,這是沒有得到編譯。我收到以下錯誤:
0.2f:
Catastrophic error: cannot open source file "0.2f"
1 catastrophic error detected in the compilation of "0.2f".
Compilation terminated.
據我所知,在AMD(逗號)也作爲對編譯時間參數的分隔符,這是造成錯誤。
任何幫助解決這個問題將不勝感激。提前致謝。
這同時使用英特爾和AMD的OpenCL爲我工作。我的AMD opencl版本是「OpenCL 1.2 AMD-APP(937.2)」。什麼版本產生這個錯誤? – ScottD
我使用OpenCL 1.2 AMD-APP(1311.2) – Neeba
我切換到了我能找到的最新AMD Windows OpenCL(OpenCL 1.2 AMD-APP(1268.1)),現在我遇到了與您完全相同的問題。我所知道的只是使用一個較老的OpenCL,或者是一個有些醜陋的解決方法,比如用'-DCOEFF0 = 0.1f -DCOEFF1 = 0.2f -DCOEFF2 = 0.5f -DCOEFF3 = 0.2f -DCOEFF4 = 0.1f'編譯以及使用C代碼:'float chnWeight [] = {COEFF0,COEFF1,COEFF2,COEFF3,COEFF4};' – ScottD