Итак, я хочу определить структуру, которая может использоваться как на хосте, так и на устройстве в openCL, который использует встроенные типы данных openCL float4.cl_float4 на хосте и float4 на устройстве в openCL
На стороне хоста структура имеет тип cl_float4, но на устройстве это просто float4.
Так что, если я создаю-структуру, как это ...
typedef struct
{
cl_float4 a, b;
} MyStruct;
... и затем попытаться передать эту структуру в ядро (через буфер) Я получаю сообщение об ошибке.
Если я объявляю его следующим образом ...
... что будет работать на устройстве, но не работает на хосте.
Итак, есть ли способ получить его, чтобы я мог использовать openCLs, встроенные в векторные типы по обе стороны моей программы в рамках одной и той же структуры?
Макрос __OPEN_CL_C_VERSION__ не работает. Моя структура объявлена в файле .h, который я передаю в clProgram, используя clCreateProgramWithSource. Когда я включаю «#ifndef __OPENCL_C_VERSION typedef cl_float4 float4 #endif», мой код ядра (файлы .cl) создает ошибку компилятора, говоря, что он не распознает cl_float4, что странно, потому что, поскольку я помещаю в макрос, он не должен даже видеть, что. __OPENCL_C_VERSION__ не универсальный макрос? Пытаться выполнить флаг компилятора в clBuildProgram также не работает. – user1782677
Да, '__OPENCL_C_VERSION__' обязательно должен определяться каждым компилятором OpenCL.Какую платформу/устройство вы используете? – jprice
Я нахожусь в macbook pro. Intel, графический процессор Intel HD Graphics 4000 и графический процессор NVIDIA GeForce GT 650m. Использование openCL версии 1.2, и я строю на Xcode. – user1782677