以前、Arm v9-Aの詳細について本連載で説明したが、この時に見えていたのはArm v9.2-Aまでである。
ただこの時にはなく、後から追加されたものにSME(Scalable Matrix Extention)がある。これは、Armv9.2-AのオプションというよりもArmv9-Aそのもののオプションという扱いで2021年に発表され、仕様は2022年2月に公開されていた(図7)。
SMEを実装したのはApple M4が現時点で唯一の実在するプロセッサであり、ArmのCPU IPやQualcommなどの独自アーキテクチャの製品もこれをサポートしていない。このSMEというのは、SVE/SVE2の拡張版である。SVE/SVE2はいわば1次元のSIMD演算であり、行列に対して行や列の単位で、1行あるいは1列単位で処理を行っていく仕組みである。
これに対しSME2は2次元に拡張し、行列を一気に処理できる仕組みとなっている。ただし、初代SMEは外積を含む一部の行列演算の高速化のみに対応した、極めて限定された処理に向けたものだった。そこでより広範なアプリケーションに対応させるべく拡張されたのがSME2で、これがArm v9.3-Aで導入され、今回Lumex CSSと併せて発表された全てのC1 CPU(C1-Ultra/Premium/Pro/Nano)でSME2が利用できるようになった。
SME2は、新たに以下のような機能が追加されている。
ここで面白いのがこのSME2ユニットの利用方法である。SME2ユニットは膨大な数の演算ユニットを内蔵するので、CPUコアに収めるのは無理である。このため物理的にはCPUコアとは別になっている。
図3で、“C1 CPU Cluster”という左側の枠の中にC1-Ultra×2+C1-Pro×6があるが、それとは別にSME2とC1-DSUがクラスタ内に配される形だ。
Armの説明によれば、C1世代ではSME2の数は1つだが、次世代製品では2つになるらしい。さて、CPUコアとは別の場所にいるということはアクセラレータという扱いになるのかと思ったらそうではなく、全てのC1コアはSME2をデコード部で解釈可能であり、SME2命令が来た&クラスタ内にSME2ユニットがある場合は、そのままその命令をSME2にディスパッチして、以後の処理はSME2側で行われる。この際に行列全体をカバーするZA Vectorと呼ばれる拡張レジスタを利用して演算が行われる。
計算が終わったら、その結果をSVEレジスタに書き戻す(これはVectorのロード/ストア命令を使う)ことで結果をCPUパイプラインに戻す、という形になっている。要するに、CPUから見ると自身の演算ユニットで処理を行っているように見えて、その実は外にオフロードしているという実装になっている。これを行うため、C1 CPUにはSME2専用の実行パイプラインが用意されている。おそらくSME2ユニットと同期を取るのが目的だろう。
このSME2でAIの推論演算が2.8〜4.7倍高速化されたという話だが(図8)、ArmとしてはAI推論用にGPUやNPUを併用するという案が顧客に支持されなかったので、CPUにAI用アクセラレータを実装せざるを得なくなったということでもある。
マイクロコントローラー向けの分野では、それなりにNPUのEthosシリーズの採用事例が増えているが、こちらも競合製品が少なくないため普及しているとも言いにくい。そしてモバイル向けの場合、SoCベンダーが自前のNPUを提供するケースが多い。こうした状況でAI処理への対応を考えた場合、CPUそのものにAI処理のアクセラレータを内蔵させるのが一番得策であると考えたようだ。
ただし、実はこのSME2、既存のフレームワークとあまり互換性がない。以前ArmはArmNNと呼ばれるフレームワークを提供してきていたが、今回確認したところ「ArmNNはArm Compute Libraryを使用しており、Arm Compute LibraryはSME2の機能の一部のみをサポートしている。またCPU向けには今後は非推奨となっており、パートナーにはTFLite、Executorch、ONNX Runtimeなどのオープンソースのフレームワークへの移行を推奨している」という返事が戻ってきた。まだArmのAIに向けた取り組みには紆余(うよ)曲折が予想されそうである。
Copyright © ITmedia, Inc. All Rights Reserved.
組み込み開発の記事ランキング
コーナーリンク
よく読まれている編集記者コラム