在 OpenGL 中,经常使用孤立缓冲区。理想情况下,驱动程序会注意到请求相同大小的缓冲区,如果可能的话,如果不再需要则返回旧缓冲区。缓冲区仅在旧缓冲区仍在使用时才分配新内存,并且无法重用。
在 OpenCL (使用最新开发者驱动程序的NVIDIA硬件上)我不确定这项技术。我有一个256kB缓冲区,由c ++包装器引用计数处理,我经常重新分配。大部分时间这种方法都可以,但在某些情况下,OpenCL会在分配新缓冲区时抛出CL_OUT_OF_MEMORY错误。
你认为我应该改变我的方法(例如使用恒定数量的缓冲区)吗?或者我应该调查这个问题的其他可能原因吗?
亲切的问候, 弗洛里安
答案 0 :(得分:1)
OpenCL使用C语义进行内存分配和释放。因此,它不会自动重用缓冲区。您有显式释放缓冲区并稍后分配新缓冲区。或者,手动重用缓冲区似乎是一种好习惯。分配可能是一项非常昂贵的操作。