●4スレッドを並列処理する? 先月30日のコラム「スクープ! Intelが新アーキテクチャのCPU「Nehalem」を2004年に投入」で、次々々世代CPU「Nehalem」の情報が載っていると紹介したIntelのWebサイトのページがアクセスできなくなった。削除されてしまったのかもしれない。Nehalemのニュースは、このコラムから世界中のCPUウオッチ系サイトを駆けめぐってしまったので、さすがにIntelも気がついたのだろう。 もっとも、実際にはIntelのサイトで(間違って)明かされてしまった情報は、コードネーム以外は大したものはない。核心に触れていたのは、2004年に登場するフルスクラッチCPUであること程度だ。しかし、IntelのこれまでのCPUの流れを見れば、Nehalemや「Tejas(テジャス/テハス)」のだいたいの像は浮かび上がってくる。前回のコラム『2世代に並存するIntelの次世代CPU群「Nehalem」と「Tejas」』では、これら次世代CPUのダイサイズとトランジスタ数を推測した。今回は、アーキテクチャを推測してみたい。
計算上、Nehalemのトランジスタ数は、1億6,000万以上になる。Intelはこのトランジスタを、もちろんCPUのパフォーマンス向上のために使う。では、どうやってIntelはNehalemの性能を上げるのだろう。それは、明確だ。Hyper-Threadingテクノロジを拡張するのだ。 おそらく、Nehalemでは4つのスレッドを並列に処理できるCPUになるだろう。つまり、ソフトウェアからは、バーチャルに4CPUに見えるプロセッサになるわけだ。もちろん、4スレッドを並列に処理するためには、CPU内のリソースもそれなりに拡張しなければならない。少なくとも10個以上の実行ユニットは必要になるだろうし、CPU内部命令(Micro-OPs)の帯域やx86命令のフェッチ帯域の拡張なども必要になる。また、キャッシュももちろん増やさなければならない。しかし、Nehalem世代なら、4スレッドのレベルも到達できるだろう。なんと言っても、Pentium 4 4個分のトランジスタを1チップに搭載するのだから。 ●Hyper-ThreadingがIntelの次の中核技術 Pentium 4以降、IntelのIA-32 CPUの長期戦略は、明確にHyper-Threadingにある。Hyper-Threadingのような複数スレッドの命令から並列性を抽出する「スレッドレベル並列処理(TLP:Thread-Level Parallelism)」こそ、IA-32 CPUのパフォーマンスを伸ばし続けることができるキーテクノロジだと、Intelのアーキテクトたちが考えているからだ。例えば、Intelの研究部門を率いるパトリック・ゲルシンガーCTO兼副社長は、半年ほど前のインタビュの際に次のように語っていた。 「将来、我々は『IPC (instruction per cycle:1サイクルで実行できる命令数)』ではなく『TPC(Threads per clock)』、つまり1サイクルで処理できるスレッド数で、CPUの効率を測るようになるだろう。今のPC向けCPUは、1スレッド/クロックでしか実行できないが、Hyper-Threadingでは2スレッドを並列に実行できるようになる。さらに、将来はもっと多くのスレッドを同時実行できるようになるだろう。これはちょうど、CPUの実行ユニットのこれまでの変化と似ている。486の時には1本の命令実行パイプしかなかったのが、Pentiumで2本になって、Pentium Proで7つ(x86命令のデコードは3命令/クロック)になったのと同じような進化だ」 つまり、これまでのCPUがスーパースカラ化によって最大“1 IPC(486)”から“2 IPC(Pentium)”、そして“3 IPC(Pentium Pro)”へと進化して来たのと同じように、これからのIntel CPUは“1 TPC(Pentium III)”から“2 TPC(Pentium 4)”、そして“4 TPC(Nehalem?)”へと進化するというわけだ。これはわかりやすいストーリーだ。 ●3 IPCの壁を破るための技術 Intelが"TPC"を上げる方向へと転じたのは、今のスーパースカラ型のアプローチでは、もうIPCを上げることは難しいと考えているからだ。CPUアーキテクチャの発達は、常にIPCの壁との戦いだった。CISC型CPU時代は、まず0.5 IPCが限界だと言われていた。ゲルシンガー氏がアーキテクトだったIntel 486はこの壁をわずかだが破った(約0.55 IPC)。その頃、RISCは1 IPCを目指していた。だが、次のステップではCISCもRISCもスーパースカラ型アーキテクチャに移り2 IPC以上を目指すようになった。 しかし、そこで次の壁が見えてきた。Pentium Proが登場する頃になると、IA-32命令セットアーキテクチャでは、IPCをピークで3命令/サイクル以上に高めることができないと言われ始めたのだ。その原因は、1つのスレッドからCPUのハードウェアがリアルタイムに並列実行できる命令を抽出する方法では、3 IPC以上の並列性を効率よく達成できないからだと言われていた。
IntelがIA-64アーキテクチャの開発に向かったのはそのためで、IA-64は命令セットアーキテクチャ自体を変えて、命令レベルで並列化する「インストラクションレベルパラレリズム(Instruction-Level Parallelism:ILP)」で5~6 IPC、あるいはそれ以上を狙うことになった。一方、IA-32 CPUの開発チームの方は別な解に向かった。それが、「TLP(Thread-Level Parallelism)」だったというわけだ。 ILPでは、コンパイラがコンパイル時に、並列実行できるように命令を並べ替えてしまう。コンパイラは時間をかけて並列に実行できる命令を抽出するためIPCを6近くまで向上させることができるというわけだ。6 IPCを達成すれば、スーパースカラCPUと同クロックでも2倍の性能を達成できる計算になる。 一方、TLP技術では、CPUのハードウェアが、複数スレッドにまたがって並列実行できる命令を抽出して並べ替える。1CPUコアでこうしたTLPを実現するHyper-Threadingのような技術は、一般的に「Simultaneous Multithreading(SMT)」と呼ばれる。スレッドをまたがれば、並列性の抽出はずっと容易になる。そのため、IPCを3以上に高めることができるという論理だ。
●今後はTPCを高める方向へ向かうIA-32 CPU こうした流れにあるため、IntelのIA-32 CPUは、今後間違いなくTPCを高める方向へ向かう。TPCを高めることで、結果としてIPCの壁を破る。「私はIPCを向上させ続けることができると、確信を持っている。x86アーキテクチャではIPCはもう上がらないという議論は、これまでにも何度もあった」、「しかし、事実として、IPCは継続して向上し続けてきた。これからも向上は続く」とゲルシンガー氏は確信を持つ。 現在のPentium 4アーキテクチャのHyper-Threadingでは、並列処理できるスレッド数は2だが、これは単に始まりに過ぎない。Northwoodでは、2スレッドの並列実行ですら、リソースや帯域が足りないように見える。おそらく、次のTejasでは、これは改善されてHyper-Threadingをもっと効率良く実行できるようになるだろう。そして、Nehalemでは、Hyper-ThreadingをベースとしてCPUが設計され4スレッドをサポートすると予想される。おそらく、Nehalemの次の世代では8スレッドになるだろう。 そうしたレベルになると、TLPを強化する新しい技術もどんどん投入されてくると予想される。例えば、IntelのCPUアーキテクチャ研究をリードしてきたFred Pollack氏(Intel Fellow,Director, Intel Architecture Strategic Planning, Intel Architecture Group)は、2000年10月のPACT 2000で行ったプレゼンテーション「New Challenges in Microarchitecture and Compiler Design」で、Intelが「バリュー予測(Value Prediction)」テクニックを研究していることを明かしている。これまでのCPUの予測機能は、条件分岐で分岐が成立するかどうかを予測する、コントロールフローの予測だった。しかし、これからは演算結果やアドレスやフラグの予測をしてしまうバリュー予測、つまりデータフローの予測の採用が有効だという。データバリューを予測することで、スレッド間の真のデータ依存性を取り去り、より効率的な並列実行を可能にするというわけだ。この他、スレッド実行自体の予測もIntelは研究しているらしい。 また、Intelは次のステップでは、TLP技術を応用した新しいアプローチも考えている。例えば、TLP技術を使って、完全なデータのプリフェッチを実現してしまおうと目論んでいる。 いれは「Speculative Precomputation」と呼ばれる手法で、ひとつのスレッドに対して、“投機スレッド”と呼ばれるスレッド群をコンパイラで生成する。これは、本来のスレッドのうち、ロード命令(メモリからデータを読み出す命令)とそれに依存する命令だけを抜き出したスレッドとなる。そして、本スレッドと平行してこの投機スレッドを、TLPアーキテクチャの上で実行してしまう。つまり、投機スレッドが時間のかかるロード命令を前もって投機実行してしまうわけだ。そうすると、本来のスレッドがロード命令を実行する時には、必要なデータが全てL1キャッシュにロードされていることになる。つまり、メモリ待ちのレイテンシはゼロになるわけだ。 こうした技術は、ハードウェアではなくソフトウェアレイヤにインプリメントされると見られる。Intelはそのためのランタイムレイヤを開発していると思われる。つまり、将来のIntel CPUは、TLP化を進めると同時に、支援するソフトウェアレイヤを持つようになると推測される。
□関連記事 (2002年10月4日) [Reported by 後藤 弘茂]
【PC Watchホームページ】
|
|