1カ月集中講座

2014年最新CPUの成り立ちを知る 第4回

~ARMはどうしてこうなった?

 前回はx86系がどうしてこうなったかをご紹介した。最終回である今回はARMについてご紹介したいと思う。文末に記したような理由があり、2011年以前の話はあまり後藤氏の記事へ誘導することができないので、まずはこの時期までのARMの状況を簡潔にまとめたいと思う。

ARMアーキテクチャとCortexシリーズの変遷

 2004年10月、ARMは「ARMv7」アーキテクチャを発表する。同社はそれまで、基本的にコントローラ向けとPDA/携帯電話などのモバイルデバイス向けに同一のCPUコアを提供してきたが、ニーズが多様化してくると、もはや同一のアーキテクチャ/コアで全てをまかなうが難しいと判断した。この結果、アプリケーションプロセッサの「ARMv7-A」、リアルタイム制御向けの「ARMv7-R」、マイクロコントローラ(マイコン)向けの「ARMv7-M」という3種類のアーキテクチャがこのARMv7の世代で登場している(*1)。

*1末尾の文字を並べると“ARM”になるが、この話をすると、ほとんどのARMのエグゼクティブが「それは単なる偶然だ」と笑いながら強調する。あまり出来のいいギャグではなかったからであろう。

 このARMv7-Aに基づいた最初の製品が、2005年にリリースされた「Cortex-A8」である。前世代となる「ARMv6」世代のハイエンドといえば「ARM11」で、初代のiPhoneにも使われた程度の性能はあるが、逆にそれどまりという言い方もできる。基本的にシングルイシュー(1命令発行)/イン・オーダーのパイプラインであり、動作周波数は(プロセスにもよるが)おおむね500MHz前後である。

 対してCortex-A8はイン・オーダーながらデュアルイシュー(2命令発行)になり、最大1GHz程度の動作周波数が可能という設計だったので、性能の上がり方は大きい。これにより、性能上はx86プロセッサのローエンドと互角というレベルになった。Cortex-A8の技術概要については、下記の福田氏のレポートが詳しい。

     ちなみにこのCortex-A8の2.0 DMIPS/MHzというのがどの程度の性能かであるが、(やや時期がずれるが)Intelの初代Atomが1.6GHz駆動で3,849 DMIPSという数字があるので、ここから逆算すると1GHz駆動のCortex-A8の性能は830MHz駆動のAtomと同程度というあたり。これを高いと思うか低いと思うかは用途次第ではあるが、従来のARMでは性能面に無理だった用途を狙える程度まで市場を広げたのは事実である。

     これに続いて投入されたのが2007年の「Cortex-A9」である。ステージ数は13→8に減ったが、実はステージが可変長であったり、2サイクルを要するステージがあったりするので、実質的なサイクル数はCortex-A8と大差ない。こちらはアウト・オブ・オーダーを実装して、性能を2.5 DMIPS/MHzまで引き上げることに成功している。また、本格的にマルチプロセッサ拡張が施され、最大4コアまでシームレスに動作できるようになった。1GHz駆動での4コアで合計10,000 DMIPS相当だから、先のAtom換算で言えば、2GHz駆動のデュアルコアAtom相当になる。

       ここまで高速になると、かなり広範な用途に使えるようになる。時系列が前後するが、2013年にARMは「Cortex-A12」を台北で発表している。このCortex-A12に関してJames Bruce氏に話を伺った折に出てきたのは、「そもそもCortex-A9は当初はモバイル向けにフォーカスして設計されたコアだったが、実際には広く組み込みにも使われるようになった」という話である。実際、例えばFreescaleの「i.MX6」はCortex-A9ベースで車載から情報家電まで広くカバーした製品であるほか、Texus InstrumentsはCortex-A8とCortex-A9をベースにした「OMAP4」を、(スマートフォン向けからは撤退したものの)組み込み向けに現在も広く発売中である。

       実際、モバイル向けと組み込み向けは、割と近いところにいる。重要なのは消費電力を抑えることで、組み込み向けであっても機器内に組み込みだと冷却ファンはおろか、ヒートシンクも付けられない(空気の自然対流も期待できない)ケースすらありえるからで、この辺りはスマートフォンと似ている。一方で年々性能が求められるようになりつつあるのもスマートフォンと同じである。さらには低価格なプロセッサが強く求められており、この点でもダイサイズが小さなCortex-A9は良い選択肢である。

       話を戻すと、これに加えて2009年には「Cortex-A5」を導入する。これは、これまでARM11程度で済んでいたアプリケーションプロセッサの代替品という扱いである。以前はARM11をMCUにもMPUにも使っていたが、ARMv7からMCU向けはCortex-M系になり、従来のアプリケーションプロセッサ用途には適さなくなっている。かといって、ARM11+α程度の性能で足りる市場にCortex-A8/A9は過剰であり、そのための対策、と考えていいかと思う。

      2つの開発を並行して進める必要に迫られる

       これに続いてARMは2つの開発を同時に行なうことになる。1つがARMv7-Aのメモリアドレス拡張である。ARMは公式にはメモリアドレス拡張を行なったものもARMv7-Aだとしているが、世間的にはARMv7-Aの拡張版(ARMv7e-A)とすることが多い。

       これと並行して、64bit拡張もほぼ同時期(2007年頃)から始まり、これは2011年に「ARM v8-A」として発表されることになる。この結果、ARMはそれぞれのアーキテクチャに向けて、それぞれCPUコアを用意する必要が出てきた。こうなってくるとARMとしても手が回らないわけで、優先順位を付けて開発を行なう必要性に迫られた。

       そもそも、なぜ2種類のアーキテクチャを同時に用意したか、といえば向こう5年のビジネスと、向こう10年以上続くビジネスの両方を考えなければいけなかったからだ。まず向こう10年以上続くビジネスは、言うまでもなくサーバー市場への参入である。第2回で説明したとおり、サーバー向けCPUに要求されるトレンドが重厚長大な高性能なものから、低消費電力、高効率、低コストで実装できるものに変わり始めたわけだが、これはまさしくARMコアに最適といって差し支えないからだ。

       では、64bitコアを出したら即座に市場が立ち上がるかといえば、そんなことはない。まずOS、次いでミドルウェアが対応し、最後にアプリケーションが対応する必要がある。ここまでが第1段階。次に、その64bit CPUを使って、システムをサーバーベンダーが構築する必要がある。この際に、追加で要求されるさまざまなデバイス類のドライバも、やはり64bit ARMに合わせて作る必要がある。ここまでが第2段階。最後に、そのシステムを使って、実際に運用できることを確認して、やっと本番ということになる。

       もちろん第1段階と第2段階は多少オーバーラップさせられるが、それでもCPUコアを出してからビジネスになるまで、最低でも3~4年はかかる。下記のように、「Cortex-A57/A53」は2012年に発表されたわけが、これを搭載したCPUが登場するのは2014年であり、本格的に市場が立ち上がるのは2015年以降になると思われる。

         そこまでの期間を持たせるため、ARMは32bitコアについても強化する必要が出てきた。ここでの主戦場は専らモバイル向けである。最初に投入されたのがCortex-A15というのは分かりやすい。例えばIntelは2009年頃、Atomをベースとした「Moorestone」SoCがARMベースの製品より優れた性能を持つといったアピールを盛んにしていた(*2)から、性能面での向上はもちろん必要であった。

        *2余談ながら、それを説明していたアナンド・チャンドラシーカ氏は現在、QualcommのSenior Vice Presidentを務めている。

         ただ、Cortex-A15は単にハイエンドモバイルに使うというだけでなく、実際にはサーバー向けの用途に耐える重厚なコアであった。実際ARMは発表時、このCortex-A15でローエンドサーバーを狙うことアピールしている(Photo01)。

        2010年9月に国内で行なわれたCortex-A15に関する説明会の資料より

         もちろん“狙う”と言っても、これでいきなり市場が取れるほど甘くはないし、それはARMも重々承知している。ARMが望んだのは、これである程度サーバーへの筋道(例えばOSベンダーとの協業体制の確立、対応すべきミドルウェアやそれを手がけるベンダーとの関係作りなど)を立てたかったということだ。その意味では、Cortex-A15はいわばCortex-A57以降のための、捨て石としても間違いではないと思うという話は第2回でも触れた通り。

         これに続き、Cortex-A7が2011年に投入される。この製品の狙いは分かりやすい。MediaTekに代表されるような低価格市場向けSoCのためのコアである。

          Cortex-A15
          Cortex-A7

           スマートフォンに限らず、普及するというのは裾野が広がるという意味であり、スマートフォンで言えばそれは100ドル未満の市場が大きく広がるということを意味する。ここを取り漏らすと、競合(例えばMIPS)に市場を奪われかねない。だからここを強化するのは絶対に必要であった。

           ただこの結果として、Cortex-A7とCortex-A15ではあまりに性能やダイサイズ・消費電力の観点でギャップが大きすぎた。純粋にモバイル向け市場だけ見ていれば、本来はCortex-A15ではなく、Cortex-A12を先行させるべきだったろうし、余力があればそうしたかもしれない。ところがARMはCortex-A50シリーズの開発も並行していたから、Cortex-A12が投入されるのは2013年まで待たねばならなかった。

           結果として、その間を繋ぐ技術として出てきたのが、下記記事で解説されている「big.LITTLE」である。モバイル向けとなると、省電力技術は非常に重要であるが、現実問題としてCortex-A15は回路規模が大きすぎて、多少頑張ったくらいではどうにもならない。かといってIntelが「Nehalem」以降で導入したパワーゲーティングのような技術は簡単には導入できない(単に回路設計だけの問題ではなく、プロセス技術も関係してくるから、ファウンダリ側の対応が必要になる)。

           big.LITTLEはその状況で生まれた苦肉の策、とも言えるが、付け加えておけば、これを推し進めた結果として、big.LITTLEがヘテロジニアス構成における省電力技術の要という、1段階上のレベルに昇華したのはむしろ喜ぶべきなのであろう。

             さて、2012年はそんなわけでCortex-A50シリーズに忙殺されたが、これが一段落したことで再び開発能力を32bitコアに振り分ける。それが2013年に投入された、Cortex-A12である。

               Cortex-A12は、ミドルレンジ向けという狙いの製品であるが、そもそもCortex-A7とA15の性能(およびエリアサイズ)の間に大きなギャップがあったが、Cortex-A12は少しギャップが詰まっており、ARM自身も市場全体の7割はCortex-A7とA12でカバーできると見ている。Cortex-A12の構成は上記に詳しいが、2番目の記事の最後にまとめられているように、

               「Cortex-A12のターゲットはミッドレンジ価格帯のモバイルデバイス向けのSoCで、ダイサイズ(半導体本体の面積)の目安は50~80平方mm。マルチプロセッサ構成のCPUコアとL2キャッシュの合計面積で5~10平方mmがターゲットレンジだ。CPUコア単体のサイズは1~1.5平方mm程度、消費電力はマルチコアCPUプラスL2キャッシュで400~450mW。このクラスでは、Cortex-A12は、Cortex-A9より大幅に性能を伸ばす有力なCPUコアとなる。」

              というわけで、これまでCortex-A9を使っていたSoCがスムーズに移行できるソリューションとなっている。

               もう1つ面白いのは、このコアが28nmプロセスが長期に続くことを前提にした製品ということだ(下記記事参照)。冒頭でも説明したとおり、これまでは組み込み向けにCortex-A9が広く利用されてきていた。このコアは65nmから40nmあたりのプロセスを利用して製造されていたが、今後はこれがCortex-A12/28nmプロセスという組み合わせになることを想定しているわけである。

                 逆に言えば、Cortex-A12が組み込み向けにも入るようになる時期というのは、スマートフォン/タブレット向けのアプリケーションプロセッサとしてはやや力不足になる可能性がある。ではそこにCortex-A15が入るのかと言うと、そうはならない。その代わりにARMが今年発表したのがCortex-A17である。

                  Cortex-A17

                   ARMはまだCortex-A17の詳細を明確にしていないが、11段+αのパイプラインながら、アウト・オブ・オーダー構成とされる。一説にはフロントエンドはCortex-A12と大きくは変えないまま、バックエンドに大幅に手を入れたそうで、Cortex-A15と同じ4.0 DMIPS/MHz近い性能を出すとする。こちらのエリアサイズはCortex-A12より若干大きい程度で済むと見られているが、これがCortex-A12に代わりミッドレンジ~ハイエンド向けのSoCに投入される模様だ。

                   興味深いのは、ARMのCortex-A15のページで“パフォーマンス”タブを開くと、用途に

                  • スマートフォンおよびモバイルコンピューティング
                  • デジタルホームエンターテインメント
                  • ホームサーバーおよびWeb 2.0サーバー
                  • ワイヤレスインフラストラクチャ

                  といった項目が並ぶのに対し、Cortex-A17では

                  • スマートフォンおよびタブレット
                  • スマートTVおよびオーバー・ザ・トップ端末
                  • 産業/車載用インフォテインメント

                  となっているのが分かる。つまり、Cortex-A17は、サーバー向けのことを考えずに済む状況になっているというのがARMの判断であり、その意味ではCortex-A15はちょっと可哀想な位置付けになっているのが現実と言えるだろう。

                  64bitでARM命令の再定義を図ったARMv8アーキテクチャ

                   さて、次は「ARMv8」の話だ。実のところARMv8は、もちろん64bit化に向かっている業界動向に合わせるという意味もあるが、下記記事にある通り、ARM命令の再定義を行ないたかったという背景も忘れてはいけない。

                    Cortex-A57

                     32bit→64bitの拡張を行なったCPUアーキテクチャは少なくないが、ほとんどはx64のように「既存の32bit命令に64bitアドレス拡張を行なった」形で、命令の再定義(整理)を行なったケースはそう多くない珍しいパターンと言える。既存のアーキテクチャの場合、「既存のソフトウェアの64bit環境への移行」が大きな課題であり、このために命令セットの互換性を維持する必要があるからだ。x64の場合も、汎用レジスタの拡張などは行なわれているが、既存の32bit命令は基本的に全て継承されている。

                     ところがARMの場合、64bitの最初のターゲットであるサーバーは、過去のソフトウェアがほとんど存在しないから、互換性云々を議論する必要がない。もちろん、存在しないとは言っても、わずかには存在したし、将来的にモバイル向けの移行は考える必要があるが、これは32bit互換モードで対応できると割り切り、むしろ命令をすっきり高速化できる方向にチューニングを行なった。

                     これは意外なメリットもあった。それはARMv8-Aのアーキテクチャライセンスを受けたメーカーの実装の容易さである。ご存知の通り、最近のx86プロセッサは、もうx86命令をそのまま実行したりせず、適切な内部命令に変換して処理するのがごく当然であるが、これはx86だけでなくほかのプロセッサもそうである。ARMv8-Aは、APM(AppliedMicro)の「X-Gene」、NVIDIAの「Denver」、Appleの「A7」、AMDの「K12」のほか、Cavium NetworkとBroadcomがすでにアーキテクチャライセンスを受けて自前で実装を行なっている。APMはPowerPCを、Cavium/BroadcomはMIPS64をベースとした64bitプロセッサをすでに持っており、極端なことを言えばデコーダ部だけ書き換えれば独自のARMv8-A対応コアができ上がることになる。実際はもう少し話は面倒ではあるのだが(*3)、それはさておき、こうしたアーキテクチャライセンスを受けたベンダーにとって、64bitの命令セットがすっきりしているのは実装上のメリットとなる。

                    *3実際には32bit互換モードの実装も必要。こっちがすっきりしていないので、結果として実装に手間がかかることに変わりない、という考え方もある。どこまで32bitの性能を重視するかで変わってくるだろう。

                     そんなわけで、64bitに関しては多くのベンダーが自社でアーキテクチャライセンスを受けて実装を始めているが、例えばARMv8-A発表時にアーキテクチャライセンスを受けたAPMですら、X-Geneの量産はまだ始まっていない。今のところ唯一量産されているのはAppleの「A7」のみであり、ほとんどの製品が2015~2016年頃に投入されることになる。これを待っていたら市場はなかなか立ち上がらないし、アーキテクチャライセンスを受けるメーカーはARMの顧客の中では少数派であり、大多数はIPコアを待っている。それもあってCortex-A57とCortex-A53を2012年に提供開始しており、早いものは今年中に量産製品が出てくるかも、といった状況になっている。

                     現実問題としてモバイルの市場が本格的に64bit対応になるには、まずOSやドライバが64bit化し、アプリケーションもこれに対応し、ついでに搭載メモリが4GBを超えないとあまり意味がないのだが、この搭載メモリが4GBを超えるのにはもうしばらくかかりそうな雰囲気だ。

                     ただ、Androidの64bit対応は間もなくであり、iOSはすでに64bit化がなされているから、最初のOSやドライバの障壁は2015年くらいには解消されることになる。スマートフォン/タブレット向けSoCベンダーは相次いでこれを狙い、64bitのラインナップを少しずつ拡充している。おそらく今後5年程度は32bitと64bitの両方のコアが混在するが、それを過ぎると市場はほぼ64bitに移行すると思われる。これに向けて、2015年あたりには、Cortex-A53とA57の間を埋める新しいIPが出てくるのではないか、というのが筆者の予想である。

                    冒頭に記した2011年以前の状況に関する補足

                     この連載をするために、「そういえば後藤さんって、いつからARMを取り上げ始めたんだっけ?」と探してみたら、タイトルに「ARM」という文字が出てきたのは2011年のこちらの記事が初出で、それ以前もARMについて触れた記事があまり見当たらなかった。PC Watch全体で見ても、2010年まででARM周辺を取り扱ったものを検索すると塩田紳二氏、福田昭氏、筆者という3人の記事ばかりだ。もちろん後藤氏がそれまでARMを取材してなかったのではなく、MicroProcessor Forumなど長く一緒に参加しているし、ARMのTechConも随分前から参加されている。

                     つまり、後藤氏がARM関連記事をPC Watchに寄稿するようになった2011年頃というのは、読者の皆さんにとってARMが広く興味の対象になり始めた時期であると見ることができるだろう。逆に言えば、それ以前に話題にしていた筆者を含む3人が変わり者、という見方もできる(だからといって後藤氏が変わり者ではない、と言っているわけではない)

                    (大原 雄介)