マイクロプロセサの速度は2年で約2倍のペースで向上するという法則(というほど大げさなものではなく,経験則から見た予測である)を「ムーアの法則」と言うことがある。また,人によっては18カ月で約2倍のペースで性能が向上すると言ってしまうこともある。

 ここで,ムーアとは米Intelの共同創設者であるゴードン・ムーア氏のことである。しかし,彼が1965年に唱えたムーアの法則とは,「半導体に集積されるトランジスタの数は2年で2倍のペースで増大する」(Intel社の文献)ということであり,性能については全く言及されていない。明らかに元々のムーア氏の発言が拡大解釈されているわけである。

◆集積度が上がれば性能も上がる

 とは言え,筆者もあまりこだわらずに「ムーアの法則に従いプロセサの処理能力が向上する」と言ってしまうこともある。なぜならば,マイクロプロセサにおいては,集積度の向上と性能の向上は表裏一体の関係にあるからである。

 より具体的に言えば,集積度がX倍になれば,スイッチングの速度はルートX倍になる。つまり,集積度が指数関数的に増えれば性能も指数関数的に増えると言える。これが,半導体におけるスケーリング則と呼ばれる特性である。そして,マイクロプロセサにはスイッチング速度の向上以外にもキャッシュの拡大などのさまざまな機能向上が行われているので,結果的にプロセサの速度は2年で2倍以上のペースで向上してきた(そして,これからも向上していくと予測されている)のである。

 数式を使わず直感的にスケーリング則を説明しようとするならば,プロセサの速度を決定するのはシリコンの中の電子の移動速度であり,集積度が高くなればなるほど,つまり,VLSI内のトランジスタのサイズが小さくなればなるほど,電子の移動距離が短くなるのでスイッチング速度が速くなると考えればよいだろう(もちろん,現実にはこれほど単純ではなく,ほかにも性能を決定する多くの要因がある)。

 この(拡大解釈された)「ムーアの法則」がいつまで続くかには諸説あるが,ガートナーを含む多くの専門家は少なくとも2010年まで続くのは確実と見ている。

◆広がるメモリーとの速度格差

 では,半導体の製造技術が向上して,マイクロプロセサの集積度が上がれば,システムとしての性能も自動的に上がっていくのかというと,そう簡単にはいかない。大きな課題は,マイクロプロセサとメイン・メモリー(DRAM)の速度の格差である。もちろん,DRAMのスピードも向上しているのだが,プロセサ本体の性能向上ペースには追いついていない。

 いかにマイクロプロセサが高速になっても,メモリーがプロセサにデーターや命令を高速に供給できなければ,プロセサはほとんど待ち状態になり,処理能力は向上しない。前回使った車の例えで言えば,荷物を満載した車が充分用意されているのに,高速道路の料金所がネックになって渋滞しているようなものである。

 これも直感的に説明すれば,マイクロプロセサのチップの外部にあるDRAMと電気信号を送受信するためには,チップ内のシリコン内でのスイッチングの場合よりも,はるかに多くの電子を移動させなければいけないからだと考えればよい。

 この速度差の解消こそが,コンピュータ・アーキテクチャの最重要課題の1つであると言っても過言ではない。これは,昔から「フォンノイマン・ボトルネック」と呼ばれており,現在のコンピュータ,つまり,メイン・メモリーからデータと命令を読み出し,プロセサで実行して,メイン・メモリーに書き戻すという基本方式で動くコンピュータの本質的な課題の1つでもある。

 先に結論の一部を言ってしまうと,Itaniumのアーキテクチャはこのボトルネックを解消するための1つの有望なアプローチなのである。

◆賢くなるコンパイラ

 マイクロプロセサに求められる,もう1つの要件がコンパイラとの相性である。

 言うまでもないが,今日のソフトウエア開発でアセンブラが使われることはほとんどない。デバイス・ドライバなどのハードウエアにかなり近い部分でも,C言語などの高級言語を使用することが通常である(Cを高級言語と呼ぶかどうかは議論の余地があるが,アセンブラよりも高級であることは間違いない)。

 従って,マイクロプロセサの命令も,人間にとって分かりやすく便利であるよりも,コンパイラにとって扱いやすいものであることが重要である。

 実際,Itaniumに限らず,今日のRISCプロセサの命令群は,人間がアセンブラ言語でプログラミングするのはかなり骨が折れるアーキテクチャになっているが,それは大した問題ではないのである。

 過去に設計されたアーキテクチャ,たとえば,IBMメインフレームには「ED(EDIT)」というとんでもない高機能命令がある。レポートのフォーマットなどで典型的に必要になる文字列の編集と移動作業を1つの機械語命令で実行するための命令である(例えば「20000723」という文字列を「2000/07/23」に変換できる)。アセンブラ・レベルのプログラマから見ればプログラムがコンパクトになるし,複数の命令を1命令にまとめられるので高速化したような気がするかもしれない(実際には,このような複雑な命令を実行するためにはプロセサ内で複雑なマイクロコードが走っているのでそれほど高速化はできないのだが)。

 しかし,このようなアセンブラ・レベルで便利な命令はコンパイラにとっては扱いにくい。命令の仕様に合わせて条件分岐をしているくらいならば,ロードやストアなどの単純な命令を繰り返し実行してしまった方が速いことが多いからである。

 コンパイラの最適化テクノロジは大きく進化しており,人間がアセンブラ・レベルで行える以上に効率的なコードを生成することが可能になっている。マイクロプロセサのアーキテクチャとしては,このコンパイラの最適化を邪魔しないような一貫性のある命令群を用意していることが重要なのである。

◇     ◇     ◇

 (1)集積度の向上を生かせる,(2)メモリーとの速度格差をカバーできる,(3)コンパイラの最適化テクノロジを生かせる,この3つの条件を満足できるマイクロプロセサ・アーキテクチャこそが,最も将来有望ということができるわけである。次回は,これらの条件を満足するためのテクノロジとしてどのようなものがあるかを列挙していくこととしよう。