Возможно ли освободить память хоста, созданную clEnqueueMapBuffer
?Очистка буфера OpenCL clEnqueueMapBuffer
Например, создать буферную память и карта хоста:
cl_mem buffer = clCreateBuffer(...);
float* dataPtr = (float*)clEnqueueMapBuffer(...,buffer,...);
У некоторых OpenCL материал, а затем очистки:
clEnqueueUnmapMemObject(...,buffer,(void *)dataPtr,...);
clReleaseMemObject(buffer);
Однако, на данный момент dataPtr
не является нулевым. Как вы освобождаете память на хосте, выделенном clEnqueueMapBuffer
? Удалить и бесплатно не работать, и я не могу найти ничего в документации OpenCL, которая предоставляет средства для освобождения буфера.
Джеймс, спасибо за ваш вклад. Я пошел вперед и сделал небольшой вычислительный эксперимент, чтобы увидеть, что на самом деле происходит в физической памяти на хосте. Оказывается, clEnqueueMapBuffer фактически выделяет память. Также выясняется, что clEnqueueUnmapMemObject фактически освобождает эту память и просто не устанавливает указатель на нуль. – SimpleLikeAnEgg
Действительно ли это распределение памяти, или просто резервирование некоторого пространства виртуальной памяти, которое может выглядеть как выделение памяти? –
Это фактически распределение памяти. Используя диспетчер задач в Windows, я смог отслеживать объем использования физической памяти каждый раз, когда я создал буфер карты. Нет ничего особенного в float *, который позволил бы ему напрямую записываться в память устройства. Фактически, вы должны вызвать clEnqueueWriteBuffer до того, как хост-буфер будет передан на устройство. – SimpleLikeAnEgg