「フェンス」の版間の差分
ナビゲーションに移動
検索に移動
Administrator (トーク | 投稿記録) |
Administrator (トーク | 投稿記録) |
||
9行目: | 9行目: | ||
たとえば[[ゲーム]]で1フレームごとに[[マルチスレッド]]を止めたい場合があるとします。 | たとえば[[ゲーム]]で1フレームごとに[[マルチスレッド]]を止めたい場合があるとします。 | ||
フェンスがない時代はアイドル状態(タスク全停止)になるのを待っていました。 | フェンスがない時代はアイドル状態(タスク全停止)になるのを待っていました。 | ||
+ | gpu.addTask(task1); | ||
+ | gpu.addTask(task2); | ||
+ | gpu.addTask(computeTask); | ||
gpu.waitForIdle(); | gpu.waitForIdle(); | ||
15行目: | 18行目: | ||
gpu.addTask(task1, fence); | gpu.addTask(task1, fence); | ||
gpu.addTask(task2, fence); | gpu.addTask(task2, fence); | ||
− | |||
gpu.addTask(computeTask, null); | gpu.addTask(computeTask, null); | ||
− | gpu.waitForFence(fence); // | + | gpu.waitForFence(fence); // task1とtask2の両方が終わるのを待つ |
2023年11月10日 (金) 02:28時点における版
フェンス(英語: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の両方が終わるのを待つ