Я использую cl_mem в некоторых своих шаблонах OpenCL, но я использую его через контекст, а не для того, чтобы точно понять, что именно. Я использую его как тип памяти, на которую я нажимаю и закрываю плату, которая до сих пор плавает. Я попытался посмотреть документы OpenCL, но cl_mem не появляется (не так ли?). Есть ли на нем документация, или это просто и может кто-то объяснить.Вопрос о cl_mem в OpenCL
ответ
Для компьютера cl_mem является номером (например, обработчиком файлов для Linux), который зарезервирован для использования в качестве «идентификатора памяти» (API/драйвер хранит информацию о вашей памяти под этим номером, что он знает, что он держится/насколько он велик и тому подобное)
Тип cl_mem - это дескриптор объекта памяти (как описано в разделе 3.5 раздела OpenCL 1.1 Spec). Они по существу являются входы и выходы для 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 может выделять пространство, в котором оно хочет.