最新版 |
編集中の文章 |
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]]
| |