フェンス

提供: MonoBook
2023年11月10日 (金) 02:29時点におけるAdministrator (トーク | 投稿記録)による版
ナビゲーションに移動 検索に移動

フェンス英語:fence)とは、コマンドキュースレッドプール)に対してコマンド(タスク)と共に投入すると、そのコマンドの処理終了時にシグナル状態なる(完了フラグが立つ)変数のことです。

フェンスを監視することでコマンドの終了を待ち受けることができます。


大雑把にいうとCPUでのマルチスレッドGPUでの並列処理などで複数のタスクの終了を待つ(同期する)ための目印です。

たとえばゲームで1フレームごとにマルチスレッドを止めたい場合があるとします。 フェンスがない時代はアイドル状態(タスク全停止)になるのを待っていました。  gpu.addTask(task1);  gpu.addTask(task2);  gpu.addTask(computeTask);

gpu.waitForIdle();

フェンスを使うと「グラフィックスシェーダーはfenceで1フレームごとに止めるけどコンピュートシェーダーは止めないでぶん回す」といったことができます。

var fence = gpu.createFence();
gpu.addTask(task1, fence);
gpu.addTask(task2, fence);
gpu.addTask(computeTask, null);
gpu.waitForFence(fence); // task1とtask2の両方が終わるのを待つ