そこでの対策が「Matterhorn」世代で投入される、新しいMatMul(Matrix Multiply)命令である(図4)。これまでに公開されているArmのクライアント向けロードマップ※)で紹介されている7nm世代の「Deimos」が、Cortex-A77である。そして2020年には「Hercules」コアが投入されるが、このHerculesの後に投入されるのがMatterhornだ。2021年以降の投入が予定されており、ターゲットプロセスは5nmかそれ以下となる。
※)関連記事:Arm、クライアント向けCPUのロードマップを発表
もともと「Cortex-A75/A55」の世代で、ドット積(Dot Product)がコプロセッサ「NEON」に追加されている。これがどう役に立つのか? という話はEE Times Japanの記事でちょっと触れたが※)、畳み込みニューラルネットワーク(CNN:Convolutional Neural Network)では煩雑に畳み込み演算を行うので、この畳み込みにドット積を利用すると簡単かつ高速に実行できるという話である。ドット積そのものは「ARM v8.4-A」で定義されており、これを実装したのがCortex-A75/A55からということになる。
※)関連記事:ArmのAI戦略、見え始めたシナリオ
Matterhornで搭載される命令はMatMul=Matrix Multiply、つまり行列演算である。こちらの方がより一般的な演算で広範に利用可能だし、もちろんMLの処理にも利用できる。ドット積も利用可能だが、これは畳み込みを利用するCNNの場合にのみ効果があり、他の手法では役に立たない。MatMulならばこうしたケースでも恐らく効果的である。
さて、その性能がこちら(図5)。縦軸はMLの性能ではなく、GEMM(General Matrix Multiplication:汎用行列乗算)の性能である。実はGEMMの場合、ドット積の有無はほとんど無関係である(たまに行列の内積を計算する、ということもあるから0ではないが)。
このグラフの縦軸で、Cortex-A73からCortex-A75への性能アップはNEONのスループット向上によるものだし、Cortex-A75からCortex-A76への大きな飛躍はNEONユニットの倍増によるところが大きい。要するにドット積はほとんど無関係である。ただし、Cortex-A77や次のHerculesの世代でも、行列乗算に関しては要素ごとに分解していちいち掛け算を行うことになる。これがMatterhorn世代ではMatMul命令を使うことで大幅に高速化できる、という話である。
このMatMul命令だが、「汎用」と言いつつも実際はML向けを念頭に置いており、対応するデータフォーマットはbfloat16である。bloat16は、符号1ビット、仮数部7ビット、指数部8ビットで合計16ビットの浮動小数点である。仮数部7ビットだから、有効数字は実質2桁でしかない。その代わり指数部は8ビットあるから、FP32と同程度の値の範囲がサポートされる。
要するに、値の範囲が広い(から、桁数が重要で数字そのものの精度は荒くても構わない)タイプのネットワークに対応したフォーマットである。このため、いわゆる科学技術計算には全く向いておらず、ほぼML向けである。実際にグーグル(Google)とインテルが既にbfloat16をサポートしており、Armもこれに倣う形になる。実はこれもちょっと複雑で、MatMul命令はNEONとSVE(Scalable Vector Extensions)の両方が対応している。恐らくNEONに実装されるのはbfloat16のみであり、一方SVEではどうもbfloat16以外(FP32とかひょっとするとFP64)でも演算が可能になりそうだ。
ちなみにこのbfloat16は「Arm v8.6-A」として定義される形になる。非常に分かりにくいのだが、Armの命令セットはV8世代でもv8.0-A〜v8.6-Aまで7バージョンある。それぞれの特徴を簡単にまとめると、以下のようになる
Armのプロセッサで言えば、Cortex-A32/35/53/57/72/73までがArm v8.0-A準拠、Cortex-A55/75/76/77がArm v8.2-A準拠である。Cortex-A77などは、部分的にArm v8.5-Aの特徴の一部を実装しているが、Arm v8.5-Aの全て(+Arm v8.4-A/v8.3-Aの全て)の機能を実装しているわけではないので、フル実装しているバージョンで言えばArm v8.2-Aになる。
そして、次のHerculesも恐らくv8.2-Aのままである。これが変わるのはMatterhorn世代で、ここでいきなりv8.6-A相当になる「らしい」。つまりこれまでArmがv8.0-A以降で定義してきた命令セットや機能をほぼ含んだ形になるという意味である(全部かどうか、までは確認できていない)。これは相応に大変な作業であり、2020年登場のHerculesに実装できなくても不思議ではないだろう。
Copyright © ITmedia, Inc. All Rights Reserved.