『非同期バッファ転送』

OpenGL Insight Chapter 28

glMapBuffer / glMapBufferRange といった関数の存在は知っていたけれども、その意味を理解していなかった.

メモリ転送の効率化のために用意されている関数という漠然としたイメージだけは持っていたが、この章で用法のヒントが示されているのは貴重だと感じた.

また、GL_STATIC_DRAW / GL_STREAM_DRAW といったヒントフラグも同様で、具体的にどのような挙動をするのかといったイメージがつかめたのは収穫だった.

論文の主張である(CPU処理としての)マルチスレッドでバッファ転送と共有コンテキストの想定シナリオとして以下の3パターンが示されていた.

1. シングルスレッドでの利用
2. 2つのスレッドと1つのOpenGLコンテキスト
2. 2つのスレッドと2つのOpenGL共有コンテキスト

少し前に、(Texture等の)リソースのロード時間短縮のために、複数の(CPU)スレッドに対して複数の共有コンテキストを用意して、非同期バッファ転送を行いロード時間の短縮を行おうと検討した事上がったが、この論文の結果から推察するに、この用途での共有コンテキストの利用は適さないのではないかと考えた.

とはいえ、結論としても述べられているように、

最後に、どのソフトウェアの性能が重要な部分でも同じように、ターゲットハードウェアの実際の使い方は「早道」を外れやすいので、例えばNVIDIAのNsightを使ってベンチマークをすることが非常に重要である。

という言葉には素直に従うべきだろう.

OpenGL Insights 日本語版 (54名のエンジニアが明かす最先端グラフィックス プログラミング)

OpenGL Insights 日本語版 (54名のエンジニアが明かす最先端グラフィックス プログラミング)