2011-05-23 121 views
0

我正在使用OpenGL绘图技术和CUDA的组合来执行分析。我想用CUDA生成一个渲染缓冲区,然后用OpenGL对它进行分析。由于缓冲区数量众多,我需要在渲染缓冲区完成后释放内存才能使用CUDA,但缓冲区仍然可用于OpenGL。cudaGraphicsGLRegisterImage在不破坏缓冲区的情况下在CUDA中释放内存

更具体而言,我创建缓冲器与

 
glGenRenderbuffersEXT 
glBindRenderbufferEXT 
glRenderbuferStorageEXT 

我然后用

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

回答

0

我认为你应该做相反的事情。在cuda中创建帧缓冲区,并在OpenGL中注册它们。

opengl和CUDA之间的内存是相同的,仅更改所有者(cuda驱动程序或opengl驱动程序)。另一个缓慢的解决方案是将内存下载到RAM中,并执行步骤 在cuda和opengl之间切换。

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

+0

第一个解决方案听起来不错,但我不知道该怎么做。你能指点我用于在CUDA中创建帧缓冲区然后在OpenGL中注册它的一些功能吗? – Alex 2011-05-25 05:58:57

1

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

相关问题