●Hyper-Threadingでシングルスレッドアプリケーションの性能も上げる
現在のHyper-Threadingではマルチタスク環境でのソフトウェア実行やマルチスレッドアプリケーションは高速化するが、単体のシングルスレッドアプリケーションの実行は高速化されない。しかし、Intelは次のステップでは、単体アプリケーションの性能も、Hyper-Threadingで向上させようとしている。これは、「投機的マルチスレッディング(Speculative Multithreading)」と呼ばれる技術を使うことによって実現する。背後に重いタスクが走っている時でなくても、アプリケーションの性能がブーストするようになる。
IntelのCPU研究を指揮するJustin Rattner氏(Intel Senior Fellow and Director, Microprocessor Research Labs)は、今後同社のCPU開発の焦点は「マルチスレッド+マルチコア」に移ると語る。つまり、CPUのコアが複数のスレッドを並列に実行できるようにし、さらに1個のチップの中にそのコアを複数並べることで、より多くのスレッドを並列に実行できるようにするというわけだ。現在は2スレッドを並列に実行できるだけのHyper-Threadingだが、今後は4スレッド、そして8スレッドと並列実行できるスレッドが増えていくだろう。
IntelのPatrick Gelsinger(パット・ゲルシンガー)CTO兼上級副社長はIDFで、この自動スレッド生成などは、最初は静的コンパイラで実現し、次は動的コンパイラで実現。また、CPUのマイクロコードで実現することも研究していると説明した。つまり、まずはIntelコンパイラでリコンパイルしてあるアプリケーションだけしか、投機的マルチスレッディングで性能が向上しない。しかし、次のステップでは、Intelが用意するダイナミックコンパイラレイヤが、自動的にスレッドを作るので、どんなアプリケーションも高速化されるようになる。このダイナミックコンパイラは、TransmetaのようにOSの下のレイヤーになるのかどうかは、まだわからない。だが、最終的にはスレッド生成は、CPU内部で行なわれる可能性が高い。 ●非対称型Hyper-Threadingで投機的マルチスレッディングを容易に では、どうして非対称型Hyper-Threadingと自動スレッド生成コンパイラで、シングルスレッドアプリケーションの性能が上がるのか。それは、DRAMアクセスレイテンシをほぼ完全に隠蔽するからだ。 現在のCPUで、ソフトウェアの性能がなかなか上がらない最大の原因はDRAMメモリのレイテンシにある。いったんDRAMメモリにアクセスに行くと、CPUがその間処理をストップしてしまい、がくっと性能が落ちてしまうのだ。Rattner氏はCPUの高速化により、CPUとDRAMメモリのギャップがどんどん拡大していることを説明。今後は、この問題の解決がCPU性能向上の鍵になることを示唆した。
投機的マルチスレッディングはこの問題を解決する『打ち出の小槌』だ。投機スレッドを走らせることで、必要なデータを完全にプリフェッチしてしまう。それによって、DRAMアクセスのレイテンシを完全に隠蔽して、CPUの性能をブーストする。Intelは、これまでも投機的マルチスレッディングに関する論文をいくつか発表していたが、今回のIDFでは、具体的なCPU研究の中でこの手法を検討していることを初めて明確にした。
投機的マルチスレッディングのために、Intelは非対称型Hyper-Threadingと呼ぶスレッド並列化の手法を実装する。これは、全てのスレッドを平等に実行する現在の「対称型(Symmetric)Hyper-Threading」と異なり、メインとなるスレッドと他のサブスレッド群のスイッチングを分離する。Rattner氏の説明では、メインスレッドは1物理スレッドとして実行する一方、サブのヘルパースレッドはスレッドスイッチで切り替えて1物理スレッドとする形になっている。「ヘルパースレッドは、典型的には数命令の小さなスレッドで、もう少し大きい時もあるが、一般的にそれほど大きくならない」(Rattner氏)という。メインスレッドの実行を、群小のサブスレッド群の実行で妨げられないようにするわけだ。だから、メインスレッドからサブのスレッドをどんどん生成する投機的マルチスレッディングに向いているわけだ。 ●投機スレッドでDRAMアクセスレイテンシをなくす Intelが投機的マルチスレッディングで、まず導入しようとしているのは「投機的プリコンピュテーション(Speculative Precomputation)」と呼ばれる手法。 この手法では、メインのスレッドに対して、"投機スレッド"と呼ばれるサブスレッド群を用意する。これは、本来のメインスレッドのうち、ロード命令(メモリからデータを読み出す命令)とそれに依存する命令だけを抜き出したスレッドとなる。そして、本スレッドと平行してこの投機スレッドを、Hyper-Threadingハード上で実行してしまう。つまり、投機スレッドが、メモリレイテンシのために時間のかかるロード命令を前もって投機実行してしまうわけだ。そうすると、本来のスレッドがロード命令を実行する時には、必要なデータが全てL1キャッシュにロードされていることになる。 「完全なプリフェッチが行なわれるため、メモリにアクセスに行く必要は、ほぼなくなる。非常にパワフルだ」とPatrick Gelsinger(パット・ゲルシンガー)CTO兼上級副社長は、以前のインタビューで説明していた。
今回、Intelはこの投機的プリコンピュテーションを、非対称Hyper-Threadingで実行するという考え方を示した。投機スレッドをヘルパースレッドとして実行すれば、投機スレッド実行によって、メインスレッドの実行がかえって遅くなるという恐れはなくなる。また、ヘルパースレッドがメインスレッドとコンテクストの多くを共有すれば、リソースも無駄にならない。 投機スレッドは、非対称Hyper-Threadingコンパイラによって、メインスレッドからヘルパースレッドとして自動生成される。生成されたヘルパースレッドはオリジナルのコードに"アタッチ"されるという。ハードウェア側もアタッチされたスレッドを、ヘルパースレッドとして認識して実行すると見られる。 投機的マルチスレッディングの利点は、マルチタスクやマルチスレッドだけでなく、シングルスレッドの実行が高速化されること。リアルタイムコンパイラでヘルパースレッドを生成すれば、既存のコードのアプリケーションやOSの実行も、高速化できる。 もっとも、Intelが求めているのは、ワープロの高速化ではなさそうだ。Intelは、こうしたアプローチによって高速化することで、新しいアプリケーションが開けると説明する。その一例は、ノイジーなデータの中からパターンを抽出することで、より音声認識の精度を上げるような技術だ。音声データだけでなく、話者の唇の動きを読むことで、より高精度な音声認識を実現するという。 Intelは、今後、Hyper-Threadingを発展させ、並列に実行できるスレッド数を増やして行く。それと同時に、投機的スレッディングのような、様々な新テクニックも導入してくるだろう。
(2003年2月22日) [Reported by 後藤 弘茂]
【PC Watchホームページ】
|
|