2012-02-10 6 views
2

Так я пытаюсь инициализировать переменную в моем OpenCL код хозяина, как это:неспособность инициализировать OpenCL вектор буквальным

cl_float2  es = (cl_float2)(0.0f,0.0f); 

Который, используя Clang 2.9, терпит неудачу с:

source/solveEikonalEq.c:75:38: warning: expression result unused [-Wunused-value] 
cl_float2  es = (cl_float2)(0.0f,0.0f); 
           ^~~~ 
source/solveEikonalEq.c:75:26: error: cast to union type from type 'float' not present in union 
cl_float2  es = (cl_float2)(0.0f,0.0f);    //ray's tangent vector 
        ^  ~~~~~~~~~~~ 

И при использовании GCC 4.6.1, терпит неудачу с:

source/solveEikonalEq.c:75:42: warning: left-hand operand of comma expression has no effect [-Wunused-value] 
source/solveEikonalEq.c:75:26: error: cast to union type from type not present in union 

Я использую OpenCL SDK от AMD, и может построить примеры просто отлично. Что я делаю неправильно?

ответ

5

Вы пытаетесь использовать инициализатор OpenCL C в своем хост-коде, который предположительно скомпилирован с помощью компилятора C. Другими словами, этот стиль инициализации действителен только в ваших ядрах. И там вы бы не использовали тип платформы, но вместо этого использовали бы только float2.

Попробуйте это в хост-кода вместо:

cl_float2 var = { 0.0f, 0.0f }; 

Это будет работать для вас.

+0

Это было -thanks! –