Должен ли я осиротеть буфера OpenCL? - PullRequest
1 голос
/ 18 января 2011

В OpenGL это обычная практика для бесхозных буферов, которые часто используются.В идеале драйверы замечают, что запрашивается буфер одинакового размера, и, если возможно, возвращают старый буфер, если он больше не нужен.Буфер выделяет новую память только тогда, когда старый буфер все еще используется и не может быть повторно использован.

In OpenCL (на оборудовании NVIDIA с использованием последних драйверов разработчиков), я не уверен вэта техника.Я получил буфер 256 КБ, который обрабатывается пересчетом обёртки c ++, который я часто перераспределяю.В большинстве случаев это работает нормально, но в некоторых случаях OpenCL генерирует ошибку CL_OUT_OF_MEMORY при выделении нового буфера.

Как вы думаете, должен ли я переключить свой подход (например, используя постоянное количество буферов)?Или мне следует заняться другой возможной причиной этой проблемы?

С уважением, Флориан

1 Ответ

1 голос
/ 23 января 2011

OpenCL использует семантику C для выделения и освобождения памяти.Таким образом, он не будет автоматически повторно использовать буферы.У вас есть , чтобы явно освободить буфер и выделить новый буфер позже.В качестве альтернативы целесообразно повторно использовать буферы вручную.Выделение может быть довольно дорогой операцией.

...