У меня есть конвейер OpenCL, который обрабатывает изображения / видео, и иногда он может быть жадным с памятью. Это происходит сбой при распределении cl :: Buffer () следующим образом:
cl_int err = CL_SUCCESS;
cl::Buffer tmp = cl::Buffer(m_context, CL_MEM_READ_WRITE, sizeData, NULL, &err);
с ошибкой -4 - cl_mem_object_allocation_failure
.
Это происходит в фиксированной точке моего конвейера с использованием очень больших изображений. Если я немного уменьшу изображение, оно будет проходить через конвейер в этой части, требующей большого объема памяти.
У меня есть доступ к карточке Nvidia с 4go, которая в определенный момент обанкротилась, а также попробовала на GPU AMD с 2go, который разорялся раньше.
В соответствии с этим потоком нет необходимости знать текущее распределение из-за обмена с VRAM, но, похоже, мой конвейер разрушает память моего устройства.
Так вот мой вопрос:
1) Есть ли на моем компьютере какие-либо настройки или конвейер для установки большего количества VRAM?
2) Можно ли использовать CL_DEVICE_GLOBAL_MEM_SIZE
в качестве ссылки на максимальный размер для выделения, или мне нужно сделать CL_DEVICE_GLOBAL_MEM_SIZE
- (локальная память + личная) или что-то в этом роде?
Согласно моему профилировщику памяти, у меня 92% от CL_DEVICE_GLOBAL_MEM_SIZE
, выделенных при сбое. И, немного изменив размер, конвейер говорит, что я использовал 89% для измененного изображения, и оно прошло, поэтому я предполагаю, что мое большое изображение находится на грани прохождения.