【问题标题】:Do work instead of waiting for glMapBuffer做工作而不是等待 glMapBuffer
【发布时间】:2011-05-21 23:24:48
【问题描述】:

我正在使用 OpenGL 进行一些 GPGPU 处理。所以我有不同的线程给 OpenGL 处理线程工作。

在每个“工作项”之后,我需要调用 glReadPixels 和 glMapBuffer 以便将数据从 PBO 传输回主机。然而,问题在于 glMapBuffer 会阻塞线程,并且在 DMA 传输完成之前无法完成任何有用的工作,即使 GPU 处于空闲状态也是如此。解决这个问题的常用方法是创建一个时间深度为最长 DMA 传输的流水线。但是,由于我正在开发一个低延迟系统,所以这是次优的。

有没有办法在单独的线程上等待 glMapBuffer,或者获得一些关于 DMA 传输何时完成的通知,以减少延迟,因为尽可能多?

【问题讨论】:

    标签: c++ opengl gpgpu low-latency


    【解决方案1】:

    除了 glMapBuffer 块之外,是否在其他线程中做一些额外的工作?您可以拥有多个 OpenGL 上下文,每个上下文都在自己的线程中处于活动状态;如果它们被配置为共享对象,则它们可以同时操作。

    然而,DMA 实际上意味着 GPU 工作,至少它的带宽被完全消耗,因此您最终可能会得到更差的性能。

    【讨论】:

      猜你喜欢
      • 2017-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-07
      • 1970-01-01
      相关资源
      最近更新 更多