全国高校eスポーツ選手権運営の舞台裏。Series6(Rogue)」へとシフトさせている。6系列は、昨年(2013年)から実際の製品に搭載し始めている。Chip)にも採用された(Appleは正式にはRogueであることを発表していない)。モバイルGPUのパフォーマンスを数100GFLOPSのレンジに伸ばすSeries6(Rogue)のアーキテクチャをまとめてみた。Technologiesにとって過去最大のアーキテクチャ変革となる。Series5/5XTと異なるだけでなく、基本的な設計思想がそれまでのPowerVRの系譜と異なっている。最大の違いは実行ユニットの構成が、ワイドベクタ構成になったことだ。4-wayのベクタユニットだった。GPU用語では「Vec4」と呼ぶ実行ユニットタイプだ。Series6(Rogue)のアーキテクチャそれに対して、Rogueの実行ユニットは16-wayのベクタユニットだ。16の演算ユニットが同じ命令を実行するが、フローコントロール制御ができる。16-wayの命令ストリームは、擬似的に個別の命令フローを取ることができる。これは、NVIDIAや現在のAMDと類似のアーキテクチャだ。16-wayのALUを基本単位とするRogue実行クラスタRogueアーキテクチャを、もう少し詳しく見ると下の図のようになる。Series5XTでは、GPUコアをマルチコア化してコア数を増やすことで演算パフォーマンスを増やしていた。Scheduler(CGS)で制御されるプロセッサクラスタを複数個載せることができる。GPUコアの中のクラスタを増やすことで、演算プロセッサ数を増やすアーキテクチャとなっている。Cluster)」が含まれている。次期Rogueは、これにさらにレイトレーシング支援ハードウェアが加わるが、基本の構成は同じだ。Rogueアーキテクチャの命令実行の基本単位は、この16-wayのUSCだ。16-wayのALUが同じ命令を実行する、言い換えれば、16個のALUが同じプログラムカウンタを共有している。16-wayのALU群は同じ命令を実行するが、それぞれ異なるインスタンスを実行する。16-wayのALUは、マスクレジスタを備えてプレディケーションによるフローコントロールもできる。Thread)型のアーキテクチャとなっている。Registers」がある。重複するシェーダユニフォームやコンスタンスは効率的に共有ストアされる仕組みだ。Series6のUSCUSCのALUは、それぞれが3個の演算ユニットを備えている。Unit:SFU)が1個の3個だ。3ユニットに対して、1サイクルで最大3命令の発行が可能だ。2ユニットは積和算ユニットなので合計で最大5FPオペレーション/サイクルとなる。積和算ユニットの片方は整数演算も実行する。Series5では、GPUコアアーキテクチャは大きく異なる。SGX554の構成だ。GPUはフル機能を備えたコア単位で構成されている。Data)ユニットで、このユニットは32-bit/16-bit/8-bitに分割可能となっている。浮動小数点が32/16-bit、整数が32/16/8-bitだ。32-bit時には4-way、16-bit時には8-wayと、演算のビット幅が狭まると並列性が上がりスループットが高まる仕組みだ。Series6(Rogue)への変化で重要なポイントは、実行スタイルがパックド(Packed)からスカラ(Scalar)へと変わったことだ。「従来の5/5XTでは、最大のスループットを得るにはVec4に合わせてベクタ化する必要があった。Technologies)は語る。Structures(AOS)」または「パックド(Packed)」と一般に呼ばれるデータ配列に特化した演算ユニット構成を採っていた。(SOA)」または「スカラ(Scalar)」と呼ばれる方式を採る。下の図の例は、16レーンのベクタユニットでAOSとSOAそれぞれのデータを実行する例だ。Structures(AOS)に合わせた実行では、RGBAの4データのパックを4個並べて16レーンを埋める。各サイクルに、4ピクセルを同時に処理する。Arrays(SOA)に合わせた実行では、16個のピクセル全てのデータをRGBAの順番に処理して行く。16ピクセルの中のRに対して命令を実行し、次に16個のGに対して命令を実行する。Data)命令の例では、どちらも16ピクセルのデータを4サイクルで処理できる。これがスカラ命令になると話が違ってくる。下の図はGPUアーキテクチャと命令種類による実行効率の例だ。上がSIMD命令、下がスカラ命令だ。SIMTの場合は、理論上、SIMDでもスカラでも同様のスループットで実行できる。SIMDでは4分の1の実行ユニットしか埋まらない。Series5では、この例で分かるようにパック化しなければフルのスループットで実行できなかった。Series6(Rogue)では、パック化しなくてもフルスループットで実行できる。SIMD以外のデータタイプが増えた最近のシェーダプログラムや、汎用のコンピューティングプログラムで大きな力を発揮する。16-wayの相対的にワイドなベクタの場合の問題は、コントロールフローだ。Series6(Rogue)の場合は16レーンの16インスタンスに全て同じ命令を実行する。16-wayでプログラムカウンタは1つで、レーンによって命令フローが条件分岐するような場合は、問題が生じてしまう。そのため、GPUベンダーはマスクレジスタを使ったプレディケーションを行なうのが一般的だ。ベクタ条件分岐(※PDFはこちら)プレディケーションでは、各レーンのスレッド毎に、命令を実行するかしないか(または演算の結果をレジスタに書き込むか書き込まないか)をマスクレジスタによって選択できる。プレディケーションを使えば、レーン上のスレッドに条件で分岐が発生しても、あたかも分岐したかのように見せかけることができる。Rogueではこの手法で、16-wayでの条件分岐を実現している。そのため、実質的に16-wayの各ALUはスカラユニットとして扱うことができる。ワイドなベクタ構成を、スカラと呼んでいるのはそのためだ。Series6(Rogue)では、USCの中の16-wayのALUが同じ命令を実行しながらフローコントロールを行なう。複雑なのは、個々のALUはそれぞれ3個の演算ユニットを備えていること。1個のALUの中の3個の演算ユニットは、ほかのALUの3個の演算ユニットと同じ命令を共有している。そのため、論理的なビューは下の図のようになる。Next)も、演算ユニットは16-wayの構成だ。論理的なSIMTサイズは、NVIDIAが32スレッドのWarp、AMDが64スレッドのWaveFrontだ。GCNは4サイクルかけて実行する。Rogueの場合は、どうなのか。Rogueは基本はOpenCLの推奨サイズである32スレッド単位で実行するが、16スレッドでも実行できるという。32スレッドの場合は2サイクルかけて実行し、16スレッドの場合は2サイクル目をスキップできるという。32スレッドの後半の16スレッド全てが分岐によって実行する必要がないと検知した場合はスキップする、とBeets氏は説明する。Series5では、個々のピクセルまたは頂点単位でプログラムカウンタを備えていた。SIMD単位でプログラムカウンタがあり、プレディケーションではなく真の条件分岐が可能だった。SIMD単位でプログラムカウンタで、プレディケーションを使う。フローコントロール制御の粒度が大きくなり、命令ユニットと実行ユニットの比率では、実行ユニットの比率が大きくなっている。Technologiesは次のように説明する。「コストと電力の問題だ。高い効率は、優れた電力効率を意味する。ポイントは、最も一般的なケースに最適化することだ。全てのスレッドが異なる方向に条件分岐することは極めて希なケースだ。一般的なケースは、ほとんどの頂点やピクセルが同じ方向へとフローすることだ。5SGXのワークロードを解析して発見したのは、あまり細い粒度での制御は意味が無いということだった。まれな(多くの分岐が発生する)ケースに最適化しても、そのためのコストを埋め合わせるだけの利点がないだろう。1%以下の可能性のシナリオのために、5%も電力が上がるとすれば、それはいい選択ではない。それが、我々がアーキテクチャを変更した理由だ」。この変化の背景にはモバイル機器自体の変化もある。Series5やMali-T6xxなど、ピクセル/頂点単位でプログラムカウンタを備えてフロー制御を行なっている例が多かった。これは、旧来のモバイル機器の画面解像度が低かったことと密接に関係している。解像度が低ければ、個々のピクセルや頂点が個々に分岐する可能性も高まる。解像度が上がれば、ピクセルや頂点が同じ方向へとコヒーレントして分岐する可能性が高まる。なると16-wayでの制御が合理的で効率的なソリューションになる。