後藤弘茂のWeekly海外ニュース
ARMの省電力技術「big.LITTLE」がいよいよモバイル機器にお目見え
(2012/12/5 15:15)
ペアで登場するARMのCPUマイクロアーキテクチャ
ARMは次世代の64-bitマイクロアーキテクチャ「Cortex-A57(Atlas)」と「Cortex-A53(Apollo)」を発表した。なぜ、ARMは2種類の異なるマイクロアーキテクチャのCPUコアを同時に発表したのか。それは、ARMが異なる特性のコアを組み合わせることで、システムの消費電力を下げようとしているからだ。
Cortex-A57は性能重視の大型コア、Cortex-A53は低電力の小型コア。ARMはこの2種類のCPUコアを、負荷に応じて切り替えることで、電力を抑えようとしている。ARMはこのアーキテクチャに「big.LITTLE Processing」という名前をつけている。負荷の高いタスクを実行する際には大型のbigコアに切り替えて迅速に処理を終える。負荷の低いタスクになったら小型のLITTLEコアに戻して電力を抑える。
ARMは現在、big.LITTLEを同社の低消費電力技術の柱として打ち出している。そのため、今後も同社のフラッグシップのCPUコアは、大型コアと小型コアのペアで登場することになるだろう。実際には、Cortex-A57とCortex-A53はbig.LITTLEの2世代目だ。1世代目では、bigはCortex-A15、LITTLEはCortex-A7となる。big.LITTLEの1世代目は、すでにモバイル向けのSoC(System on a Chip)に実装した製品が開発されており、ソフトウェアの準備が整う2013年前半から、いよいよbig.LITTLEが現実に提供され始める。big.LITTLEは、スタート直前の段階に差し掛かっている。
ARMがbig.LITTLEアーキテクチャを導入する理由は、モバイルCPUに要求される性能範囲が広がったことにある。ユーザーは、より快適なレスポンスや高度なアプリケーションを求める。その一方で、バッテリ駆動時間が減ることは不快に感じる。そのため、スマートフォンやタブレットなどのSoCでは、高性能と超低消費電力の両方へと性能範囲を伸ばす必要に駆られている。
単一のCPUアーキテクチャでは、高性能と超低消費電力の両方のニーズを満たすことは難しい。しかし、高性能CPUと、超低消費電力CPUの2種類を載せて、タスクによって切り替えれば、両方のニーズを満たすことが可能になる。big.LITTLEは、こうした構想で産み出された。
最初のbig.LITTLEはCortex-A15とCortex-A7
第1世代のbig.LITTLEでは、bigのCortex-A15と、LITTLEのCortex-A7の2種類のCPUコアを載せる。命令セットは完全互換で、実装されたマイクロアーキテクチャが異なる2種コアによるヘテロジニアス(Heterogeneous:異種混合)だ。旧来の言い方に直せば、非対称マルチコア構成となる。ちなみに、ARMはヘテロジニアスコンピューティングに積極的に取り組んでいるが、それは、bigとLITTLEの同アーキテクチャコア2種と、GPU型のスループットコア、そして特定用途向けアクセラレータの4タイプのコアの組み合わせを想定している。そして、CPUとGPUの間はLLVM (Low Level Virtual Machine)で抽象化するアプローチを取ろうとしている。
ARMはbig.LITTLEの利点を立証するために、社内テストチップを開発してbig.LITTLEの実証実験を行なってきた。これは、Cortex-A15が2コア、Cortex-A7が3コアの構成で、性能と電力の実証テストなどを行なった。昨年の段階では構想だったが、現在は実証も終わり、製品化を目前にしている。
ARMの構想では、big.LITTLEに沿ったモバイルコンピューティングデバイスのSoCは、Cortex-A15/57を2~4コア、Cortex-A7/53を2~4コア載せた構成となる。合計で最大8コアが、スマートフォンやタブレットに乗ることになる。実際に、SamsungのSoC「Exynos」の次世代品は、4個のCortex-A15と4個のCortex-A7を載せたオクタコア構成となる。
big.LITTLEの最初の段階では、基本的にはbigコアとLITTLEコアは同数の構成が望ましい。同数のCPUコアの間でしか、迅速かつ簡易にタスクを遷移できないからだ。また、ハードウェア的には割り込みコントローラを共有して割り込みを遷移できるようにする必要がある。さらに、bigとLITTLEの両CPUクラスタの間をコヒーレントバスで結ぶことで、CPUコアのアーキテクチャルステイトをキャッシュ経由で渡すことができるようにする。
後者の仕組みのために、CPUコア間でのタスク遷移の際に、ステイトを外部メモリに書き出す必要がない。そのため、スイッチングにかかる時間は最小に抑えられる。実際にはCPUコアを立ち上げるまでに時間がかかるが、その間は現在タスクを実行しているコアを走らせることで隠蔽する。
CPUコア間のタスクのスイッチによって処理が止まるブラックアウト期間は、オフにするCPUコアのアーキテクチャルステイトをキャッシュに書き出し、オンにしたCPUコアに復元するまでの時間だけとなる。ステイトの保存にかかる時間は、CPUコアの周波数によって異なるが600MHzで切り替えるとしたら8.3us。ステイトの復元は同じ周波数なら同時間。切り替えの周波数を低くすればするほど保存と復元にかかる時間は長くなる。ARMの説明によると、最小ではブラックアウトは20us程度まで抑えられるという。
ちなみに、ARMのbig.LITTLE構成では、L2までのキャッシュはクラスタに付属しており、bigとLITTLEの間で共有されていない。これは、LITTLEコアのキャッシュを小さく低電力にできるようにしたためだ。そのため、タスクを遷移した場合には、キャッシュのフラッシュとウォームアップのタイムラグも発生する。そこで、big.LITTLEでは、それら時間を隠蔽する仕組みも組み込んだ。
オフにしたCPUコアのキャッシュがフラッシュしてDRAMに書き戻すまでの間は、オンにしたCPUコアがスヌープできるようにする。こうした工夫でタスク遷移時間を短くしている。
クラスタベースからCPUコアベースへと発展
昨秋にbig.LITTLEをARMが発表した際には、bigとLITTLEのスイッチは、クラスタ単位でしかできなかった。例えば、4CPUコアのCortex-A15クラスタと、4CPUコアのCortex-A7クラスタでスイッチする。クラスタマイグレーションモデルでは、負荷の高いタスクに引きずられ、全てのコアが高性能コアに切り替わってしまうため効率が悪かった。
そこで、今回はCPUコア単位でスイッチするCPUマイグレーションモデルが設けられた。実際には、このCPUマイグレーションモデルでbig.LITTLEを立ち上げるという。最初のコンセプトのクラスタマイグレーションモデルは、2011年にプロトタイプソフトウェアが提供されたが、現時点では正式なモデルとしては提供されない。
CPUマイグレーションモデルでは、bigクラスタのCPUコアは、LITTLEクラスタのCPUコアと1対1でペアとなりスイッチする。そのため、負荷の高いタスクを実行する場合は、必要な数のCPUコアだけをbigコアにスイッチし、それ以外のコアはLITTLEコアのまま動作させることができる。より効率的で、電力を効果的に抑えることができる。
クラスタマイグレーションも、CPUマイグレーションも、どちらもソフトウェア側の変更が小さくて済む。アプリケーションとシステムアーキテクチャでは、変更が全く必要がない。タスクマイグレーションのトリガも、バーチャライゼーションを使う場合はHypervisorが発行し、OS側から抽象化される。
タスクが遷移するポイント自体は、CPUの電圧と動作周波数を切り替える「DVFS(Dynamic Voltage and Frequency Scaling)」のステップの中に組み込まれる。bigコアが一定の周波数にまで下がると、LITTLEコアに切り替わるトリガが発行される。LITTLEからbigの場合は逆に一定の周波数に上がると切り替わる。OSにすでにあるDVFSの仕組みを使うため、実装が容易だ。
また、ARMは完全にヘテロジニアス動作するマルチプロセッシングモデル「big.LITTLE MP」も提供する。この場合は、OSがタスクをスケジュールして、負荷の高いタスクをbigコアに、負荷の低いタスクをLITTLEコアに割り当てる必要がある。こちらもハードウェア側の変更は必要なく、ソフトウェア側だけの対応だが、OSのサポートが必要であるため時間がかかる。現在は、開発中と表明されている。
big.LITTLEに乗り気のSamsung
10月に米国で開催されたARMの技術カンファレンス「ARM Techcon 2012」では、Samsungがbig.LITTLEについて詳しいセッションを行なった。Samsungによると、すでにCortex-A15ベースのExynosにCortex-A7を組み込んでbig.LITTLEの実証を行なっているという。実チップベースであるため、Samsungの発表は具体的だ。
Samsungの検証システムでは、bigのCortex-A15は800MHzから1.7GHzで動作、LITTLEのCortex-A7は200MHzから1GHzで動作。電圧は0.9から1.2Vで遷移する。Cortex-A15からCortex-A7へとスイッチする下のしきい値はCortex-A15で800MHzに設定したという。逆のCortex-A7からCortex-A15へのしきい値は、Cortex-A7で1GHzだ。
そのシステムでの検証の結果、性能はCortex-A15だけのシステムとほぼ同等、電力は逆に最大で68%も低減できたという。電力低減の効果が劇的なのは、実際にはタスクの大半が、LITTLEコアで処理できる程度の負荷のもので占められているからだ。下のチャートはCortex-A9の負荷を示したものだが、bigコアが必要な赤い部分は極めて限られていることがわかる。
big.LITTLEアーキテクチャは、発表された2011年秋の段階では、はたしてライセンシーのSoCベンダが乗ってくるかどうか未知数だった。ARMは「OEMの反応はいい」と説明していたが、実際の製品プランでは証明されていなかった。しかし、現在は、Samsungが積極的に対応しており、先行きが晴れてきた。
x86でbig.LITTLEを目指したMontalvo
このままARMの思惑通りに運べば、ARMベースのモバイル機器では、big.LITTLEで大小のコアを備えることが当たり前になって行く可能性がある。ARMはCortex-A7/53のコアは非常に小さいため、実装が進むと見ている。
では、big.LITTLEはARMだけの特権なのか。このアプローチはPCの世界に持って来ることはできないのだろうか。もちろん、PCでもできる。
そもそも、big.LITTLEと同様のアイデアは、以前から何度か浮上していた。そして、x86互換CPUの世界でも、big.LITTLE的なアイデアを実現しようという動きがあった。最も顕著な例が、シリコンバレーのCPUベンチャーMontalvo Systemsだった。
Montalvoは、元NexGenのVinod Dham氏や元Transmeta CEOのMatt Perry氏、Microprocessor Reportのアナリスト達など多彩な顔ぶれが揃った企業だった。そして、同社はx86互換の大型CPUコアと小型CPUコアを組み合わせた、非対称のマルチコア構成のCPUを開発しようとしていた。負荷の高いアプリは大型コアで、負荷の低いアプリは小型コアで実行する仕組みだ。
Montalvoのオリジナルプランの詳細はわからないが、基本のアイデアは、big.LITTLEと似ているように見える。当時、Montalvoの関係者は、2009年頃には製品の説明をメディアに対して行なえるだろうと語っていた。しかし、MontalvoはSun Microsystemsに買収され、Sun自体もOracleに買収され、そのごたごたの中でMontalvoのx86も消えてしまった。ちなみに、Montalvoの開発チームは四散したが、その一部はNVIDIAに行ったと言われている。ARMがbig.LITTLEを発表する前に、NVIDIAがTegra 3で、Cortex-A9の性能最適化クアッドコアと電力最適化シングルコアでスイッチするアーキテクチャを導入している。
Montalvoは消えたが、同社の試みは、x86でも同じアイデアが可能であることを示している。そして、IntelもAMDも、高性能のx86 CPUコアと、ローパワーのx86 CPUコアの2種類を持っている。Intelなら22nm世代の「Haswell(ハズウェル)」と、22nmのAtomコア「Silvermont(シルバーモント)」の組み合わせができそうだ。AMDなら、28nmでBulldozer系の「Steamroller(スチームローラー)」とBobcat系の「Jaguar(ジャガー)」で、似たようなアプローチはできそうだ。
また、Intelはぬかりなく研究も行なっている。例えば、コンピュータアーキテクチャの学会「International Symposium on Computer Architecture (ISCA' 12)」での「Scheduling Heterogeneous Multi-Cores through Performance Impact Estimation (PIE)」と題した共同研究の論文で、big.LITTLE型のCPU構成での性能予測研究を行なっている。Intelは、以前からHPC(High Performance Computing)分野で、同じ命令セットアーキテクチャでのbigとLITTLEの組み合わせの研究を行なっており、このアプローチの可能性についても目を光らせている。