Keith Diefendorff & Yannick Duquesne
ミップス・テクノロジーズ
2002年7月
より機能の充実した新しい電子機器が毎日のように現れている一方で、既存の装置も進化を続け、より精巧なものへと収斂して行っている。しかし、これらの機能をできる限り小さなシリコンチップに統合しようとする要求も根強い。これが、驚異的な速度でのSOCの複雑性増大の原動力となっている。ムーアの法則は、この課題を満たすための根拠を提供しているが、将来のSOC性能を担う半導体テクノロジの力をもたらすには、過去に使われたものとは異なるアーキテクチャ面でのアプローチが必要である。パイプライン化やスーパースカラ命令といった従来のテクニックは限界に近づきつつあり、推進役となるためには、ベクトル処理やマルチスレッディング、チップ・マルチプロセッシングのような、その他のテクノロジが要求されるようになるだろう。
SOCの複雑性は鰻登り
市場がテクノロジに熟達し続けるとともに、企業は、新しい各電子機器に対して常に最先端の技術を応用している。全ての新世代製品は、より多くの機能とより高い処理能力を持っている。収斂がこの成長を倍加させており、その結果として、いくつかの真に精巧な電子機器が生まれている。
それでも、機能を小さなシリコン・チップ上に統合することの利益は、これまでと同様止むに止まれぬものとして残る。その結果は、SOCの驚異的な成長速度として現れる。ムーアの法則が合理的な製造コストでこれらの信じられないほど複雑な装置を構成するために必要なトランジスタを提供し続けているが、一方でいくつかの大きな変化が進行中である。
変化をうながしている一つの力は、より早く市場へ出す必要性の増大である。新しい電子機器の市場は、かつてよりも急な成長速度を示しており、製品は遙かに速く陳腐化する。今日の市場においてわずか2、3ヶ月の差が、成功と失敗、利益と損失の明暗を分ける。
第二の力は、開発コストの急増である。設計の生産性は、電子機器の複雑さやそれを可能とする半導体テクノロジに追いついていない。そのため、設計コストは上昇している。さらに悪いことに、SOCの生産にかかる固定費はさらに速い割合で上昇している。いくつかの推定によると、90nmマスクの原価は、1セット当たり100万ドルを超えることになる。1995年には、0.35μmテクノロジでの設計およびマスクの原価は、250Kシステム製造・販売するコストの15%未満であるのが普通であった。2003年、90nmテクノロジでは、同等の設計で、設計およびマスク原価が65%に近づこうとしている。
処理能力を向上させる要素
開発コストの上昇は、より最適化された数種類のSOCを設計し、その一つ一つをより柔軟でプログラマブルなものにする動機付けを企業に与える。そうすることにより、設計を再利用して規模の理論を活用し、一つの電子機器を市場に出すまでにかかる平均時間を短縮することができる。さらに、プログラマブルであることにより、企業は製品をより長期間市場に留めておくことができ、総合的な利益を押し上げることができる。
しかし、プログラマビリティを選択肢とするためには、現在、組込みプロセッサコアはハードワイヤードの論理ブロックか、専用プロセッサ(プログラムは困難)を必要とするような機能を実現するために必要とされる処理性能を提供できなければならない。このレベルの処理性能をコスト効率と電力効率よく、またプログラムが容易なプロセッサで提供するためには、現在一般に使われているのとは異なるアーキテクチャとテクニックが必要である。
SOCに実装される機能は多様であり、SOCが使用される特定のアプリケーション領域に依存する一方で、多くの組込み市場に広く横断的に跨る一般的な傾向がいくつかある。例えば、ほとんどの電子機器では、デジタル信号の処理とマルチメディアの処理が全体的作業量の中でより大きな構成部分となってきているというのは、一般的に真実である。事実、これらの仕事は組込みプロセッサ1およびSOCのアーキテクチャをかなり左右している。
これらの力が収斂するに連れ、業界が過去30年間維持してきた55%の複合的年間性能増加率をかなり上回る性能要求の原動力となるであろう。
現在のテクニックでは不足である
伝統的に、高性能組込みプロセッサは、性能の押し上げを主にクロック周波数とスーパースカラ命令の発行に依存してきた。メモリ待ち時間の増大に直面して、キャッシュは、これらテクニックの潜在的可能性を利用できるようにする上で重要な役割を演じてきた。周波数とスーパースカラは非常に役立つもので、今後も利用され続けるであろうが、一方で、それらには限界があり、それが将来期待できる利得を制限することになる。
歴史的に年間約35%の率で来ていた動作周波数の増加は、二つの要素、すなわち半導体の特長の微細化とより深いパイプライン化に要因を求めることができる。この二つの要素それぞれが、利得の約半分に貢献していたのである。
半導体デバイスが本質的に抱えるスイッチング遅延(τ=CV/I)は、年間約20%の割合で着実に改善されており、そのほとんどはデバイスの微細化による。グローバルな相互接続の遅延は、微細化によってあまり改善されておらず、全体的なチップゲインを幾分少なく制限している。今後数年間にわたり、ITRS 20012は固有のスイッチング遅延を年間約17%改善することを目標としている。ローカルな相互接続性能は、この目標を微細化によりクリアしているが、グローバルな相互接続は、回路設計の工作が後れないようにすることが優先され、あまり改善されていない。
周波数の利得の残りの半分は、改良された設計ツールや回路設計の革新も貢献しているが、主により深い命令パイプラインから生じている。より深いパイプライン化は、命令を実行するという仕事をより多くの不連続なクロック・サイクルに分散させ、各サイクルで行われる仕事の量を減らし、動作周波数を比例的に増やすことを可能にする。
パイプライン化には代償もある。より深いパイプライン化は効率が低いのである。追加された各パイプラインステージが、1ステージ毎に2つの"fan-out-four-equivalent"(FO4)のインバータ遅延へオーバーヘッドを導入する。アーキテクチャ面での効率も損害を受ける。より深いパイプラインには、制御フローの変更で長い再起動のペナルティがあり、分岐予測や推論的実行等の複雑な機構が必要とされる。
どの程度の深さまでパイプライン化を押し進めるか、そしてそれでもまだ性能向上を得られるかについては、実用面での制限がある。適格なクロック・パルスは、約7 FO4インバータ遅延に相当する期間以下で提供するのは難しい。ALU等の論理コンポーネントを約15 FOVインバータ未満のピースに分割すると、最終的には周波数ゲインから回収できる以上の仕事を作り出すことになる。組込みプロセッサのパイプラインはまだPCプロセッサほど深くなっていないが、効率はやはり問題であり、それが長期的には深いパイプラインから期待できる周波数のゲインを制限することになる。
プロセッサの周波数は信頼できる性能尺度であり、常に大きいほど良いというのは、市場の残念な誤認識である。高い周波数には、より意欲的な回路設計のためであれ、より深いパイプラインのためであれ、マイナス面がある。主な短所は、電力の消失である。長いパイプラインは効率が下がり、速い装置は電流が漏れ、高速での切換装置はかなり多くのエネルギーを必要とする。
高い周波数の設計では、高速(低-Vt)トランジスタの閾値以下の漏電特性は高いため、静的電力の消費が大きい。動的電力の消費(CV2F)は、スイッチング・キャパシタンス(C)がパイプラインステージと共に上昇し、周波数(F)も(明らかに)上昇し、供給電圧(Vdd)は回路が演算を行うための周波数に比例して上昇しなければならないため大きくなる。半導体の微細化はは、各世代がより低いVddで稼働するため、かつてはぎりぎりで成功していた。しかし、電圧のスケーリングは、シリコンの物理的特性によって設定される限界に近づくに連れ遅くなる。さらに、供給電圧(Vdd)の低下はスイッチングの閾値(Vt)を引き下げ、静的電力を押し上げる。
スーパースカラ命令の発行も限界に近づく。このテクニックは、パイプライン化と同じ効率損失の多くを抱え、さらに加えて、平行依存性分析に関係するその他の損失も持ち込む。命令指定ロジックの複雑性は、発行の幅と共に指数関数的に上昇する。ハザードを回避し、発行スロットを埋める十分な命令の並列性を見つけだすため、しばしば動的命令リオーダーが要求される。複雑性は、この命令ウィンドウの深さと共に増大する。この複雑性が周波数を減らし、雪だるま式の複雑性を生み出すことを予防するためには余分なパイプライン・ステージを追加する必要がある場合もある。
スーパースカラ設計の巧妙さに関わらず、基本的に、このテクニックは、プログラムにおける命令レベルの並列性(ILP)の量によって制限される。利用できるILPが多くない場合、スーパースカラの効率は低くなり、実行ユニットは十分に利用されないままになる。理論的研究の中には、いくつかのプログラムで高いILPを示しているものもあるが、全く小さいILPを示しているものもある。さらに、これらの研究で発見されたILPの多くは、データレベルの並列性(DLP)であることが明らかになっている。DLPが他の安価な手段によって引き出されれば、スーパースカラ・ハードウェアをじっくり検討するための余地はあまり残らない。この安価な手段については後述する。
スーパースカラ・テクニックの最大の問題は、トランジスタの使用に対するリターンの急速な減少である。シングルイシューのスカラ設計からデュアルイシュー設計に移行する中では大きな高速化が達成されるが、第三の発行スロットを付け加えることによる利得は非常に少ない。フォーイシュー以上では、利得は基本的にゼロである。一般的な利用方法である深いパイプラインとの組合せでは、スーパースカラ設計は、深く押し進めすぎた場合、それに対する成果をほとんど示せない、非常に複雑なロジックを生じさせる。
VLIW(Very-long-instruction-word)マシンは、平行して複数の命令を発行することの複雑性を減らすために考案された。VLIWは、命令スケジュールの仕事をハードウェアからコンパイラへ渡し、それによって理論的にはスーパースカラのリターン減少を緩和する。しかし、結果は失望させるようなものであった。VLIWは、結局、スーパースカラと同様複雑なメカニズムの多くを必要としたのである。分岐予測器、フォワーディングパス、パイプライン・インターロック(例、スコアボード)等である。加えて、動的な命令スケジュール・ファシリティの欠如を補うために述語やコード圧縮、回転レジスタ等の新しいメカニズムを付けなければならない。コンパイラにはマシン・リソースを効果的にスケジュールするためのランタイム情報の恩恵がないため、VLIWは、いくつかの種類のコードではひどく難儀する。結果として、VLIWの複雑性は、同様の性能を持つスーパースカラと比べてそれほど低くなっていない。
新しいテクニック
パイプライン化とスーパースカラのテクニックは、それらに関する限りは効果的であることが実証されており、ほとんどの組込みプロセッサはまだそれらの限界まで押し進められていない。しかし、私達が期待する通り性能への要求が現実化すれば、ハイエンドおよびミドルクラスの組込みプロセッサは間もなくそうなるであろう。
幸運なことに、90nm半導体テクノロジは、パイプライン化とスーパースカラのテクニックが止めた部分をいくつかの新しいテクニックによって拾い上げることを可能にするのに間に合いそうだ。90nmテクノロジでは、論理密度はトランジスタ106個/mm2に迫り、組込みSRAM密度は106ビット/mm2を越える。この密度では、100万ロジックのトランジスタまたは100万ビットのメモリのおよその製造コストは、80mm2範囲の通常サイズのSOC上で大体6セント($0.06)になる。
非常に有益な3つのテクニックは、ベクトル処理、マルチスレッディング、およびチップマルチプロセッシング(CMP)である。これらのテクニックには共通して二つの性質がある。パイプライン化およびスーパースカラ発行とは異なるレベルの並行処理を活用すること、およびトランジスタ集約型であることである。並外れて複雑なパイプライン化やスーパースカラのテクニックとは異なり、ベクトル、スレッド化およびCMPは、複雑な制御構造よりも配列されたデータパス・エレメントにより多く依存し、単純なのである。
パイプライン化やスーパースカラのテクニックは、どちらも細粒な命令レベルの並列性(ILP)を活用している。パイプラインは時間的な手段によって、スーパースカラは空間的な手段によってILPを利用しているのである。対照的に、ベクトル処理は細粒なデータレベルの並列性(DLP)を活用しており、マルチスレッディングはスレッドレベルの並列性(TLP)を活用している。また、チップ・マルチプロセッシングは、粗粒なプロセスレベルの並列性(PLP)を活用する。
マルチスレッディング
以前に指摘した通り、ILPハードウェアの一つの限界は、単一の命令ストリームでの並列性がないことである。もう一つの障害は、メモリ・アクセス等、待ち時間の長いオペレーションがあることである。どちらの問題も、命令パイプラインをストールさせ、命令発行速度の平均を引き下げ、実行ユニットを十分に活用できないことにつながる。
マルチスレッディングの背後にあるアイデアは、パイプラインがストールする時間の間、実行ユニットを稼働させつづけるため、より高いレベルの並列性、すなわちスレッド・レベルの並列性を活用することである。スレッドとは命令の流れであり、この流れは、他の流れからは独立したデータ、メモリ、および制御である。スレッドの独立性は、一つのスレッドがストールした時に新しいスレッドに切り換えるという方法で活用することができる。
マルチスレッディングの多くの形が数年にわたって考案されてきた。最も粗い(また最も古い)形は、単純な割込式のマルチタスク化である。この昔ながらのテクニックは、様々なハードウェア構造で数年にわたって改良されており、スレッド切換のオーバーヘッドを減らすことによって粒度を減らしている。実際、有効なマルチスレッディングの鍵はスレッド切換のオーバーヘッドの減少であり、これにより、より多くのパイプライン・ストールをカバーできるようになる。
細粒マルチスレッディングの究極の姿、いわゆる同時マルチスレッディング3(SMT)は、ワシントン大学でSusan EggersとDean Tullsenによって初めて説明された。このアプローチでは、いくつかのスレッドからの命令はマシンの実行ユニットへインターリーブされる。このような細粒スレッディングは、待ち時間をシングル・サイクルのパイプライン・ハザードからでも生じる程度の短さにすることを可能とし、スーパースカラ・パイプラインで典型的に見られるような、IPCを奪うバブルの多くを排除することができる。
あらゆる形のハードウェア支援のマルチスレッディングは、コア内で作動している各スレッドのアーキテクチャ上での状態を保持するためにプロセッサ・リソースの重複を必要とする。これは高価に聞こえるかもしれないが、状態および状況を保持するリソースは、コアのトランジスタに占める部分が小さいのが普通である。
SMTの長所の一部は、多くのスーパースカラ設計が効率向上のために利用しているアウト・オブ・オーダー実行機能と同様の機能を利用することである。SMTは、既存のレジスタリネーミングおよびリオーダバッファ機能の上に簡単に積み重ねることができ、スーパースカラ設計の複雑さがほんのわずか増すだけで済む。
シングルスレッドのスーパースカラ実装に対するスループットの向上には素晴らしいものがある。結果は、根底のハードウェアと処理負荷の詳細により左右されるが、第二スレッドのハードウェアに10%投資すると、30%程度スループットを押し上げることができる。
さらに、SMTは、発行スロットを埋め実行ユニットの活用を押し上げる能力を持つため、無意味なほどに広いスーパースカラ・マシンの構成を可能にする。広いスーパースカラは、ILPに多くあるスレッドに対しシングルスレッドの性能が高いという歴然とした長所がある。SMTマシンは、スレッドの間でハードウェアリソースを簡単に変えることができ、シングルスレッドで高いピーク性能を出すか、またはいくつかのスレッドで高い合計スループットを出すことができる。
しかし、ソフトウェアの問題がある。残念ながら、SMTの基礎となるスレッドレベルの並列性は、ハードウェアに対し明確に特定されなければならない。明らかな並列性が独立したタスクに存在しており、これらタスクをマルチタスクOSはSMT上にスケジュールすることができる一方で、その並列性レベルは実際にはチップマルチプロセッサの方に適していることがある。これについては後述する。SMTの理想的な役割は、シングルプログラムからの小さなスレッドを実行することであろう。この場合、キャッシュ中の命令とデータの共有は基本的に自由であり、非常に速い。
しかし、現在、特に組込みの世界では、プログラマがマルチスレッドの方法でプログラムを構成することはほとんどない。このテクニックは別の理由で人気が出てきているが、これが大規模に起こることはすぐにはなさそうである。期待されたソリューションは、プログラムを独立したスレッドに自動的に分割することをコンパイラに教えることができることである。異なるスレッドとしてループの繰り返しをスケジュールする事は一つの明らかな可能性であるが、より一般的な独立した制御フローを見つけだすことは聖杯探しにも等しい。
Intelは「ハイパースレッディング」と名付けているが、Pentium 4にSMTが採用されたことで、マルチスレッディングの研究は進んでいる。Intelのマイクロアーキテクチャ研究所ディレクター、John Shenに率いられ、投機的プレコンピュテーション、適応性動的プリフェッチスレッド4等、シングル・プログラムに対しスレッド・ハードウェアを行使するための巧妙な方法についての研究が進行中である。
組込みシステムは、SMTにまた別の機会を提供する。多くのシステムでは、リアルタイム応答が必須である。従来、シングルスレッドのプロセッサは、優先割込に応答する時間が長く、また時間の量にばらつきがあった。マルチスレッディングにしたプロセッサは、複数のタスクをナノ秒で走る用意が整った状態に維持し、優先順位の高いタスクへの切換のオーバーヘッドを排除し、リアルタイム応答を大きく加速する。
ベクトル処理
複数発行マシンをより高い発行率にスケーリングする際の深刻な障害は、Flynnボトルネックである。このボトルネックは、スーパースカラ・マシンの複雑性の指数関数的増大の理由である、平行して多くの命令をフェッチし発行することの難しさを表すものである。深くパイプライン化したマシンもあまり良くない。1サイクル当たりの命令(IPC)の観点からは、深いパイプラインをスケジュールすることは、ワイドイシュー・パイプラインをスケジューリングするのと同じくらい困難なのである。
ベクトル・プロセッサは、Flynnのボトルネックに取り組むものだ。ベクトル・マシンでは、一つの命令が多くの演算(おそらくループ全体に値する)を実行し、与えられた仕事の量に対する命令フェッチおよび発行の帯域要求を大きく減らす。
ベクトルアーキテクチャの限界は、高い度合いのデータレベルの並列性が存在する場合にしか応用できないことである。つまり、データセットでの演算は、全ての演算の結果が他の演算から独立しているような演算なのである。この性質は、計算がほとんど行列代数に基づいている科学的アプリケーションのためにIlliac-IVやCDC Star、TI ASC、CRAY-1のような初期のベクトル・マシンが開発された理由である。
しかし、初期のベクトル・マシンは、アムダールの法則にひどく難儀している。これは、全体の高速化は、わずかな量のベクトル化不能なスカラコードでも劇的に低下することを示す法則である。初期のベクトル・マシンはコードのスカラ部分では性能が非常に弱いため、天気予報や兵器シミュレーション等の隙間市場に追いやられた。ベクトル・プロセッサはコンピュータ利用がPCへ向かうに連れ、一層嫌われるようになった。PC時代の最初の10年間、処理負荷のほとんどは完全に性質上スカラで、汎用および制御中心の処理に熟達したアーキテクチャを必要とした。
しかし、数年前、デジタル・マルチメディアのテクノロジがPCを捕らえ始めた。現在、マルチメディア・コンテンツは他のタスクと比較して急速に成長しており、それによってCPUへの関心は高まっている。驚異的な市場アピールを考慮すると、マルチメディアは、既にでなければこれからPCの処理負荷を支配することになり、現在、それはあらゆる種類のコンシューマ・デバイスに急速に広がって行っている。
汎用からマルチメディア処理負荷への重点の切換は、組込みプロセッサに要求されるアーキテクチャを変えるものである。マルチメディア処理は、汎用処理よりも科学での処理に似ている。マルチメディア処理負荷は、ブロック式アルゴリズムを使ってデジタル信号の流れを処理する(フィルタリング、復元、等)に大きく関係する。この処理は、コンピュータ的に集約的で、非常にデータ平行的になる傾向があり、科学的アプリケーションにずっと似ている。
しかし、マルチメディア処理には、通常科学的アプリケーションには課されない追加的な要求事項がある。しばしばリアルタイムで実行しなければならないのだ。この要求事項は、プロセッサの性能に対し余計にプレッシャーを与える。 従来のスーパースカラまたはパイプラインの組込みプロセッサは、ジョブに対する装備が弱い。実際、効率を押し上げるためにしばしば利用されるアウト・オブ・オーダーのテクニックと投機的テクニックは、リアルタイム処理に対しては有害にもなり得る。非常に遠くまで押し進めると、実行スケジュールは大変非決定論的になる可能性がある。実行時間の不確実性はリアルタイム性能を低下させる。それはデッドラインのガードバンド化を必要とし、潜在的には使用可能なCPUサイクルを捨て去るからである。
ベクトル処理に再び戻ろう。膨大なトランジスタ・バジェットがあれば、初期のベクトル・マシンに見られたものよりも新しく、また多くの意味で優れた形のベクトル処理が可能になる。新しいベクトル・アーキテクチャは、Flynnが当初彼のコンピュータアーキテクチャ分類法で意図したよりもいくぶん制限的な用語の使い方であり、SIMD(single-instruction-multiple-data)と呼ばれている。
SIMDアーキテクチャは、最新プロセッサで多くの利点を持っている。まず第一に、SIMD実行ユニットは、既存の処理エンジンに容易に追加できる。SIMD命令は、既存の汎用レジスタファイル(64ビットアーキテクチャでしか意味を成さない)、浮動小数点レジスタファイル、またはSMIDベクトルでは特に、新しいより幅広いレジスタファイル内のオペランドに対する処理を追加することができる。
その結果、SIMDはスカラ処理とシームレスに統合する。スカラ・エンジンを加速するマイクロアーキテクチャ・テクニックは、同じ方法でベクトル・エンジンを加速し、ベクトル高速化の乗算器として働く。さらに、SIMDマシンは、下部にある高速スカラ・エンジンと、ベクトルおよびスカラ命令の細粒統合の所為でアムダールの法則による損害が少なく、初期のベクトル・マシンを悩ませた問題を減らしている。
SIMDアーキテクチャは、深くパイプラインされたユニットに依存した初期のベクトル・マシンとは違い、空間的に平行な実行ユニットに依存している。平行ユニットの利用は安価なトランジスタによって可能となる。最新のプロセッサ・アーキテクチャは、いくつかの変形SIMD命令セット拡張を加えており、90nmではこれらの拡張が組込みプロセッサで大いに利用されるようになると期待している。
SIMDベクトルは、デジタル信号とマルチメディア処理を実行する組込みシステムで特に強力である。例えば、マルチメディア・ストリームは、16ビットの断片的データエレメントの処理を必要とする。128ビット幅のSIMDベクトル・ユニットは、一つの命令で8つの平行した積和演算を実行する。これは、多くの信号処理アルゴリズムの中核である。これらのアルゴリズムでは、多くのクリティカルな内ループで、SIMD並行処理に迫る高速化が可能である。全体的なアプリケーションの速度向上はアムダールのため少ないが、それでもまだ大きいものとなり得る。これらのループはしばしばCPUサイクルの大半を占めるものだからである。
SIMDの高速化は、性能の形を取る必要がない。電力の節約として考えることもできる。例えば、SIMDをプロセッサに追加し、ある程度のアプリケーションレベルの高速化を得るはずであったとする。この利得は、性能を一定に保ちながら動作周波数を減らすために用いることもできる。SIMDユニットはトランジスタが増えているが、動的電力消費は、トランジスタに対し直線的に増加する。一方、周波数を低下させると、電力を直接減らすだけでなく、電力等式(P=CV2F)の二次項である供給電圧を下げることも可能になる。
さらに、SIMDユニットはトランジスタを追加できる一方で、それらはシリコン面積を増加させない。動作周波数が低ければ、コアを速度ではなく面積について最適化することができる。その差は大きい。事実、ダイサイズは、SIMDユニットがない時よりもある時の方が小さいことも実際にある。
SIMDアーキテクチャの欠点は、データレベルの並列性はプログラマかまたはコンパイラによってハードウェアに対し明確にエクスポーズされなければならない点である。データレベルの並列性を見つけ、エクスポーズすることは、必ずしも容易ではない。ほとんどのプログラマはそれをやった経験が無く、またこのような細部について心配することにあまり関心も無い。むしろ、彼らは、コンパイラが自分に代わってそれをやってくれると信頼している。しかし、現在のコンパイラの大半は、SIMDのためのスケジュールを行わない。スーパーコンピュータではFORTRAN用のベクトル化コンパイラが存在するが、現在偏在しているC言語はFORTRANよりもベクトル化が困難である。しかし、成功しているCのベクトル・プレプロセッサが、Veridian Systems(www.psrv.com)のような会社によってデモンストレーションされている。SIMDが主要なPCやサーバのプロセッサ・アーキテクチャ(例、x86-SSE、PowerPC-AltiVec、SPARC-VIS等)の正規機能になるに従い、SIMDベクトル化のCコンパイラは間違いなく実現するだろう。
しかし、最良の状況でさえ、コンパイラでは決してカバーできない、あるレベルのSIMDの潜在的可能性がある。単純な事実は、これほど大きな高速化は基本的にスカラのアルゴリズムをベクトル化することによってしか得られないということである。データ並列性マシンの実行用アルゴリズムを根本的に再設計することにより、遙かに大きな利得が達成できる。MATLAB(www.mathworks.com)やMahematica(www.wolfram.com)のような高レベルなツールが助けてくれるものの、この仕事には人間が必要である。ここでも幸運なことに、主要なプロセッサ・アーキテクチャの中にSIMDがあることにより、最終的にはベクトルに強いアルゴリズムプログラマ層が生まれるだろう。
チップ・マルチプロセッシング
DLPとは反対側の突端には、完全にレベルの異なる並列性がある。プロセッサレベルの並列性である。PLPは、別のプログラムやプロセスからの当然の独立性故に存在する高レベルな粗粒の並列処理である。現在のSOCはかなりのPLPを持っており、SOCがさらに多くの機能を統合するに連れ、PLPは一層多くなる。
パイプライン化、スーパースカラ、あるいはSIMDテクニックでは得られないものであるため、PLPの土壌は豊かである。PLPはTLPと似ており、それを区別するのは主に粒度である。それらの類似性の故に、マルチスレッディング・ハードウェアもPLPを取ることができるが、可能ならばCMPを使い、CMPがあまり適していない細粒スレッドはマルチスレッディング・ハードウェアに任せる方が有利である。
PLPが存在する場合、CMPは、それを活用する理想的な手段である。与えられた時間で二つの平行したタスクを実行する十分な速さを持った一つのモノリシックプロセッサを構築することに比べ、平行して走る二つの劣るプロセッサの方が、優れたソリューションを提供する。
一つの理由は、リアルタイム応答である。一つの高速CPUはシングルタスク環境で最良の応答時間を出す一方で、タスクロードがキューを増やすと、理論では、応答時間はかなり直線的に増加することが予測される。しかし、ほとんどのマルチメディア・システムやSOCで実際に必要とされるものは、シングルタスクでの応答を隠すのではなく、複数のタスクが走っている状態での十分な応答である。
複数のプロセッサはマルチ・プログラミングのレベルを引き下げ、より望ましい応答時間プロフィルとより高いタスク能力を提供する。例えば、2つの劣るプロセッサと同じ平均応答時間で2つのタスクを行う馬力を持ったプロセッサは、4つのタスクでは20%応答時間が悪く、8つのタスクでは応答の悪さは2倍になる。
この例では、一つのプロセッサは、劣るプロセッサそれぞれよりも約20%パワフルでなければならない。明らかに、小さいプロセッサは複雑性が低く、構築が容易である。また、長いワイヤは短いワイヤよりもスイッチが遅いため、より高い周波数で走らせることもできる。さらに、マルチ・プロセッサの分散化した制御構造は、より強力で大きな一つのプロセッサの集中化した制御構造よりも、プロセッサ技術でより良くスケーリングできるだろう。
CMP構造は、別の面でもスケーラビリティを提供する。現在、SOCは、一般に、専用のプロセッシング要素と、ピカソの名作を思わせる風変わりな組織で接続されたハードワイヤードの論理ブロックの組合せとして設計される。このアプローチは、普通は、シリコンの効率を根拠として取られる。しかし、このような設計は本質的にスケーラブルでない。概念的には、通常のCMP配列は、よりスケーラブルなアプローチを提供し、プロセッサ・コアの単純な追加か除去によって総合的性能を増減する。
CMPアプローチは特化した設計よりもシリコン効率が低いことがあるが、その差は、効率よく小さくしたダイを作り出すプロセッサ配列の冗長によってある程度は緩和することができる。しかし、これらの効果を無視しても、CMPアーキテクチャの効率の低さは、時間が経てば当てはまらなくなるであろう。以前に論じた傾向が確立すれば、よりスケーラブルで、よりプログラマブルで、より再利用可能なCMPアプローチが、たとえ最小のダイサイズを持つものでなくとも、最も費用効率の良いソリューションとなることであろう。
まとめ
多くの傾向が、組込みプロセッサとSOCのアーキテクチャを急速に変える見込みに収束しつつある。命令レベルの並列性の限界に達し、より深いパイプラインとスーパースカラ命令発行という従来のテクニックは流れから外れて行く。プロセスのスケーリングのみによる周波数の利得では、歴史的な性能の改善速度にプロセッサを維持できない。
同時に、よりプログラマブルなSOCの明確な経済的利点とマルチメディア処理力を求める飽くなき欲望は、ムーアの法則により予測される以上の劇的に速い速度で組込みプロセッサへの性能要求を引き上げている。幸運なことに、膨大なトランジスタ・バジェットと、90nmプロセッサ技術で賄われたトランジスタ原価の低下によって、新しいアーキテクチャ・テクニックは、組込みプロセッサでがたいてい無視してきたレベルの並列性から利益を得ることが可能になった。
マルチスレッディングは、メモリ待ち時間の増加にもかかわらず、スループットと実行ユニットの効率を押し上げるためにスレッドレベルの並列性を活用する。最新の形態のSIMD実行ユニットのベクトル処理が、マルチメディア・ストリームにたくさんあるデータレベルの並列性を活用するため、普通の組込みRISCコアに追加される。チップ・マルチプロセッシングは、タスク能力を引き上げ、リアルタイム応答を改善しながら、同時によりスケーラブルで、よりプログラマブルなSOCのための優れたアーキテクチャを提供するため、プロセスレベルの並列性を利用する。
これらのテクニックの一つ一つがそれ自体で強力であるが、それぞれが異なるレベルの並列性を活用しており、それらは、SOCの設計方法を急激に変化させるに十分な性能を持った組込みプロセッサコアを生み出すため、従来のパイプライン化やスーパースカラ・テクニックと共に容易に一つに組み合わせることができる。