我正在使用OpenGL处理GPGPU。因此,我有不同的线程将工作交给一个OpenGL处理线程。
在每个“工作项”之后,我需要调用glReadPixels和glMapBuffer,以便将数据从PBO传输回主机。然而,这方面的问题是,glMapBuffer阻塞线程,在DMA传输完成之前无法完成任何有用的工作,即使GPU是空闲的。解决这一问题的通常方法是创建一个具有最长DMA传输时间深度的管道。但是,由于我正在开发一个低延迟系统,这是次优的。
是否有一种方法可以让在单独的线程上等待glMapBuffer,或者可能得到一些通知,说明DMA传输何时完成了,以便尽可能减少延迟?
发布于 2011-05-22 13:41:05
在一个glMapBuffer块之外的其他线程中做一些额外的工作吗?您可以有多个OpenGL上下文,每个上下文在自己的线程中都是活动的;如果它们被配置为共享对象,它们可以同时进行操作。
但是DMA实际上意味着GPU的工作,至少它的带宽是完全消耗的,所以您可能会得到更差的性能。
https://stackoverflow.com/questions/6085061
复制相似问题