【レポート】

Fall Processor Forum 2005 - ARM Cortex-A8

ARMはこのFPF(というかMPF)を重要視し、新製品の発表をここで行う事が多いという話はプレビューでも触れたことだが、今年もやはりそのルールは健在だった。Tigerというコード名で知られていた次世代ARMコアこと「Cortex-A8」の発表が初日午後に行われた。そこでこの詳細をレポートしたい(Photo01)。

Photo01:発表を行うDavid Williamson氏(Consulting member of technical stuff, ARM Austin Design Center)。Cortex-A8のMicroarchitecture Performance Evaluation/Validationの指導を行う。その前はARM10ファミリーの設計に携わり、さらにその前はAMDでAthlonの設計を行っていた。

目標は単一コアでの性能向上

まず最初に語られたのはCortex-A8の設計目標である。全てのデジタル機器にARMを、というのは同社の目標ではあるが、とりあえず大きなマーケットシェアを現状でも確保しており、さらに今後も重要視する分野は携帯電話である。その携帯電話は次第に高機能なSmartPhoneに移行しつつあり、CPUも次第に高機能化が望まれている。その一方、低消費電力化への要求も依然として高いから、これをうまく両立する必要がある(Photo02)。Cortex-A8のアーキテクチャは、これらを満たすべく以下の様な特徴をもったものになった。

  • In-Orderのスーパースケーラを搭載。パイプラインは13段
  • NEONという新しいSIMDエンジンを搭載。パイプラインは10段
  • L2キャッシュアクセス時のレイテンシを9cycleまで短縮
  • Global Historyに基づく分岐予測を搭載

というのが主な特徴だ(Photo03)。設計目標もなかなかに意欲的で、Dhrystoneで2000(@1GHz)を狙うだけでなく、複数のベンチマークでIPC0.9を狙うとしている。これはかなりの高性能になる筈だ。また90nm/65nmで動作周波数1GHzを達成でき、消費電力は平均300mW、整数演算部のコアサイズは4平方mm以下という、ここまで相反した設計目標は無いだろうというくらいにアグレッシブである。このアグレッシブさは、Photo04でも確認できる。従来のARMコアは500~700DMIPS前後であり、より高い性能を必要とする場合には(NECマイクロエレクトロニクスとの共同開発で実現した)最大4コアのマルチプロセッサ構成で達成するという話になっていた。この4コアと同等の性能を1コアで実現しようというのが今回の目標である。

Photo02:加えれば、製造プロセスが90nm/65nmに移行してゆくことにも対応する必要があり、このあたりのバランスをどう取るのかが難しくなっていることも挙げられた。

Photo03:Dhrystoneは、例えばARM11で1.1~1.2DMIPS/MHz程度だから、ほぼ倍増していることになる。またIPCに関しては比較が難しいが、例えばSPECintだと2GHzのPowerPCですら1000前後だから、IPCは1に達しているかどうか微妙だ。おそらく0.5~0.6といったところだろう。

Photo04:600DMIPSのコアを4つ使っても2400DMIPSにならない辺りがマルチプロセッサの難しいところで、システム全体で2000DMIPSが必要という場合には対応できても、あるアプリケーションが1000DMIPS必要という場合にはうまくこなせないケースがある。こうしたケースではシングルコアの方が柔軟性が高い。

Photo05:NEON自体は昨年のFPF2004で初めて発表され、また今年のSPF2005ではDSPっぽい使い方をする応用例が発表されるなど、使いこなし方の蓄積がたまりつつある事を伺わせるが、これがやっと標準搭載になったわけだ。

Photo06:NEONを標準搭載したとは言え、内部的には別のパイプラインに分かれている事が伺えるが、もともと別のものとして開発してきた関係もあるし、仮に顧客がNEONを不要といえばそれに対応できないといけないから、この構造はリーズナブルだろう。

今回のCortex-A8、整数演算命令に関しては従来のARM11までと互換性があるようで、他にTrustZoneThumb-2についても引き続き搭載される。一方変更されたものとして、Jazelle-RCT(従来のJazelleを拡張)やNEONの標準搭載が挙げられる(Photo05)。

さて、一番興味深い内部構成であるが、全体のパイプラインはPhoto06に示す様になっている。そもそもなぜIn-orderなのかという話に関して、Out-of-Orderを実装すると複雑になりすぎ、消費電力増加の要因になることと、2 IssueのパイプラインならOut-of-Orderを実装しなくても高い効率が発揮できることが主な理由として説明された。実際Photo06を見るとパイプライン自体は4つ(実際は3つ。後述)だが、LS(Load/Store)とMUL(乗算:実際はこれは乗算だけでなく、Complex ALUなのだろう)が別パイプラインになっているだけで、通常のALU(Simple ALU)は2本のみである。この程度ならOut-of-Orderを搭載しなくてもそれなりに効率は上がるだろう。ちなみに設計目標として挙げられた中には"Fire-and-forgot instruction issue removes key critical paths from the design"なんて言葉もあり、よく使われる短めの命令に注目してパイプラインを作ったと考えられる。こうした"Fire-and-forgot instruction"(元々は軍事用語で「撃ちっぱなしにすれば勝手に目標に到達してくれるミサイル」を意味する用語)はComplex ALUで処理されるのではないかと考えられる。

Photo07:Early Decode→Decodeまでは独立で行い、そのあとDecode Queueで一度シーケンシャライズ。ただ、実際にどのパイプラインに割り付けるかのスケジューリングはその後の"Scoreboard+issue logic"で行うものと見られる。

Photo08:LSのパイプラインが3段ということがちょっと驚きである。L1のレイテンシはかなり少ない設計になっているのだろう。

Photo07はデコーダ段の詳細であるが、2命令の同時デコードを実装していることが判る。Photo08は実行ユニットの詳細で、これを見るとALU(Simple ALU)とMUL(Complex ALU)が同一ユニットとして動作することがわかる。つまり、

  • Simple+Simple
  • Simple+Complex
  • Simple+LS

というケースに最適化されたパイプラインということだ(Complex+LSの動作は考えていないように見える)。

パイプラインが長くなるに従って必然的に考えなければならない分岐予測については、Photo09の様な仕組みとなっている。分岐予測ミスは13クロック(勿論これはL1 Hitの場合で、L1ミスとかL2ミスなんて話になったら、どんどん長くなるのだが)というのはかなり少ないが、それよりも分岐予測が512エントリのBTBと4096エントリのGHBから構成されているというのが興味深い。局所分岐には512エントリで足りるとしているのは、あるソフトウェアのモジュール内処理から別のモジュール内処理に移動した直後はある程度分岐ミスが多発することを許容していると見られる。それよりも大域分岐を重要視した設計になっているのが、非常に興味あるところだ。

Photo09:ちなみにARM11(ARM v6)の場合、64エントリのBTAC(分岐先アドレスキャッシュ)と静的分岐予測、及び3エントリのリターンアドレススタックから構成される。いかにCortex-A8が強化されているかが伺える。

Photo10:"32k 4-way set associative data cache"とはL1データキャッシュの事だろう。

Photo10がメモリシステムの構成である。ちょっと話が戻るが、Photo06でBIU PipelineのL1に入る2つのコントロールが"L1 instruction cache miss"及び"L1 data cache miss"とあるから、L1命令/データキャッシュを搭載することは間違いない。従ってPhoto10のパイプラインは、L1ミスが発生した場合、及びLSユニットでWritebackが発生した場合に動作することになる。先に述べたとおりL2は9clockでアクセス可能になっている。またパイプラインを見る限り、ARMv6で導入された仮想メモリー・システム(VMSA)を今回も継承しているようだ。これはノンブロッキング動作及びHit under Miss動作をサポートし、仮にキャッシュミスが発生しても、その後の命令がキャッシュヒットしていればパイプラインの実行が可能である。これによりキャッシュミス時のペナルティを最小限にできる事になる。

ところで興味深いのは、L2に加えてL3までサポートしていることだ。しかもそのI/Fが通常のSRAMではなく、AXIを使っている事がさらに興味深い。考えられるのは、複数のCPUコアと大容量キャッシュがAXIで接続されるというマルチプロセッサ構成であろう。つまりCortex-A8もやはりマルチプロセッサ構成で性能を飛躍的に上げることが可能だと思われる。

NEONに関しては、Photo11の様に実行ユニットとは完全に独立して動く形になる。ただ独立してといっても、どこかで結果を受け取るために同期する必要がある。従ってE0ステージでNEON命令発行後、10クロックでNEONの処理が終わり、これをE5ステージで同期する形になる。この間ALUとNEONはどちらも並行して動作するから、差し引き5クロック分のレイテンシが発生するという計算だ。もっともこの間に他のことをALUにさせようとするとOut-of-Order機構が必要だし、通常SIMD命令は連続して行われる事が多いから、かなり大量の命令をOn-the-flyで発行できるようにしないとメリットは少ない。手間を掛ける割に効果が少ないから、5クロックのペナルティを素直に受けるほうが賢明なのだろう。ちなみにNEONの内部構成はPhoto12の様になっている。

Photo11:先にちょっと触れたVMSAのお陰で、NEON→ALUへの結果のフィードバックがALUのパイプラインに悪影響を及ばさないとしている。

Photo12:IEEE準拠の単精度/倍精度演算が異様に高速なのが目立つが、これはSIMDではないためだろう。

こうした結果として、Cortex-A8の性能はかなり高くなっているとする。Photo13は幾つかのアプリケーションでの実施結果を示しているが、実はこのうちMPEG-4とMP3 Decoderの結果は昨年のFPF2004で発表されたNEONの性能(Photo14)とほぼ等しく、Cortex-A8コアの性能には無関係っぽい。新しいのは"Quake-2 like"アプリケーションで、完全ソフトウェアレンダリングだからここがCortex-A8コアの出番だろう。304MHzという周波数の評価は難しいが、従来のARM9/ARM11では半分以下の性能だから、同等のフレームレートを出すためには600MHz以上で駆動せねばならず、現実問題としてこれは不可能である。少なくとも今までは不可能だったアプリケーションのポーティングが可能になったという点で、Cortex-A8の性能の高さは判るだろう。

Photo13:肝心の"Quake-2 like"アプリケーション(要するにFPSゲームということだろう)の詳細がわからないから、このままではなんとも評価しにくい。

Photo14:FPF2004のARMの発表"ARM NEON Technology"より抜粋。

いずれにせよ、これでARMも遂に2000DMIPSの性能を手に入れた事が明らかになり、MIPS32やPowerPCのローエンド製品を追撃することが可能になった。当初はライセンスコストが高いだろうし、90/65nmプロセスでの製造もまだ安いとは言えないから、そう普及するとは思えない(MarvellがFeroceonを開発した理由が、Tigerコアのコストが高すぎるだったことを挙げているのは無視できない。Cortex-A8は、適切なサイズのL2キャッシュを組み合わせないとその性能は発揮出来ないだろうし、それを130nmなどで製造したらダイサイズはかなり大きくなる。コアの4平方mmにしてもこれは65nmプロセスだから、90nmなら8平方mm、130nmなら16平方mmに達する)。それでもやがては広く普及するようになるだろうと筆者は予測する。かつてARM11もそうで、最初の年はライセンスを受けたのがたった1社だったのに、2年もすると10社近くに増え、今では大手のARM製造ベンダーは全てARM11をカバーしている。同じ事がCortex-A8にも起こりそうである。

Photo15:今年春のSPFでのMarvellのプレゼンテーションより。一番最後の行に注目

人気記事

一覧

イチオシ記事

新着記事