我正在开发一个项目,该项目使用OpenGL绘图技术和CUDA的组合来执行分析。我想使用CUDA生成渲染缓冲区,然后使用OpenGL对其进行分析。由于缓冲区的数量,我需要在渲染缓冲区完成后使内存从CUDA中释放,但缓冲区仍可用于OpenGL。
更具体地说,我使用
创建缓冲区glGenRenderbuffersEXT glBindRenderbufferEXT glRenderbuferStorageEXT
然后我使用
cudaGraphicsGLRegisterImage在CUDA中注册它们,它使用来自CUDA的内存。但是,当我使用
cudaGraphicsUnregisterResource取消注册渲染缓冲区时,内存不会被释放。我不想用
glDeleteBuffers销毁缓冲区,因为我仍然需要它们进行计算,但还需要使用CUDA来处理其他缓冲区。我是否可以执行其他一些CUDA调用以释放此内存而不会破坏缓冲区?
答案 0 :(得分:1)
你说,cudaGraphicsRegisterImage“使用来自CUDA的记忆”,但你测量了多少?使用CUDA注册缓冲区就是这样 - 它只是通知OpenGL驱动程序CUDA也希望看到缓冲区。内存成本应该非常适中。
答案 1 :(得分:0)
我认为你应该这样做。在cuda中创建帧缓冲区并在OpenGL中注册它们。
opengl和CUDA之间的内存是相同的,只更改所有者(cuda驱动程序或opengl驱动程序)。
另一个缓慢的解决方案是将内存下载到RAM中并逐步进行处理 在cuda和opengl之间切换。
第三种解决方案是买一张内存更多的卡。