AMD K5(左)とIntel Pentium Pro(右)1995年~1996年に登場した、「CISCの皮を被ったRISCプロセッサ」の初期の機種。いずれもx86命令セットで書かれたプログラムを内部で独自のRISC命令に変換して実行する

ARM系プラットフォームを考える 後編

  • このエントリーをはてなブックマークに追加

by [2017年6月26日]

前編ではARM系プロセッサの特徴について、命令セットやレジスタの面等から見てきました。後編ではCISC vs RISCの競争の歴史と、ARMの強力な武器となっているbig.LITTLEなどについて見てゆきたいと思います。

巻き返したCISC陣営

AMD K5(左)とIntel Pentium Pro(右)1995年~1996年に登場した、「CISCの皮を被ったRISCプロセッサ」の初期の機種。いずれもx86命令セットで書かれたプログラムを内部で独自のRISC命令に変換して実行する

AMD K5(左)とIntel Pentium Pro(右)
1995年~1996年に登場した、「CISCの皮を被ったRISCプロセッサ」の初期の機種。いずれもx86命令セットで書かれたプログラムを内部で独自のRISC命令に変換して実行する

もっともApple Macintoshに採用されたIBM/モトローラによるPower PCや、それまでのモトローラM68000シリーズに代わって各社のワークステーションで多用されるようになったMIPS Rシリーズ、それに自社のワークステーションに搭載されて大きな威力を発揮したSUN SPARCといったRISCプロセッサの急速な台頭に対し、CISCの代表格であったx86系プロセッサでは1990年代中盤以降IntelのPentium ProやAMD K5などにおいて、(互換性維持のため)CISC命令セットで書かれたプログラムコードを受け取って命令デコーダでRISCプロセッサの命令に変換、実際には命令デコーダの後に置かれたRISCプロセッサ実行ユニット群が演算処理を行う、という両者の良いところ取りによる二重構造のアイデアが登場して巻き返しを図り、これに対抗するようになりました。

※AMDは1980年代後半から独自の命令セットによるRISCプロセッサとしてAm29000シリーズという機種をレーザープリンタの印刷エンジンなどの組み込み用途向けを中心に開発・製造販売していました。K5はそのAm29000の設計を基本としつつ命令デコーダ部分などを変更・拡張した機種で、x86系のCISC命令セットによるプログラムコードを受け付け、命令デコーダ内部でAm29000のそれに類似したRISC命令セットに変換して実行ユニットに渡すという処理を行っています。

その結果、今ではほとんどのx86/x64系プロセッサで「ソフトウェアから見るとCISCだが実際には命令デコーダ部分でCISC命令をRISC命令に変換して実行する」という構成が当たり前に利用されています

※RISCの台頭、CISCの衰退が盛んに叫ばれていた1990年代中盤に登場したこの技術は業界に大きな衝撃を与え、以後CISC衰亡論は鳴りを潜めることになりました。また、この時期に見られたWindows NTをRISCプロセッサで動作させる動きもこれ以後次第にフェードアウトして、Windows 2000ではx86系に一本化されています。ちなみに現在広く使用されているx86/x64系プロセッサでは、一時期のIntel ATOMプロセッサが例外的に純粋なCISCプロセッサであるのみで、それ以外は「CISCの皮を被ったRISCプロセッサ」となっています。

一方、RISCプロセッサは高性能化実現の過程で命令セットの複雑化や新命令追加などによって次第にCISCプロセッサに近い構成となった機種が少なくなく、結果CISCとRISCを対立的に捉える議論はほとんど意味が無くなってしまいました。

また、この時期には日本の半導体メーカー各社もNECのV8xxシリーズや日立製作所のSuper Hシリーズなどで独自のRISCプロセッサを開発する動きがあり、それ以外にもNECや東芝がMIPS Rシリーズの改良に大きくコミットするなど興味深い動きがあったのですが、いずれも決定的に大きな成功を収めるには至らず、比較的短期間で市場からフェードアウトしてしまっています。

※ただし日立のSuper HシリーズはSH2がセガ・エンタープライゼスの家庭用ゲーム機“SEGA SATURN”に採用され、その後継となるSH4が同じくセガの“Dreamcast”に採用されており、一定の成功は収めています。また、ソニーは東芝と組んでMIPS Rシリーズを独自拡張したEMOTION ENGINEをPlayStation 2に搭載、こちらは搭載製品の大ヒットで空前の大成功となりました。なお、NECのV8xxシリーズはNECホームエレクトロニクスの家庭用据え置きゲーム機PC-FXや任天堂のVirtualBoyのプロセッサとして採用されたものの搭載製品がヒットには至らず、以後は車載・パソコン周辺機器(光学ドライブなど)向けの組み込みコントローラに活路を見出し、事業がルネサスエレクトロニクスに移管された現在も供給が続いています。

命令デコーダの高機能・高性能化と肥大化

ただ、x86系プロセッサでのこうした改良はRISCプロセッサに対抗できるだけの高性能化を実現した一方で、命令を受け取ったCPUの内部で最初にその命令を解釈する命令デコーダと呼ばれる回路ブロックの肥大化・複雑化を引き起こしました。

高速処理のための命令パイプラインの並列化やアウトオブオーダー命令実行、投機実行などの新技術の導入もあって、現在のx86/x64系プロセッサにおいてはこの命令デコーダ部分はキャッシュメモリを除くとチップ上で最も大きな面積を占めるようになってきており、また消費電力もそれに見合う形で増えてしまっています。

もちろん、ARM系プロセッサでも改良・強化の過程でそれら高速処理のための技術が段階的に導入されたのですが、命令体系がシンプルで元々の命令デコーダ部分が小さいため肥大化してもx86/x64系プロセッサの比ではありません。

※ただしこれはCISCでは命令デコーダでリアルタイムに処理している内容を、RISCプロセッサの場合はプログラミングの過程でコンパイラなどに丸投げして事前に処理させているというだけの話で、こうした処理自体はどこかで大きな負担となっています。

整理された命令セットと多数の汎用レジスタの組み合わせを利用できることは、このように半導体の具体的な設計にも少なからぬ影響があって、ARM系を含むRISCプロセッサの大きなアドバンテージです。

ARM系アーキテクチャを特徴づける多数のCPUコアバリエーション

ところで、現在のARM系プロセッサは、x86をはじめとする他のプロセッサにはない特徴があります。

それは、製品ラインナップとして、複数の性能・回路規模の異なるCPUコアが提供されていることです。

これには、ARMがあくまでCPUコアやGPUなどの論理的な回路設計、あるいはそれを基礎とする標準的な具体回路設計を半導体メーカー各社へ提供・ライセンス供与する半導体設計会社であることが大きく影響しています。

回路設計の提供を受けた各社は自社工場、あるいは半導体製造を専業とする台湾TSMCやGlobal Foundriesのようなファウンドリでその設計を組み込んだSoCを製造する訳ですが、ARMの立場ではそこで利用する半導体製造プロセスルールの範囲を絞れても、顧客のオーダーを考慮すればどこか特定のファウンダリの持つプロセス技術に全面依存することはできません。

つまり特定の半導体製造プロセスの利用を前提として論理回路の設計をチューンする訳には行かないのです。

このため、ARMのCPUコア設計においては、Intelのようにローエンドからミドルレンジの上程度までの幅広い領域で同じ1つのCPUコアの設計を使いまわすことが難しい状況にあります。

Intelの場合、例外的な存在であるAtomプロセッサやハイエンドのXeonプロセッサ、あるいはそのチップを流用したCore i7の上位モデルなどを別にすると、ある1つの世代のチップでは基本的にローエンドのCeleronからCore i7まで同じチップ設計(同じマスクパターン)で機能の作り分けやスクリーニングによる高クロック周波数動作品の選別を行っています。

同社がこれができるのは、低クロック周波数動作から高クロック周波数動作まできちんと動作し、しかもその性能に見合った消費電力での動作を可能とするだけの半導体設計製造ノウハウとそれを実現する工場を自前で持っていればこそなのです。

その点は実際に自分たちの手で半導体の量産を行わないARMの不利な点で、だからこそARMは消費電力や性能について顧客各社のニーズに合わせ仕様や回路規模を変えた、ソフトウェア的には完全互換のCPUコアを複数設計し提供する必要があるのです。

弱点を武器に変えたbig.LITTLE

もっとも、この同一機能を備えた異なる回路規模・異なる性能の互換CPUコアを複数提供していることは、ARMに他に無い強みをもたらしました。

最小規模で低消費電力のCPUコアと、大規模かつ高性能なCPUコアを組み合わせこれらを必要に応じ適宜切り替えて動作させることで、消費電力と性能のバランスを取る技術が考案されたためです。

この技術はbig.LITTLEの名で呼ばれており、例えばCortex-A53とCortex-A57をペアにすれば、消費電力や負荷などに応じてペアを組むCPUコアの相互間で処理を移動して実行できるようになります

※構成によってはあえてペアとせず、全コアを同時稼働させることで最大性能を得ることも不可能ではありません。但しこの場合はプロセッサ全体の冷却が十分できることが前提となり、それができない場合はその稼働時間に制限がかかることになります。

もちろん、この技術を適用するためには各CPUコアそれぞれが全く同一の汎用・専用レジスタを搭載しその挙動が完全に同一でなければなりません。

ソフトウェア側から見ると処理速度以外完全に等価な動作を行い、しかもそれらのレジスタ等のソフトウェア動作中の情報を全てペアを組むCPUコアとの間でやりとりできる設計であることが、この技術では特に重要な要素なのです。

加えて言えば、これは最小規模のCPUコアが高性能CPUコアと比較して充分小さなサイズ・回路規模となり、それでいてそれによる性能低下があまり大きくなければ採用するメリットが薄い技術でもあります。

その点で元々ミニマムな命令セットを備え命令デコーダなどもシンプルに作れ、その場合でもそこそこの性能が期待できるARM系プロセッサは、素直に作っても命令デコーダ周辺の規模が大きくならざるを得ないx86系プロセッサなどよりも有利で、実際先に挙げたCortex-A53とCortex-A57の場合、チップ写真を見ても小さなCortex-A53が一体どこに配置されているのか判らないほどです。

なお、このbig.LITTLE技術はARM純正のCPUコア限定ではありません。

ARM v7・v8系の対応するアーキテクチャにきちんと従って設計されていれば、他社製CPUコアでも利用可能で、実際にもサムスンが開発した「Exynos 8895」に搭載されたARM v8アーキテクチャ準拠の64ビットCPUコアである「Exynos M2」はARMのCortex-A53チップと混載されています。

このあたりはARMとの契約で技術供与を受け、独自にCPUコアを開発する各社の思惑や方針と絡むので色々難しい部分もあるようですが、いずれにせよ独自のCPUコア開発を行う場合でさえそのような選択肢が提供されることはARM系プロセッサの大きな優位点と言えるでしょう。

※何となれば、低消費電力・軽負荷のタスクでの動作をCortex-A53に分担させることで、自社オリジナル設計のCPUコアはそうした動作を無視して高速・高性能に特化したチューンが可能となるためです。もちろん、「Kyro」シリーズで低速軽負荷から高速重負荷までチューンによる多少の作り分けはあれどほぼリニアに1種類の設計のCPUコアに対応させたQualcommのように、半導体の物理設計/チューンのノウハウが潤沢でARM純正CPUコアと混載での独自CPUコア搭載を行わないメーカーもありますが、この場合でも「Kyro」シリーズ同士でのハイ・ローミックスにより「big.LITTLE」技術を導入しており、ARM系アーキテクチャであることの恩恵は充分以上に享受していると言えます。

多コア化のもたらすもの

また、メインとなる高性能CPUコアと同じ命令が実行可能な小型CPUコアが提供できることは、そうした小型CPUコアを多数搭載したマルチCPUコア構成の機種を作りやすいということでもあります。

現在のマルチタスクOSではアプリの実行中にCPUが処理動作を行っているそのアプリの状態(つまり全レジスタの情報など)を保存・待避し、中断状態で保留中の別のアプリの保存・待避された情報を読み込んでその別のアプリの(中断していた)処理を続行させる、コンテキストスイッチという処理を行っています。

これは、例えばある単位時間に16本のアプリが実行されている場合に、何らかの形でその単位時間を16に区切ってそれぞれの時間で各アプリの処理を順番に行うためには必須の技術です。

つまり、この種のマルチタスクOSでは実際にはある単位時間にそのCPUコアで実行されているアプリの本数の分だけ、逐次「アプリの状態の待避→待機中の次に実行されるアプリの状態の復元…」という処理がアプリ本体の処理の前後で常に実行されているということになります。

このコンテキストスイッチは当然ながらCPUの内部状態の情報を読み出してメモリに待避・保存し、次の順番の直前で再度読み出すという処理を行うため、「塵も積もれば山となる」ということでCPU・メモリ共にそれなりに大きな負担となっています。

スマートフォンで半導体製造プロセスの進化に後押しされての事とは言え、8コア以上のCPUコアを搭載する機種が珍しくなくなったのは、バックグラウンドで動作しているタスクが多いスマートフォンの場合、メインの高性能CPUコアに軽負荷でも多数のプログラムを並列処理させて、そうしたコンテキストスイッチの処理負担を大きくする位ならば、小さく低性能なCPUコアを多数搭載し、コンテキストスイッチ動作を極力少なくする方が有利であるということなのでしょう。

その考え方を現状で突き詰めたのが、モバイル向けプラットホームとしては世界初の10CPUコア(Decaコア)を搭載するMediaTekのHelio X20/X25です。

これら2種のSoCでは高速高性能のARM Cortex-A72コアを2基(最大2.3GHzあるいは2.5GHzに)、Cortex-A53(最大2.0GHz)を4基、Cortex-A53(最大1.4GHz)を4基搭載しており、アプリの負荷に応じてこれら3つのCPUコアクラスタの間での処理の移行や使用されるCPUコア数の増減を動的に切り替えるようになっています。

このあたりはメーカー各社が自社でCPUコアを新規設計するだけの技術力や経験があるかどうかで分かれているという見方もできますが、パソコン用CPUが、Hyper-Threadingのような1コアの余力を最大限使いきる技術の導入により長らく最大でも物理6コア、論理12コアの等価な性能のCPUコア構成で推移してきたのと比較すると、CPUコアそのものの設計製造技術と共にOSやアプリ側に求められる挙動などにも違いがあることが見て取れます。

※最近はAMDによる「Ryzen 7」の市場投入により物理8コア、論理16コアのマシンが少しずつ増えています。なお家庭用据え置きゲーム機ではPlayStation 4もXbox Oneも物理8コア(論理8コア)となっています。

また、こうした多コア化は高負荷高速処理を求めるアプリと低速軽負荷での処理で充分なアプリが並列して実行されている状況で、小まめに低速側CPUコアの担当クラスタを移行させたり、使われていないCPUコアを停止させて消費電力を少しでも低減させたりするのに有益です。

x86/x64系プロセッサでも各CPUコア単位でその負荷に応じ動的な電力供給の制御を行って消費電力を少しでも少なくするような技術開発が進められていますが、処理すべき対象を細分化して使っていないCPUコアが出たら即給電をカットし、処理が軽くなったら容赦なく担当クラスタを低速側に切り替えるというARM系プロセッサの考え方は、IntelやAMDがx86/x64系プロセッサで展開している低消費電力化のための電源制御技術と比較すると単純であるものの、その分確実かつ実現が容易な手法であると言えます。

半導体製造プロセス縮小の果てにあるもの

ここまでARM系プロセッサの特徴について、x86/x64系プロセッサとの比較で見てきました。

一言で言えばARM系プロセッサの特徴は「x86/x64系プロセッサよりも小回りが効き自由度と効率の高いCPUコア/電源制御」ということになりそうです。

未だ半導体製造プロセスの進化は続いているため、当面はこの状況が続くと考えられますが、その一方でフルスペックのWindows 10の動作するプラットフォームにQualcommのSnapdragon 820/835が指定されるなどARM系プロセッサ、殊にハイエンドモデルに求められる性能も急激に高まりつつあるため、今後のARM系プロセッサの進む先がどうなるのか、図りかねる部分が少なからずあります。

Windows 10でのエミュレータ動作を含む高負荷処理を考えると、高速高性能CPUコアではこれまで以上の高性能化が求められるでしょうし、その一方でスマートフォンやタブレットなどでは消費電力を少しでも低減するための節電技術の開発が強く求められ続けています。

また、GPUへ処理の一部をオフロードさせるGPGPU技術への対応も強く求められるところです。

ARM系プロセッサの今後は、x86/x64系が力業で突破してきたこうした相矛盾する要求に、基本的には設計の工夫だけでどこまで破綻せずに対応できるかにかかっていると言えるでしょう。

タグ:
PageTopへ