Вопрос про cl_mem в OpenCL

Я использовал cl_mem в некотором своем шаблонном коде OpenCL, но я использовал его через контекст, а не четкое понимание того, что именно это такое. Я использовал его в качестве типа памяти, которую я вставляю и вынимаю из платы, которая до сих пор была плавающей. Я попытался просмотреть документы OpenCL, но cl_mem не отображается (не так ли?). Есть ли документация по нему, или это просто и может кто-нибудь объяснить.


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


Ответы (2)


Для компьютера cl_mem — это число (например, обработчик файлов для Linux), зарезервированное для использования в качестве «идентификатора памяти» (API/драйвер, который хранит информацию о вашей памяти под этим номером, знает, что он хранит/как он большой и все такое)

person Quonux    schedule 11.10.2010

Тип cl_mem является дескриптором «объекта памяти» (как описано в разделе 3.5 документа Спецификация OpenCL 1.1). По сути, это входные и выходные данные для ядер OpenCL, которые возвращаются из вызовов OpenCL API в основном коде, таком как clCreateBuffer.

cl_mem  clCreateBuffer (cl_context context, cl_mem_flags flags,
                            size_t size, void *host_ptr, cl_int *errcode_ret) 

Представленным областям памяти могут быть разрешены различные шаблоны доступа, например. Только для чтения или размещаться в разных областях памяти, в зависимости от флагов, установленных в вызовах создания буфера.

Дескриптор обычно сохраняется, чтобы позволить более позднему вызову освободить память, например:

cl_int  clReleaseMemObject (cl_mem memobj)  

Короче говоря, он обеспечивает абстракцию того, где на самом деле находится память: вы можете копировать данные в связанную память или обратно через API-интерфейсы OpenCL clEnqueueWriteBuffer и clEnqueueReadBuffer, но реализация OpenCL может выделять пространство там, где она хочет.

person grrussel    schedule 12.10.2010