LiquidVRの説明では、Async Shaders for VRとなっていたが、シェーダを非同期化することで、GPUをより効率的に使うというのが「Async Shaders」だ。
現在のゲームをはじめとするプログラムは、複数のタスクが並列に動いているもののGPU側は1つのコマンドストリームしか動作しない。そこで、現在は複数のタスクをスケジューリング化して順次動作するようになっている。しかし、この場合は1つのタスクが終了するまでほかのタスクを動かせない。ここで、信号で管制している一般道をイメージしてほしい。
優先タスクを用意してそのタスクが来た場合のみ割り込ませるのが「Pre-Emption」だ。この場合、優先タスクが来るとそれを最優先する。一般道で緊急車両が来るとほかの車が道をあけるのに似ている。この場合、優先タスクをスムーズに実行する一方で、データの退避が必要となるのでオーバーヘッドが増える。
Async Shadersはここまでの「信号で管制する一般道」ではなく、高速道路の入口のように信号がなく、本線が空いていればいつでも進入できる。これを可能としているのがGCN 1.1以降に備えた「Asynchronous Compute Engines」(ACEs)だ。これはGPUの演算ユニット(CU)に対して、汎用の演算命令を発行する。ACEsを使うことでより細かな粒度の処理を扱うことができる。

GPUは同じ処理を並列化して動かすのは得意だが、別々の処理を複数並行して行うのは苦手だ(写真=左)。一方、実際のプログラムは複数のキューを使って動作しており、うまく並列処理できるなら効率を上げることができる(写真=右)
従来のイメージでは、複数のスレッドを切り替えるために信号を利用していた。この場合、緊急性のある処理には対応できない(写真=左)。これに対して優先処理を考慮したのがPreEmptionだ。ただし、優先処理に切り替えるためのオーバーヘッドが問題になる(写真=右)
別の公開予定解説動画では、Async Shaders OFFで後処理を加えたものが158fps、後処理(エフェクト)を加えないものが245fpsであったのに対し、Async Shaders ONの場合は後処理を入れても230fpsと処理時間の低下が少ないことを示していたなお、Async Shadersの発想は新しいものではなく、すでに一部のプレステーション 4対応ゲームやMantle対応のPCゲームで利用していたという。Async Shadersが一部ベンダーに限った独自の実装ではなく、標準的なDirectX 12、Vulkan(新世代のOpenGL API)で利用できるのが目新しい。
DirectX 12もVulkanもDirectX 11、OpenGL 4.xとは大幅に異なるAPIなので、しばらくは共存するようだが、それでも、最新のAPIをフルに使いこなすゲームタイトルの登場とともに、最新GPU、または、APUでバリバリと描画してみたいという欲求は、ハイエンドゲーマーを中心に高まっていきそうな気配だ。

Async Shadersは、DirectX 12、Vulkan、そして、Mantleでもサポートする(写真=左)。同じハードウェア構成でもAsync Shadersによる並列化によって高いフレームレートと低い遅延を図ることができる(写真=右)
AMD、次世代APU「Carrizo」のアーキテクチャ詳細を明らかに
“Excavator”採用のAMD新世代APU「Carrizo」を掘り下げる
大解説! Mantleは死なず、ただ進化するのみ
AMDが説く「Radeon R9 285を選ぶ12の理由」
「Mantle」の効果をRadeon R9 290X/280X/270Xで試してみたCopyright © ITmedia, Inc. All Rights Reserved.