我正在渲染一个特定的场景到屏幕外的帧缓冲区(FBO),然后我使用glReadPixels()读取渲染的图像,以便在CPU上处理。处理包括一些非常简单的扫描例程和数据提取。
在分析之后,我意识到我的应用程序所做的大部分时间都花在了glReadPixels()上--超过50%的时间。因此,自然的一步是将处理转移到GPU,这样就不必复制数据。
所以我的问题是-在GPU上编程的最好方法是什么?
GLSL?
库达?
还有什么我现在不知道的吗?
主要要求是它可以访问渲染的屏幕外帧缓冲区(或者纹理数据,因为它可以渲染到纹理),并且能够向CPU输出一些信息,比如每帧1-2Kb的顺序。
发布于 2008-12-15 19:23:25
您可能会发现"Intro to GPU programming“问题中的答案很有用。
-Adam
发布于 2008-12-27 20:19:38
在其他问题中,有许多指向GPU编程入门的指针,但如果您有一个已经使用OpenGL构建的应用程序,那么您的问题可能真的是“哪个应用程序将与OpenGL互操作”?
毕竟,您要做的就是避免使用glReadPixels()将FBO从GPU读回CPU的开销。例如,如果您无论如何都要读回数据,然后将数据复制到CUDA缓冲区,然后使用CUDA API将其传输回gpu,那么就没有太多意义了。
因此,您需要一个GPGPU包,它将直接接受您的OpenGL FBO对象作为输入,而不需要任何额外的复制。
这可能会排除除GLSL之外的所有内容。
我不能100%确定CUDA是否有任何方法可以直接操作OpenGL buffer对象,但我不认为它有那个特性。
我确信ATI的Stream SDK不能做到这一点。(尽管它将与DirectX互操作。)
我怀疑带有计算着色器的DirectX 11“技术预览版”也有这个功能。
CUDA:后续:看起来,至少是最新的版本,有一些对OpenGL互操作性的支持。如果是这样的话,这可能是你最好的选择。
发布于 2013-05-22 03:54:33
我最近找到了这个Modern GPU
https://stackoverflow.com/questions/369411
复制相似问题