News | 2002年2月13日 06:22 PM 更新 |
スーパースケーラ技術で設計されたプロセッサでプログラムを処理すると,部分的に複数の命令が同時に実行され,それらがパイプラインの中で流れ作業で処理が進んでいく。だが,命令の依存関係などから使われない実行ユニットも多い。これはマルチプロセッサ(あるいはデュアルコア)の場合も同様で,2つのスレッドが同時実行されるものの,使われない実行ユニットが存在するのは同じことである。
これに対してハイパースレッディングではマルチプロセッサの時に独立した2つのプロセッサで処理していた内容をマージし,プロセッサ内部の実行ユニットの利用率を引き上げる。さらにパフォーマンスが必要ならば,ハイパースレッディング対応プロセッサをマルチで搭載することにより,パフォーマンスにスケーラビリティを与えることができる。
|
升目の一番薄い青色がバックグラウンドで,少し濃い青がタスク1,濃いグレーがタスク2が利用していることを表している。右から2番目のハイパースレッドでは,2つのタスクを重ねてリソースを有効に使いつつ実行している。ハイパースレッドとマルチプロセッサを組み合わせた一番右のケースでは,さらにタスク3,タスク4を別のハイパースレッド対応プロセッサに割り当てていることがわかる |
さらに具体的な処理を見てみよう。前述したようにハイパースレッディング対応プロセッサはOS側から2つのプロセッサのように見える。そこでOS内部で管理しているスレッドを,その2つに見えるプロセッサに対して各1スレッドずつ割り当てるのだ。
プロセッサ側のキャッシュメモリや実行ユニットの数は変わらず,割り当てられた2つのスレッドは異なる2セットのレジスタを用いて同時に実行が行われ,結果も個別に出力される。実行ユニットの数が変化しないため,当然ながらあるスレッドが利用する実行ユニットは,もう一方のスレッドからは利用できないため,実行ユニット確保の競合が発生する。従って,キャッシュメモリが共有されていることも含め,デュアルプロセッサ時よりもパフォーマンスは低くなる。
|
ハイパースレッディングシステムの機能の仕組み |
Intelによると,並列して多くのスレッドが走るサーバ向けアプリケーションの場合(サーバ向けアプリケーションはマルチプロセッサでの動作を想定しているため,マルチスレッドでの処理効率が良い)30%以上の性能が向上する。
ただし,マルチスレッドでの動作を想定していないアプリケーションの実行は,それほど高速化されない。さらにハイパースレッディング機能を有効にするため,内部的なオーバーヘッドが生じるため,マルチスレッドに対応してないアプリケーションを実行した場合,オーバーヘッド分だけパフォーマンスが落ちる可能性がある。
また,たとえばNOP(何もしない命令)をループさせながらステータス変化を待つ処理を行っているプログラムがある場合,整数演算実行ユニットが大量のNOPで埋まってしまうため別スレッドの整数演算と競合し,本来のパフォーマンスが出ないケースもある。
このようにプログラミング手法によってハイパースレッディングの効果は大きく異なる。サーバ向けには有効性が高いものの,ワークステーション向け(あるいは一般的なPC向け)に利用する場合は,必ずしも効果的とは言えない場合がある。
しかしIntelは,粘り強く長期的な戦略としてハイパースレッディングが有効なプログラミングが行われるよう,デベロッパー向けのサポートを強化していくという。現時点ではサーバ向けアプリケーションに限った30%のパフォーマンスアップだが,PC上で動作するアプリケーションが将来,徐々にハイパースレッディング対応になり,またハイパースレッディングを利用するテクニックが向上することで,ハイパースレッディングを利用した場合の効果はアップしていくと考えられるのだ。
|
アプリケーションのハイパースレディング対応が進み,利用テクニックが向上することで,長期的に見るとその効果は大きくなっていくと考えられる |
ハイパースレッディングは先日発表されたXeonプロセッサ(DP)に搭載されたが,近く2個を越えるマルチプロセッサをサポートする別のXeonプロセッサでも利用可能になる。ここをスタートとして,対応アプリケーションの増加とともに,ハイパースレッディング対応プロセッサは幅を広げていくことになるだろう。
(図版はすべてIntel資料より作成)関連リンク
3月登場のサーバ向けXeonに,ハイパースレッディング技術
1つのプロセッサが2つに見えるハイパースレッディング