Armがモバイル向けのプロセッサIPとして、Cortex-A77と併せて発表したのがMali-G77である。Cortex-A77はCortex-A76の発展型というか、基本構成は同じながら内部を充実させた構成だったのに対し、Mali-G77はMali-G76とは異なる新しいValhallアーキテクチャに基づく最初の製品となった(Photo01)。

  • Photo01:Maliの開発コード名は北欧神話シリーズ(Maliを開発していたFalanx Microsystems ASがノルウェイの会社、というかNTNU(Norwegian University of Science and Technology)からスピンアウトした会社である)を採用しているが、なんでそのまま"Valhalla"ではなく"Valhall"なのかは良く分からない

このMal-G77、2018年に発表されたMali-G76と比較して、同一プロセス・同一周波数・同一構成で性能を40%引き上げただけでなく、性能/消費電力比と性能/エリア比を30%改善、ML関連処理性能を60%高速化したとしている。

  • Photo02もともとMali-G76でも大幅に性能を引き上げており、さらにここから60%アップだから、かなりMLの処理に強いGPUに変革されたことになる

さて、これをどうやって実現したかである。Mali-G77は7コア~16コアの構成が用意される(Photo03)。各々のコアの構成であるが、Mali-G76まで(というかBifrost)の4/8Wide SIT×3 Engineから、Mali-G77(というかValhall)では16WideのSIMT×2 Clusterに切り替わった(Photo04)。

  • Photo03:「最小構成が7コアって多くない?」と突っ込んだところ、Mali-G77はプレミアムスマホ向けのコアだから、最小構成でもそれなりの性能を確保することを検討した結果が7コアだそうで、別に技術的に6コア以下に出来ないという訳ではないらしい

  • Photo04:FMAの数で言えば1cycleあたり12/24 FMAsだったのが32に増えたことになる

基本的な話をすると、Valhallでは、16Threadを1つのWarpとして扱い、1つのClusterで1つのWarpを管理するという仕組みになっている(Photo05)。1つのWarpは完全に同期して実行される形であり、外部からAPIはともかく、内部的にはVulkanに向けて最適化を施した新しい命令セットに切り替わったとする(Photo06)。

  • Photo05:Valhallでは2つのClusterで1つのコアを構成する形。なので、1コアあたりで言えば32Threadの同時実行である

  • Photo06:"Operational equivalence to Bifrost"という表現がなかなか

ところで、構造的にはBifrostのQuadモデルからMidgardのThreadモデルに逆戻りした感がある(もちろんThreadの扱い方は全然違うが)。やはりQuadはいろいろと問題があったということだろうか。

QuadはPixelデータを扱うには悪くないアイディアだったかもしれないがGPGPU的な用途、特にMLの処理などでは意味がなく、無駄にパイプラインが長くなるだけだったからだ。加えてClauseも廃止されたというのは、理論的にはともかく実際にはあまり使われなかったということだと思われる。

Photo07はValhallの基本構造、Photo08が個々のShader Coreの内部構造である。Warp単位の管理になったため、Thread単位での管理が不要となり、構造はシンプル化した。前述の通り、管理単位はWarpなので、Photo08におけるManagerは同時に64 Warpを保持し、このうち2つをここのProcessing Unitで処理する形になる(Photo09)。

  • Photo07:当たり前だがこのレベルではMidgard/Bifrostとほとんど違いがない

  • Photo08:テクスチャユニットが4基というのもValhallの強化点の1つだ

  • Photo09:Context Switchingはそんなわけで当然Warp単位である

Front EndはこのWarpの制御を行い、それぞれのClusterに対して処理すべきWarpを引き渡す。それと同時に処理が終わったWarpのPost Processingを行う(Photo10)。個々のProcessing Unitは1cycleあたり16のFP32が処理できるFMA Unitと、CVT/SFUをそれぞれ1個づつ配する形(Photo11)だ。

  • Photo10:1命令は(最大で)8Bytes構成ということがここから分かる

  • Photo11:このFP32 UnitがINT8だと1cycleあたり64のdot Productsの処理が可能になっている

このFMA UnitのThroughputを除くと大きく違うのが、FMA/CVT/SFUの実行タイミングである。Biflostでは、FMAの処理の後でCVTなりSFUなりが動く形になっていたため、Latencyが非常に大きくなっていたが、ValhallではFMA/CVT/SFUを同一タイミングでスタートできるので、Latency短縮も可能になっている(Photo12)。

  • Photo12:FMAそのもののLatencyは4cycleで、これはBifrost/Valhallで違いがない

次いでTexture Unitだが、Photo08でTexture Unitが4基になったと説明しているが、そのTexture UnitもCache Hitの場合のLatencyを減らすとともにThroughputを倍増しているとする(Photo13)。ただ、Texture Unitが4倍といっても、同時に扱うThreadの数が2倍(Bifrostが8Thread、Valhallが1Warp=16Thread)だから、実質的には2倍の処理性能向上ではある(Photo14)が、他にも細かく改良が追加されている。

  • Photo13:Textureの持ち方そのものはBifrostと同じく、メモリ管理の最小単位を廃した仕組みが取られていると思われる

  • Photo14:Mali-G72比で4倍、というのはプレミアムスマートフォンが想定するゲーミングではそれだけ負荷が高いという事の裏返しともいえる

最後がLoad/Store Unitであるが、こちらはBifrostの正常進化というか、帯域の増加とLatencyの削減を図ったという感じになっている。

  • Photo15:Photo09で、右端のMessage Blockの更に右にこのLSCが入る形になる。LSCはBifrostの世代でOut-of-Order実行が可能になっているので、あとはその効率を高めるだけで良いということかもしれないが

  • Photo16:してみると、やはりQuadがエリア効率を下げていたということであろうか?

最後にMachile Learning関連の性能比較が示されている。同時実行可能なFMAの増加だけでなく、ここまで説明してきた諸々の改良の効果で、最低でも50%、最大て90%近い性能改善が実現できる(当然Networkの構成で改善率は変わる)というのがArmの主張である。

ちなみにこのMali-G77と先に紹介したCortex-A77であるが、早くも5月29日にはこれを搭載したMediatekのHelio M70が発表されている。Lead CustomerへのSamplingが2019年第3四半期、量産開始は2020年第1四半期ということで、まさしく2020年のプレミアムスマートフォン向けのSoC向けのコアになる。

余談であるが、このCortex-A77とMali-G77は、Smartphone/Tabletだけでなく2-in-1(要するにQualcommのACPC)マーケットでも十分通用する性能だと関係者は期待しているようだ。ただし、ドライバの提供だの互換性テストの実施だのをArmが音頭をとってやらない限り、引き続きWindows on ArmはQualcommの独占市場のままとなりそうだが、この辺りに関してはArm本体としては及び腰らしい。残念ながら、Cortex-A77を搭載したWindows 10マシンが出てくることは(少なくとも近い将来には)無さそうである。