2013-10-15 5 views
0

Это относится к аргументу времени компиляции в 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 (запятая) также принимается в качестве разделительного символа для аргументов во время компиляции, и это вызывает ошибку.

Любая помощь для решения этой проблемы будет оценена по достоинству. Заранее спасибо.

+0

Это работает для меня, используя как Intel и AMD OpenCL. Моя версия AMD opencl - «OpenCL 1.2 AMD-APP (937.2)». Какая версия создает эту ошибку? – ScottD

+0

Я использую OpenCL 1.2 AMD-APP (1311.2) – Neeba

+0

Я переключился на новейшую 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

ответ

0

Эта проблема была введена в AMD OpenCL где-то между версиями 937.2 и 1268.1. Вот обходным:

Заменить -DCOEFF=0.1f,0.2f,0.5f,0.2f,0.1f с -D COEFF=0.1f,0.2f,0.5f,0.2f,0.1f

+0

Спасибо за это обходное решение. Я тестировал эту работу в Intel и NVDIA, и везде она работает нормально. – Neeba

0

Try со ссылкой на строке -DCOEFF="0.1f,0.2f,0.5f,0.2f,0.1f"

Похоже, что компилятор ищет файл «0.2f» и это второй элемент, поэтому после первого элемента и запятой компилятор уже перестал интерпретируя вход как определено в определении COEFF.

+0

Используя этот способ, исключается сообщение об ошибке. Но в ядре он потерпит неудачу: 'float chnWeight [] = {COEFF}'. – Neeba

+0

Не могли бы вы опубликовать журнал ошибок компилятора в 'float chnWeight [] = {COEFF}'? – DarkZeros

+0

строка (171) Ошибка OpenCL: сбой CLBuildProgram с [CL_BUILD_PROGRAM_FAILURE]. На самом деле, в ядре, я пытаюсь использовать данные в 'chnWeight []', потом. – Neeba

Смежные вопросы