做工作而不是等待glMapBuffer
Do work instead of waiting for glMapBuffer
我正在使用OpenGL进行一些GPGPU处理。所以我有不同的线程为 OpenGL 处理线程提供服务。
在每个"工作项"之后,我需要调用glReadPixel和glMapBuffer,以便将数据从PBO传输回主机。然而,这样做的问题是glMapBuffer会阻塞线程,并且在DMA传输完成之前无法完成任何有用的工作,即使GPU处于空闲状态。解决此问题的常用方法是创建一个时间深度为最长 DMA 传输的管道。但是,由于我正在研究低延迟系统,因此这是次优的。
有没有办法在单独的线程上等待glMapBuffer,或者可能收到一些关于DMA传输何时完成的通知,以尽可能减少延迟?
在其他线程中做一些额外的工作,而不是一个glMapBuffer块?您可以有多个 OpenGL 上下文,每个上下文在自己的线程中处于活动状态;如果它们配置为共享对象,则可以同时操作。
然而,DMA实际上意味着GPU的工作,至少它的带宽被完全消耗,所以你最终可能会得到更差的性能。
相关文章:
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 如何让LLDB在成功时退出,在失败时等待
- 等待整个 omp 块完成,然后再调用第二个函数
- 提升 ASIO - io_service 不要等待连接到线程
- 如何在C++中实现带有packaged_task的异步等待循环?
- 虚假唤醒是否会解锁所有等待线程,甚至是不相关的线程?
- 如何等待窗口隐藏在Qt中?
- 如何在不等待检索的情况下获取C++中的内存位置?
- 等待被迷住了,没有回来
- 等待 WaitForMultipleObjects 窗口中的事件数量可变
- 一个线程等待多个线程事件
- 等待 qthread 终止的正确方法是什么?
- 不可预测的C++睡眠/等待行为
- Bison/flex 在识别规则后等待输入
- 使用记事本C++打开 txt 文件时无需等待
- 接受函数在发送数据包时等待
- 在Visual Studio中运行/调试C ++时,如何在结束时等待输入
- 对于等待以 std::future wait() 返回的函数的 CPU 使用率或检查标志在循环中休眠一段时间哪个更好?
- 在等待时破坏condition_variable
- 做工作而不是等待glMapBuffer