連載
» 2018年04月24日 05時00分 公開

頭脳放談:第215回 AI性能が3倍(?)になった「Snapdragon 845」のヒミツ

Qualcommのハイエンドプロセッサ「Snapdragon 845」を搭載したスマートフォンが次々と販売開始となっている。この「Snapdragon 845」は、前モデルの「Snapdragon 835」に比べて、CPU/GPU性能で30%、AI性能が3倍になっているという。この性能向上は何によってもたらされているのか、少ない資料から筆者が想像する。

[Massa POP Izumida,著]

 つい最近、アメリカ大統領令という鶴の一声(という表現に、「どこが鶴なんだ!」と心の中でツッコミを入れつつ)により、Broadcomによる買収を免れたQualcommの「Snapdragon 845」というチップについて書かせていただく(Snapdragon 845については、Qualcommの「Snapdragon 845 Mobile Platform」参照のこと)。

 余談だが、現在のBroadcomは、Hewlett-Packardから分社したAvago Technologiesが、ネットワークや通信向けの半導体を得意とする「Broadcom Corporation」を買収し、社名を「Broadcom Ltd.」と変更したものだ。そのため実体を考えると、Broadcomという名前にもとても違和感がある。

 最近、Snapdragon 845を搭載したスマートフォン(スマホ)などが次々登場しており、スマホの性能にうるさい筋の人々(その演算性能を何に使っているのか、常々疑問に思っているのだ)の話題になっているらしい。

Snapdragon 845のコア構成 Snapdragon 845のコア構成
Snapdragon 845は、この写真の通り、CPUの「Kryo 385」、GPUの「Adreno 630」、DSPの「Hexagon 685」に加えて、LTEモデムやWi-Fiなどで構成されている。
(写真は、「Snapdragon 845 Mobile Platform」より)

 自社や自社の系列の会社でスマホ向けのプロセッサSoC(System-On-Chip)を設計、製造しているAppleや Huaweiなどの一部大手会社を除く、多くのスマホメーカーにとって、QualcommのSnapdragon系列のプロセッサSoCは「高級機」を作ろうと思うと、避けて通れない選択だ。その製造数量を考えれば、Qualcomm製品全てが「高級」というわけでもないはずなのだが、スマホ向けSoC業界のもう一方の巨頭と言っていいだろうMediaTekが「大衆向け量販機種」というブランドイメージ通りの製品を出し続けているので、Qualcommのブランドイメージは安泰なように見える。

 そんなQualcommの最新製品である「Snapdragon 845」は、当然過ぎるくらいに当然に「最高」の性能をたたき出すことが期待されている。他社の高級機種とは、よく言えば抜きつ、抜かれつ、別な言い方をすれば五十歩百歩の戦いかもしれないが、自社の過去の製品との比較では常に大幅な性能向上は必須である(そうでないと株価が下がってしまうだろう)。

 今回のSnapdragon 845というチップの場合、その前世代はSnapdragon 835という型番である。Snapdragon 835も高級機種として「つい最近の一時代をリードした」はずなのであるが、Snapdragon 845の登場によりフラグシップの座を明け渡すことになった。

 Qualcommの容赦ない「当社比」ではCPU性能で25〜30%、GPU性能で30%もSnapdragon 845は性能が高いらしい。皆さんもご覧になっているだろう各種媒体で発表されているベンチマークテスト結果では、条件にもよるがそれに近い性能が出ているようだ。しかし、発表資料ではもっと気になる数字も書かれていたのだ、「AIに関する性能が3倍」というものである。CPUもGPUも高々30%アップ、「1.3倍×1.3倍でも1.69倍」にしかならない。それなのに、AI性能は3倍という不思議。少々疑問に思ってほじくりたくなったのだ。

Snapdragon 845の性能向上のヒミツ

 まずSnapdragon 835という前世代のチップと、Snapdragon 845という今回のチップの素性だ。どちらも同レベルの10nmプロセスでの製造である。量産機種としては、まずは最先端のプロセスといってよい。つまり製造技術的に細かな味付けの違いが両者間にあるのかもしれないが、基本線は一緒だ。

 Snapdragon 845が新しいからといって、何倍もの数のトランジスタ数を使える、というわけではないのだ。Snapdragon 845の設計に当たっても、関係各位の諸般の努力によりコスト増を隠せる「多少増えた」くらいにとどめておかないとマズかったはずである。それもあるのか、根本的な部分ではSnapdragon 835とSnapdragon 845は「兄弟」と言えるほど似ている。

 まずCPUコアの構成は一緒だ。ARM特有のbig.LITTLE構成で、高速コア4個と低消費電力(低速)コア4個の合計8個の組み合わせである(big.LITTLE構成とは、高い性能の一方消費電力も大きなコアと、そこそこの性能で低消費電力のコアを組み合わせることで、全体で高い性能と低消費電力を実現するというもの)。使用しているコア自体は、Snapdragon 835が使っているコアよりも、Snapdragon 845が使っているコアの方が「up to date」で良くなっているが、それだけで30%アップは難しかったのではないかと思う。

 もちろん、上限クロックも上がってはいるものの、コアの改良+クロックアップに加えて、何かがないとなかなか30%アップを達成するのは難しいと思う。調べてみると、ちゃんと良くなっている部分があった。キャッシュである。前世代のSnapdragon 835では1次キャッシュこそコア別なものの、2次キャッシュでは共有になっていた。

 1つの仕事をみんなでやるときには、共有キャッシュは良いものではあるが、場合によっては他のコアの正当な挙動が、別なコアが使いたいデータを押し出してしまってキャッシュミス頻発により性能低下、といった事態も起こる。その点、Snapdragon 845では、2次キャッシュまでコア独立になり、3次キャッシュが共有になっていた。

 しかし、あまりトランジスタ数を使い過ぎるとマズイと思ったのだろう、2次キャッシュのサイズは、高速側コアで大きく、低消費電力側で小さくとちゃんとメリハリを付けている。この辺の「案配」が設計者の腕の見せどころである。Snapdragon 835のCPUは「Kyro280」という名前だったが、Snapdragon 845では「Kyro385」と「+105」された名前が付けられた。3桁目の繰り上がりに胸を張っている感がある。部品屋はこういう数字に「違い」を際立たせるものなのだ。

 なおSnapdragon 845では、ヘテロジニアスな各種コアで共有される「システムキャッシュ」というメモリ構造もある。この辺の効果を示す数字はないが、後述のように「効く」可能性は十分ある。

 次にGPUを見てみる。Snapdragon 835では「Adreno 540」、Snapdragon 845では「Adreno 630」という型番だ。例によってQualcommの場合、詳細なデータが手に入らないので、この型番から想像をたくましくするしかないのだが、100番台の桁が上がっている分、これまた「違い」ありの気持ちが入っているものと見た。ただ「+90」だ。微妙に遠慮しているのか、少々微妙に落としたのか、ヤマシイところがあるのかもしれない。

AI性能3倍はどうやって実現している?

 さて本題のAI性能が3倍という件に話を戻そう。Snapdragonをご存じの諸兄からは、CPUとGPUだけじゃない、Hexagon DSPも搭載されているじゃないか、この性能が良くなったからAI性能が3倍なんだろうと言うかもしれない。確かにHexagon DSPのHVX(Hexagon Vector eXtensions:Hexagonに搭載されているベクター演算機能)はなかなか強力で、SIMD演算器の化け物である。

 ただ、とても引っ掛かるのが型番だ。Snapdragon 835搭載のHexagonは、「Hexagon 682」で、一方Snapdragon 845が搭載するのは「Hexagon 685」である。高々「+3」、随分控えめではないか。確かにAI性能にHexagonが与える影響はアリであろう。だが、そんな3倍の主因がこれだけならば、筆者ならHexagon 682をHexagon 782くらいに「+100」にしているだろう。ここでもQualcommの秘密主義に翻弄されるのだが、私見では使い勝手の面では改良は入っているだろうが、こと演算器などの基本構成などは変わっていないのではないかと想像する(性能を3倍にしたら、どれだけトランジスタが増えるか、考えてみるとよい)。

 じゃなぜAI性能が3倍になったのか。ヒントはQualcommの資料の中にある「AI処理の場合、CPU/GPU/HVXを組み合わせて使う」とある点だ。これらの分担は、というとCPUはFP32(32bit浮動小数点演算)とINT8(8bit整数演算)、GPUはFP32(32bit浮動小数点演算)とFP16(16bit浮動小数点演算)、HVXはINT8(8bit整数演算)とある。

 筆者もそうだが、Qualcommの担当者にとっても「AI処理≒ニューラルネットワーク」なのだろう。FP32は単精度浮動小数だ。FP16は半精度浮動小数、INT8は8bit整数だが、実体はニューラルネットワークで最近はやりの8bit量子化数である。AI処理といってHVXが全面に出てくるのは、8bit量子化数を使うときだけなのだ。

 そう思ってQualcommのSDKの改版履歴を見ていると、AI処理で8bit量子化数の処理ができるようになったバージョンは、2017年12月のリリースだ。しかし、その時点ではまだバグがあったらしい。着実に毎月アップデートが出ているので現時点では問題がないのだろう。しかし、GPUでの半精度浮動小数のサポートは、何とつい最近の2018年2月となっている。

 つまりソフトウェア的には、AI処理にHVXやGPUを効率の良く投入できるようになったのは、Snapdragon 845の登場後のことなのである。Snapdragon 835の時代には、実のところ半精度浮動小数も8bit量子化数も使えなかったのだ。

 その辺のSnapdragon 835に不利なところをさらっとパスして、3倍って言っちゃったのではないのか、といま筆者は疑っている。なお蛇足だが、半精度浮動小数や8bit量子化数などを使うことで計算が速くなるのは、単にSIMD命令の並列度が上げられるからではない。実際、8bit量子化数でコンボリューション計算するときには、積算は結局32bitになるし、前後の面倒な処理も入るので計算そのものがスピードアップするわけでもない。

 効果が大きいのはメモリへのアクセス量の削減なのだ。ニューラルネットワークの計算は結構な数の係数をメモリから読み出し続けないとならないが、この量を半精度浮動小数にすれば半分、8bit量子化数にすれば4分の1にできる。この効果は大きい。そこにスマートなメモリ読み出し機構やオンチップのメモリ(キャッシュなど)をうまく組み合わせることができれば、従来メモリからの読み出しがボトルネックで使い切れなかった演算器が生き生きと動きだすのだ。そういう効果を加味すれば、「3倍」というのはまったく無理な数字ではない。しかし、期待に応え続けるというのも疲れるものじゃないか。

筆者紹介

Massa POP Izumida

日本では数少ないx86プロセッサのアーキテクト。某米国半導体メーカーで8bitと16bitの、日本のベンチャー企業でx86互換プロセッサの設計に従事する。その後、出版社の半導体事業部などを経て、現在は某半導体メーカーでヘテロジニアス マルチコアプロセッサを中心とした開発を行っている。


「頭脳放談」のインデックス

頭脳放談

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。