初版:2002/12/02
改訂:2003/08/12
ANGIE WORKSHOP > 人柱実験工房 > Hyper-Threadingの実像

Hyper-Threadingの実像

最近Hyper-Threadingに対応した新しいPentium 4プロセッサが発表され,同技術に対する関心が高まっています。しかし実はXeonプロセッサ(マルチプロセッサ構成に対応したPentium 4)では,今年2月に登場したPrestoniaコアからすでにHyper-Threading(以下HTと略記)に対応しています。私はこのXeon 2.2GHzをデュアルで搭載したPCを2月に購入し,HTについても当時少し調べたことがあります。すでに半年以上使っていますが,HTによって性能が向上するアプリは少ないため,体感上はたいして速くはならないなというのが実感です。

もっとも,MPEGなどの動画をエンコードするような重い作業では少しでも高速になればそれなりに意義があります。先日HTに対応したTMPGEnc Plus 2.59がリリースされましたし,HTを有効活用できる環境も少しずつ整って来ていますので,あらためてHTについて詳しく調べてみました。すると雑誌記事等ではあまり触れられていない次のような意外な事実が分かりました。

なかなか興味深いので,HTについて私が理解できたことを整理してレポートします。

■Windows 2000のHyper-Threading対応について(2003/08/12追記)

intel社の公式見解を根拠に,Windows 2000はHyper-Threadingに対応していないと主張される向きがありますので,補足説明を追加しておきます。客観的な事実としては次のようになります。

intel社の公式見解 Windows XPは対応。Windows 2000は非対応。
Microsoft社の公式見解 Windows XP/2000両方で対応。ただし2000ではXPほどHTへの積極的な最適化は行わない。

両社の見解に食い違いが生じている理由は一切公表されておらず,わかりません。どちらを信じれば良いのかということになりますが,OSの中身を正確に把握しているのはその製造元であるMicrosoft社だけですから,Microsoft社の見解の方が正しいと見るのが論理的な判断ではないでしょうか。

Microsoft社側の資料(上記サイトに置かれているWORD文書)は2003年5月に改訂されており,Windows Server 2003や物理プロセッサが3個以上のケースに関する説明などが追加されています。この資料によるとHTで問題になるIdle LoopやSpinlockに対応するコードは,Windows XPほどアグレッシブではないもののWindows 2000にも一応組み込まれていると書かれています。

CONTENTS
1.Hyper-Threadingの仕組み
2.Hyper-Threading対応CPUを使うために必要なもの
3.シングルCPU環境とHALの問題
4.Xeonデュアル機でWindows 2000 Professionalを使う場合の問題
5.Hyper-Threadingの実際の効果
6.まとめ

nextprev 1.Hyper-Threadingの仕組み

難しい話を抜きにして簡単に説明すると,HTは1つのCPUパッケージ内に2つのCPUを搭載したものだと言えます。詳細についてはインテル社のサイトに解説資料がありますが,レジスタセットなど独立したCPUとして動作するために最低限必要なものだけを2重に持ち,演算ユニットやキャッシュメモリなど共有可能なリソースはすべて共有するという構造になっています。こういう構造をとることで,1つの物理CPUを2つの独立した論理CPUとして動作させることが可能になるわけです。

もちろんほとんどのリソースを共有している以上,物理的にCPUが2つある通常のデュアルCPU構成に比べると性能はかなり低くなります。しかしそれでもわずかなリソースの追加だけで単なるシングルCPUより性能の向上が見込めるわけですから,コストパフォーマンス面では十分に意味があります。

アプリケーションから見た場合,HTによる論理CPUであっても物理CPUと同等に扱われます。つまりマルチスレッドで動作するアプリケーションではHTの有無で性能に何らかの変化が生じると考えられます。またシングルスレッド動作のアプリケーションでも2つ以上同時に実行した場合の性能は変わってくるはずです。

nextprev 2.Hyper-Threading対応CPUを使うために必要なもの

HTに対応したCPUとしては新しくリリースされたHT対応Pentium 4(改良型Northwood)と,2002年2月から使われているHT対応Xeon(Prestonia)があります。これらのCPUでHTを有効にするためには次のものが必要です。

HT未対応のマザーボードにHT対応CPUを装着しても,HTを有効にすることはできません。対応したマザーボードが必要です。チップセットはPentium 4用では850Eや845E,E7205などのFSB 533MHzに対応した世代から,またXeon用ではE7500の世代からになります。Xeon用の860についてはインテル社は公式にはHT対応としていませんが,実際に市販されている860マザーボードではHTを使えるようにしているものが数多くあります。いずれにせよチップセットだけでなくBIOSの対応も必要ですから,最終的には個々のマザーボードのスペックを調べて確認する必要があります。

OSについては一般にWindows XPが必要と言われていますが,マイクロソフト社の資料によると実はWindows 2000でも使用可能です。実際,手元のXeon機をシングルCPUでHT有効という設定で動作させてみましたが,Windows 2000 Professionalで2つの論理CPUが認識され,性能も変化することを確認できました。ただしサポートされるCPU数の上限についてXPと2000では若干の違いがあります。

表1.各OSでサポートされるCPU数の上限
OS 物理CPU数 論理CPU数
Windows 2000 Professional 2 2
Windows 2000 Server 4 4
Windows XP Home Edition 1 2
Windows XP Professional 2 4

Windows XP Home Editionでは元々シングルCPUしかサポートしていません。つまりデュアルCPU機ではXP Professionalが必要ということですが,これはあくまで物理的なCPUの個数に対する制限です。HTで仮想的に生成される論理CPUの数はこの制約を受けないため,XP Home Editionでも2つの論理CPUが使えることになります。

これに対してWindows 2000では論理CPU数でも制限を受けます。これはWindows 2000では元々物理CPUと論理CPUを区別する仕組みを持っていないためです。つまり論理CPUで2個の場合であっても物理CPUが2個あるとみなして動作します。マイクロソフト社の資料によるとWindows 2000ではXPと同じようなHT対応は将来も行わないと明言しています。

HTを有効にした場合に,実際のパソコンで認識される論理CPU数は次のような結果になります。

表2.実際のパソコンで認識される論理CPU数
OS Pentium 4
シングルPC
Xeon
デュアルPC
Windows 2000 Professional 2 2
Windows 2000 Server 2 4
Windows XP Home Edition 2 2
Windows XP Professional 2 4

Pentium 4シングルの場合は,XP/2000のどのエディションを使っても2つの論理CPUが認識されます。しかしXeonデュアルの場合は,2000 Professionalでは4つの論理CPUのうち2つしか認識されないという制約があるためXP Professionalに移行した方が有利と言えます。

※もちろん2000 Serverでも4つの論理CPUが認識されますが,2000 Serverは高価(10万円以上)なので通常はクライアントOSとしての選択肢にはなりません。また Server版ではさらに対応CPU数を増やした各種エディションがありますが,それらの場合どうなるのかについてはマイクロソフト社の資料に記述がありますのでそちらを参照してください。
写真1はXeonデュアル機でHyper-Threadingを有効にした場合に,Windows XP Professionalでタスクマネージャ画面を表示したものです。論理CPUが4つ認識されているためCPU使用率のグラフも4つ表示されています。

写真1.Xeonデュアル機でHyper-Threadingを有効にした場合
写真1.Xeonデュアル機でHyper-Threadingを有効にした場合

nextprev 3.シングルCPU環境とHALの問題

HT対応のPentium 4(またはXeon)をシングルで搭載したPCの場合,OSをインストールする前にBIOSでHTを有効に設定しておく必要があります。これはWindows 2000やXPでは,シングルプロセッサとマルチプロセッサで異なるHAL(Hardware Abstraction Layer)を使うからです。どちらのタイプのHALを使うかはインストール時に決定されるため,インストール時に論理CPUが1個しか認識されないとシングルプロセッサ用のHALが選択されてしまいます。この場合後からBIOS設定でHTを有効化しても,Windowsからは無視されてシングルCPUのまま動作します。

一方,Xeonデュアル機の場合は後からHTを有効化しても正しく認識されます。物理的に2つのCPUがあれば,HTの有無に関係なくインストール時にマルチプロセッサ用のHALが選択されるからです。

HALは通常,後から変更することはできません。変更する方法が無いわけではありませんが,これは常に成功する保証は無く,最悪の場合OSが起動しなくなることがあります。確実に動かすためにはOSのインストール前にHTを有効化してマルチプロセッサ用HALを選択させるべきです。またマルチプロセッサ用HALが入っている状態でHTを無効化してシングルCPUに戻しても,OSは正常に動作するようです。

※Windows XP Home Editionは本来1つのCPUしかサポートしていませんが,HTを有効にしたPCにインストールするとマルチプロセッサ用のHALが選択され,2つの論理CPUを使うことができます。

nextprev 4.Xeonデュアル機でWindows 2000 Professionalを使う場合の問題

HT対応Xeonデュアル機では,最大4つの論理CPUが使えます。しかしWindows 2000 Professionalは2CPUまでしか対応していないため,Xeonデュアル機で使っても4つの論理CPUのうち2つしか認識されません。このため少し面白い問題を引き起こしています。

この場合,論理CPUの認識には次の2つのパターンがあります。

(1) 各物理CPUから1つずつ論理CPUを認識
各物理CPUから1つずつ論理CPUを認識

(2) 片方の物理CPUから2つの論理CPUを認識
片方の物理CPUから2つの論理CPUを認識

(1)のパターンでは論理CPUと物理CPUが等価になるため,HTを有効にしても無効にしても同じ性能になります。物理CPU内の片方の論理CPUしか使わない場合,共有リソースを独占できるため性能上のペナルティが発生しないからです。

一方,(2)のパターンではHTを有効にすると片方の物理CPUだけが2つの論理CPUとして認識されます。つまりもう一方の物理CPUは全く使われません。HTが無効なら両方の物理CPUが使われるわけですから,HTを有効にすることでかえって性能が低下してしまいます。

この違いは,BIOSが論理CPUをリストアップしてOSに引き渡す順番によって生じます。私の使っているDELL Precision 530は(1)のパターンでしたが,一部のメーカーには(2)のパターンになる機種があるようです。こういう機種でWindows 2000 Professionalを使う場合は,BIOSでHTを無効に設定しなくてはなりません。もっとも,(1)のパターンであってもWindows 2000 Professionalを使う限りHTを有効化するメリットは何も無いわけですから,(2)のパターンの機種であっても実用上の問題は無いと言えます。

もちろんどちらの機種でもWindows XP ProfessionalやWindows 2000 Serverを使えば4つの論理CPUがすべて認識されますので,このような問題とは無関係になります。

※実はWindows XP Home Editionでも同様の問題(結果は少し違いますが)が発生します。しかしXeonデュアル機にXP Home Editionをインストールするというのは通常行われないので,特に考慮しなくても良いでしょう。

nextprev 5.Hyper-Threadingの実際の効果

手元のXeon(Prestonia)デュアル機(DELL Precision 530)を使って,HTの実際の効果を調べてみました。このPrecision 530はBIOSの設定で2nd CPUを無効化し,シングルCPU機として動作させることも可能です。これを使えばシングルXeon+HTという構成でHT対応Pentium 4と同じ動作をさせることができますので,その場合についても計ってみました。テスト環境は次のようなものです。

表3.テスト環境
PC DELL Precision Workstation 530
CPU Xeon(Prestonia)2.2GHz×2
チップセット Intel 860
メモリ PC800 RDRAM 1024MB
HDD 20GB Western Digital WD200BB
160GB Maxtor D540X 4G160J8 (ATA133接続)×2
グラフィックボード カノープスSPECTRA F11
その他の拡張ボード カノープスDVStorm-RT
Promise Ultra133TX2
OS Windows XP Professional SP1

一般的なベンチマークテストについてはマスメディア系のサイトですでに沢山行われていますので,ここでは個人的に関心の高いビデオ編集分野における処理に絞ってテストしてみました。テストに使用したのは次の3つのソフトウエアです。

StormEdit 2.0 + StormBench 0.10

StormEditとはカノープス社のDV方式ビデオキャプチャボードDVStorm2(およびDVStorm-RT)に付属する専用のビデオ編集ソフトです。HT対応は明言していませんが,元々マルチスレッドで動作するソフトであるため性能向上が期待できます。

このStormEditでの処理性能を評価するためのプログラムとして,かっぱくんという方が開発されたStormBench 0.10があります。これはStormEditのタイムライン上で各種ビデオフィルタ等を順に追加して少しずつ負荷を増やしていく仕組みで,リアルタイム処理ができなくなって停止するまでに何フレーム処理できたかを計測します。StormEditのバッファサイズの設定で結果が変わってきますので,バッファ1秒(デフォルト設定)とバッファ5秒の2つの設定で計測しています。

表4.StormBench 0.10の結果
物理CPU数 HT バッファ1秒 バッファ5秒
1 無効 587 704
有効 642 764
2 無効 691 844
有効 689 841

シングルCPUの場合,HTを有効にすることでかなりの性能向上が見られます。しかしそれでも物理的なデュアルCPUの性能には届きません。

一方,デュアルCPUではHTを有効にしても性能の有意差は生じませんでした。結局StormEditは2つのCPUまでは効率よく使いますが,それ以上にCPUを増やしても使ってくれないということのようです。

TMPGEnc Plus 2.59によるMPEG-2エンコード

TMPGEnc PlusはMPEG-2に対応したMPEGエンコーダです。最新の2.59でHTに正式対応しました。ここでは,TV番組を録画した90秒のクリップ(あるアニメ番組のオープニング)をDVキャプチャしたものをソースに使い,DVD-Video制作を想定して平均5Mbps/最大8Mbps/2pass VBRという設定でエンコードする時間を測定しました。

表5.TMPGEnc PlusによるMPEG-2エンコード時間
物理CPU数 HT エンコード時間(秒) 速度向上率
1 無効 421
有効 364 16%
2 無効 219
有効 200 10%

シングルCPUの場合,HTで約16%性能が向上しています。デュアルCPUの場合はそれほどではありませんが,やはり明らかにHTで性能が向上しています。また,HTによる論理的なデュアルCPUと,物理的なデュアルCPUとでは大きな性能差(66%UP)が見られます。

TMPGEncの開発元であるペガシス社のプレスリリースによると「最大36.6%高速化」という説明があります。MPEGエンコーダは入力した動画の性質や設定したパラメータ等の違いでエンコード速度は大きく変わりますので,条件によってはそういう大幅な高速化も達成できるのでしょう。しかしそのためにはパラメータなどをもっと深く追求する必要がありそうです。

また,TMPGEncはMPEGエンコードだけでなく動画を加工する汎用ツールとしての性格も持っています。しかし24fps化や縮小などの各種ビデオフィルタはシングルスレッドで記述されているとのことで,実際に処理時間を測定してみてもHTの効果は現れませんでした。

Windows Media 8 エンコード ユーティリティによるwmvエンコード

Windows Media 8 エンコード ユーティリティは,マイクロソフト社独自のストリーミング動画フォーマットであるwmv形式の動画をエンコードするツールです。すでに次期バージョンであるWindows Media Encoder 9のベータ版も公開されていますが,ベータ版で性能評価するのも何ですのでここでは現行のエンコーダを使ってみました。

TMPGEnc Plusのテストに使った90秒のDV形式のクリップを元に,TMPGEnc Plusを動画加工ツールとして使って無圧縮AVIファイルに出力したものを作成し,これをソースとして使います。行った加工は次のものです。


これは最終的にテレビ画面ではなくPCの画面上で動画を表示することを想定した加工の典型的なものです。こうして作ったAVIファイルをWindows Media 8 エンコードユーティリティに入力して,平均1Mbps,2pass VBRという設定でエンコードする時間を測定しました。

表6.WME8によるエンコード時間
物理CPU数 HT エンコード時間(秒)
1 無効 245
有効 241
2 無効 150
有効 151

興味深いことに,HTの有無では性能が全く変化しない(有意差が無い)という結果になりました。デュアルCPUではシングルCPUよりも性能が向上していますからマルチスレッド動作しているのは確かなのですが,HTの有無では結果が変わりません。理由はわかりませんが,このエンコーダはHTとの相性が悪いということになるようです。

nextprev 6.まとめ

マスメディア系サイトで行われた各種テストの結果を見ると,アプリケーションによってはHyper-Threadingによって大幅に性能向上する場合(Photoshop等)もあるようですが,一般的には高速化されてもせいぜい10〜20%程度の向上に留まることが多いようです。物理的なデュアルCPUと同等の能力が手に入る夢の技術ではありません

新しいPentium 4プロセッサではXeonよりも改良されている可能性はありますが,いずれにせよコアクロックの向上(3GHz over)やバスクロックの向上(533MHz化)といった部分の方が性能への影響は大きいと思われます。

とはいえ,インテル社のことですから今後の技術的な改良でHyper-Threadingについても大幅な性能向上を達成するかもしれません。CPUアーキテクチャとしては実に興味深いパラダイムシフトだと言えますし,今後の発展に期待したい所です。

参考文献

更新履歴

2002/12/02 初版
2003/08/12 Windows 2000のHyper-Threading対応についての補足説明を追加。


top access