「コマンドキュー」を編集中
この編集を取り消せます。 下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。
最新版 | 編集中の文章 | ||
1行目: | 1行目: | ||
'''コマンドキュー'''(英語:command queue)とは、特定のコマンド(処理)を[[キュー]]に格納しておくと、別の[[プロセス]]や[[スレッド]]が適宜それを取り出して実行する方式のことである。 | '''コマンドキュー'''(英語:command queue)とは、特定のコマンド(処理)を[[キュー]]に格納しておくと、別の[[プロセス]]や[[スレッド]]が適宜それを取り出して実行する方式のことである。 | ||
− | + | 一部の実装では単純なキューではなく、キューの中においてコマンドの実行順序を並べ替えたりコマンドを結合したりといった最適化が行われることがある。 | |
[[マルチスレッド]]における「[[スレッドプール]]」もほぼ同じ概念である。スレッドプールでは汎用的な処理を格納することができるが、コマンドキューの場合は前述のような最適化が行いやすいように単純なコマンドであることが多い。 | [[マルチスレッド]]における「[[スレッドプール]]」もほぼ同じ概念である。スレッドプールでは汎用的な処理を格納することができるが、コマンドキューの場合は前述のような最適化が行いやすいように単純なコマンドであることが多い。 | ||
13行目: | 13行目: | ||
=== GPUのコマンドリスト === | === GPUのコマンドリスト === | ||
− | 最近の[[GPU]] | + | 最近の[[GPU]]では1フレームの描画処理をコマンドキューに格納して実行する方式が主流となっている。こちらは「[[CPU]]が[[GPU]]の処理完了を待たないための機構」という意味合いが強く、GPUが別スレッドのような扱いになる。 |
架空のコマンドセットを示す。 | 架空のコマンドセットを示す。 | ||
26行目: | 26行目: | ||
GraphicsDevice.SubmitCommands(cl); | GraphicsDevice.SubmitCommands(cl); | ||
− | // | + | // ここで処理完了を待てば従来同様になる。 |
// ただWaitForIdle()している間はCPUが遊んでしまう。 | // ただWaitForIdle()している間はCPUが遊んでしまう。 | ||
GraphicsDevice.WaitForIdle(); | GraphicsDevice.WaitForIdle(); | ||
32行目: | 32行目: | ||
</source> | </source> | ||
− | [[GPU]] | + | [[GPU]]での描画処理の場合は、前回の描画処理が未完了なのに次の描画処理を始めると残念なことになる。そこで「フェンス」と呼ばれる[[シグナル状態]]を保持する[[変数]]を用いて適切に処理する必要がある。 |
<source lang="csharp"> | <source lang="csharp"> | ||
var fence; | var fence; |