Вопрос о cl_mem в OpenCL - PullRequest
       61

Вопрос о cl_mem в OpenCL

4 голосов
/ 11 октября 2010

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

Ответы [ 2 ]

11 голосов
/ 13 октября 2010

Тип cl_mem является дескриптором «объекта памяти» (как описано в разделе 3.5 спецификации OpenCL 1.1 ).По сути, они являются входами и выходами для ядер OpenCL и возвращаются из вызовов API OpenCL в коде хоста, таком как 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 может выделить место, где она хочет.

6 голосов
/ 11 октября 2010

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

...