メインメニューを開く

差分

コマンドキュー

147 バイト追加, 2021年2月8日 (月) 04:08
編集の要約なし
'''コマンドキュー'''(英語:command queue)とは、特定のコマンド(処理)を[[キュー]]に格納しておくと、別の[[プロセス]]や[[スレッド]]が適宜それを取り出して実行する方式のことである。
一部の実装では単純なキューではなく、キューの中においてコマンドの実行順序を並べ替えたりコマンドを結合したりといった最適化が行われることがある。名称に「[[キュー]]」とあるが、ほとんどの実装は[[アルゴリズム]]の教科書に載っているような単純なキューではなく、キューの中においてコマンドの実行順序を並べ替えたりコマンドを結合したりといった[[最適化]]が行われているものが多い。
[[マルチスレッド]]における「[[スレッドプール]]」もほぼ同じ概念である。スレッドプールでは汎用的な処理を格納することができるが、コマンドキューの場合は前述のような最適化が行いやすいように単純なコマンドであることが多い。
=== GPUのコマンドリスト ===
最近の[[GPU]]では1フレームの描画処理をコマンドキューに格納して実行する方式が主流となっている。こちらは「では「1フレーム分の描画処理」をコマンドキューに格納して実行する方式が主流となっている。こちらは「[[CPU]]が[[GPU]]の処理完了を待たないための機構」という意味合いが強く、GPUが別スレッドのような扱いになる。
架空のコマンドセットを示す。
GraphicsDevice.SubmitCommands(cl);
// ここで処理完了を待てば従来同様になる。ここでGPUでの処理完了を待てば従来同様になる。
// ただWaitForIdle()している間はCPUが遊んでしまう。
//GraphicsDevice.WaitForIdle();
}
</source>
[[GPU]]での描画処理の場合は、前回の描画処理が未完了なのに次の描画処理を始めると残念なことになる。そこで「フェンス」と呼ばれるでの描画処理の場合は、前回の描画処理が未完了なのに次の描画処理を始めると残念なことになる。そこで「[[フェンス]]」と呼ばれる[[シグナル状態]]を保持する[[変数]]を用いて適切に処理する必要がある。
<source lang="csharp">
var fence;
// ここで待たないのが重要
}
</source>
== 関連項目 ==
* [[VeldridでFenceを使う]]
* [[シグナル状態]]