「フェンス」の版間の差分

提供:MonoBook
ページの作成:「'''フェンス'''(英語:fence)とは、コマンドキュースレッドプール)に対してコマンド(タスク)と共に投入すると…」
 
編集の要約なし
1行目: 1行目:
'''フェンス'''([[英語]]:fence)とは、[[コマンドキュー]]([[スレッドプール]])に対してコマンド(タスク)と共に投入すると、そのコマンドの処理終了時に[[シグナル状態]]なる(完了フラグが立つ)[[変数]]のことである。
'''フェンス'''([[英語]]:fence)とは、[[コマンドキュー]]([[スレッドプール]])に対してコマンド(タスク)と共に投入すると、そのコマンドの処理終了時に[[シグナル状態]]なる(完了フラグが立つ)[[変数]]のことです。


フェンスを監視することでコマンドの終了を待ち受けることができる。
フェンスを監視することでコマンドの終了を待ち受けることができます。
 
 
 
大雑把にいうと[[CPU]]での[[マルチスレッド]]や[[GPU]]での並列処理などで複数のタスクの終了を待つ(同期する)ための目印です。
 
たとえば[[ゲーム]]で1フレームごとに[[マルチスレッド]]を止めたい場合があるとします。
フェンスがない時代はアイドル状態(タスク全停止)になるのを待っていました。
gpu.waitForIdle();
 
フェンスを使うと「グラフィックスシェーダーはfenceで1フレームごとに止めるけどコンピュートシェーダーは止めないでぶん回す」と言ったことができます。
var fence = gpu.createFence();
gpu.addTask(task1, fence);
gpu.addTask(task2, fence);
gpu.addTask(task3, fence);
gpu.addTask(computeTask, null);
gpu.waitForFence(fence); // 全taskが終わるのを待つ

2023年11月10日 (金) 02:27時点における版

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

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


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

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

gpu.waitForIdle();

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

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