cudaGraphicsGLRegisterImage之后的CUDA中的可用内存,而不会破坏缓冲区

时间:2011-05-23 15:48:11

标签: opengl cuda

我正在开发一个项目,该项目使用OpenGL绘图技术和CUDA的组合来执行分析。我想使用CUDA生成渲染缓冲区,然后使用OpenGL对其进行分析。由于缓冲区的数量,我需要在渲染缓冲区完成后使内存从CUDA中释放,但缓冲区仍可用于OpenGL。

更具体地说,我使用

创建缓冲区
glGenRenderbuffersEXT
glBindRenderbufferEXT
glRenderbuferStorageEXT

然后我使用

cudaGraphicsGLRegisterImage
在CUDA中注册它们,它使用来自CUDA的内存。但是,当我使用
cudaGraphicsUnregisterResource
取消注册渲染缓冲区时,内存不会被释放。我不想用
glDeleteBuffers
销毁缓冲区,因为我仍然需要它们进行计算,但还需要使用CUDA来处理其他缓冲区。我是否可以执行其他一些CUDA调用以释放此内存而不会破坏缓冲区?

2 个答案:

答案 0 :(得分:1)

你说,cudaGraphicsRegisterImage“使用来自CUDA的记忆”,但你测量了多少?使用CUDA注册缓冲区就是这样 - 它只是通知OpenGL驱动程序CUDA也希望看到缓冲区。内存成本应该非常适中。

答案 1 :(得分:0)

我认为你应该这样做。在cuda中创建帧缓冲区并在OpenGL中注册它们。

opengl和CUDA之间的内存是相同的,只更改所有者(cuda驱动程序或opengl驱动程序)。

另一个缓慢的解决方案是将内存下载到RAM中并逐步进行处理 在cuda和opengl之间切换。

第三种解决方案是买一张内存更多的卡。