「フェンス」の版間の差分
Administrator (トーク | 投稿記録) |
Administrator (トーク | 投稿記録) 編集の要約なし |
||
| (同じ利用者による、間の9版が非表示) | |||
| 1行目: | 1行目: | ||
'''フェンス'''([[英語]]:fence)とは、[[コマンドキュー]]([[スレッドプール]])に対してコマンド(タスク)と共に投入すると、そのコマンドの処理終了時に[[シグナル状態]]なる(完了フラグが立つ)[[変数]] | '''フェンス'''([[英語]]:fence)とは、[[コマンドキュー]]([[スレッドプール]])に対してコマンド(タスク)と共に投入すると、そのコマンドの処理終了時に[[シグナル状態]]なる(完了フラグが立つ)[[変数]]のことです。 | ||
フェンスを監視することでコマンドの終了を待ち受けることができます。 | |||
大雑把にいうと[[CPU]]での[[マルチスレッド]]や[[GPU]]での並列処理などで複数のタスクの終了を待つ(同期する)ための目印です。 | |||
たとえば[[ゲーム]]で1フレームごとに[[マルチスレッド]]を止めたい場合があるとします。 | |||
フェンスがない時代はGPU自体がアイドル状態(タスク全停止)になるのを待っていました。 | |||
<source lang="csharp"> | |||
gpu.addTask(renderTask); | |||
gpu.addTask(computeTask); | |||
gpu.waitForIdle(); | |||
</source> | |||
一方でフェンスを使うと「グラフィックスシェーダーはfenceで1フレームごとに止めるけどコンピュートシェーダーは止めないでぶん回す」といったことができます。 | |||
<source lang="csharp"> | |||
var fence = gpu.createFence(); | |||
gpu.addTask(renderTask, fence); | |||
gpu.addTask(computeTask, null); | |||
gpu.waitForFence(fence); // renderTaskが終わるのを待つ | |||
</source> | |||
[[category: GPU]] | |||