Вопрос о синтаксисе использования константного кеша

Привет всем, я не видел много синтаксиса для выделения переменных __constant в OpenCL в руководствах от Nvidia.

Когда я вызываю clCreateBuffer, должен ли я ставить ему флаг CL_MEM_READ_ONLY. Кажется, меня не смущает, что я пока установил CL_MEM_READ_WRITE, хотя держу пари, что попытка записи в константный кеш в ядре что-то испортит.

Есть ли какие-то подводные камни или особые вещи, которые мне нужно помнить на стороне хоста? Если я объявлю аргумент как __constant в коде ядра устройства, то могу ли я использовать константную переменную кеша, пока я не записываю в нее?


person smuggledPancakes    schedule 04.11.2010    source источник


Ответы (1)


Да, это в основном так. Однако вы должны иметь в виду, что постоянный кеш имеет ограничение по размеру в 64 КБ. Поскольку адресное пространство __constant по своей природе доступно только для чтения, компилятор должен пожаловаться, если вы попытаетесь записать в него.

К сожалению, __constant memory немного глючит в реализации NVidia. Иногда компилятор выдает неправильный код, чтение из постоянной памяти просто возвращает ноль. Что касается серии драйверов 260.x, проблема не устранена.

person dietr    schedule 11.11.2010