1

一部のGPGPU処理にOpenGLを使用しています。そのため、OpenGL処理スレッドに作業を提供するさまざまなスレッドがあります。

各「作業項目」の後で、PBOからホストにデータを転送するために、glReadPixelsとglMapBufferを呼び出す必要があります。ただし、これに伴う問題は、glMapBufferがスレッドをブロックし、GPUがアイドル状態であっても、DMA転送が終了するまで有用な作業を実行できないことです。これを解決する通常の方法は、最長のDMA転送の時間深度を持つパイプラインを作成することです。ただし、私は低遅延システムで作業しているため、これは最適ではありません。

レイテンシーを可能な限り減らすために、別のスレッドでglMapBufferを待つ方法や、DMA転送がいつ終了したかについての通知を受け取る方法はありますか?

4

1 に答える 1

2

glMapBuffer ブロック以外のスレッドで追加の作業を行いますか? 複数の OpenGL コンテキストを持つことができ、それぞれが独自のスレッドでアクティブになります。オブジェクトを共有するように構成されている場合は、同時に操作できます。

ただし、DMA は実際には GPU の作業を意味し、少なくとも帯域幅が完全に消費されるため、パフォーマンスがさらに低下する可能性があります。

于 2011-05-22T13:41:05.450 に答える