Windows 2000 Advanced ServerでCore i7の性能を引き出してみる実験

どうも、Core i7 で Hyper Threading Technology(HTT)を有効にすると、VistaやXPでも 性能が落っこちると言う記事を余りにも見るので、とある実験をしてみることにしました。

実験に使うのは最大4スレッドしか使わないと言う CrystalMark 2004R3 です


Core i7の場合CPU0~7が割り当てられていますが、実際どのCPUがどのHTTなのかよく分かりません。

まず、これが標準状態です。

CrystalMark 138942
ALU 45409
Fibonacci 16866
Napierian 11726
Eratosthenes 5645
QuickSort 11150
FPU 52185
MikoFPU 5430
RandMeanSS 30553
FFT 8084
Mandelbrot 8096
MEM 41348
Read 17285.93 MB/s ( 17285 )
Write 7969.49 MB/s ( 7969 )
Read/Write 7860.45 MB/s ( 7860 )
Cache 82124.14 MB/s ( 8212 )

af1
次に、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NDIS\Parameters にある ProcessorAffinityMask の値を 0x55にしてみました。要するに偶数番のCPUを優先的に使うわけです。

CrystalMark 128809
ALU 41909
Fibonacci 15101
Napierian 11251
Eratosthenes 5402
QuickSort 10133
FPU 47599
MikoFPU 5430
RandMeanSS 26612
FFT 7714
Mandelbrot 7821
MEM 39301
Read 15085.90 MB/s ( 15085 )
Write 8013.80 MB/s ( 8013 )
Read/Write 7982.05 MB/s ( 7982 )
Cache 81991.49 MB/s ( 8199 )

ベンチマークの結果がた落ちです。恐らくCPU0とCPU4と言う具合に4番飛ばしでHTTペアになっているのでしょう。

af2
ProcessorAffinityMaskを0xf0にしてみました。
HTTの片方を使う設定です。

CrystalMark 138863
ALU 47927
Fibonacci 20043
Napierian 11176
Eratosthenes 5645
QuickSort 11041
FPU 51424
MikoFPU 5430
RandMeanSS 30385
FFT 7734
Mandelbrot 7853
MEM 39512
Read 16107.58 MB/s ( 16107 )
Write 8055.21 MB/s ( 8055 )
Read/Write 7935.97 MB/s ( 7935 )
Cache 73935.78 MB/s ( 7393 )

設定していないときよりも明らかに性能UPです!

af4
では、完全にCPU0,2,4,6しか使わないようにしたらどうなるか、やってみましょう。
af3

CrystalMark 105438
ALU 34730
Fibonacci 11697
Napierian 9411
Eratosthenes 4996
QuickSort 8604
FPU 39472
MikoFPU 5420
RandMeanSS 19914
FFT 7358
Mandelbrot 6758
MEM 31236
Read 10518.73 MB/s ( 10518 )
Write 7769.78 MB/s ( 7769 )
Read/Write 6711.58 MB/s ( 6711 )
Cache 62163.35 MB/s ( 6216 )

うわ、もうがたがたですね。

af5
最後にHTTを使わない設定です。

af6

CrystalMark 155237
ALU 51566
Fibonacci 20208
Napierian 12530
Eratosthenes 6211
QuickSort 12595
FPU 58852
MikoFPU 5419
RandMeanSS 36228
FFT 8853
Mandelbrot 8330
MEM 44819
Read 17201.80 MB/s ( 17201 )
Write 8018.07 MB/s ( 8018 )
Read/Write 7867.77 MB/s ( 7867 )
Cache 117117.96 MB/s ( 11711 )

格段に結果が向上しました。

af8
以前の結果と比べていただければ分かるように、約20%もCPUのベンチ部分が高速になりました!

スコアは 239316 です。

CPUが少ないときは2スレッド使い切ることが多いわけですが、Core i7になって、CPUが増えると、HTTを使用している場合、遊んでいるCPUが出てきてしまい、全体的にパフォーマンスが落ちることがあるというのは本当のようです。

性能比較
2CPU+HTTに限定<ProcessorAffinityMask に0x55もしくは0xAAを設定<デフォルトの設定<ProcessorAffinityMask に0xf0もしくは0x0fを設定<4CPUHTTなしに限定
こういうことですね。

利用するCPUが固定ならば、IMAGECFG.EXEなどを使用して使うCPUを限定してしまうと言う方法も よいかもしれませんね。

CPUをフルに8スレッド使い切るアプリケーションを使わないのならば 少なくとも、ProcessorAffinityMask を設定しておいた方がよさそうです。
同時にアプリケーションをそんなにたくさん起動しない場合は、もう、HTTを完全に無効にしてしまう方が良いかもしれませんね(^^;

というわけで、勿論4スレッドのCPUにもある程度これは言えそうで、atom のデュアルコア辺りなら、HTTを無効にしてProfessionalで使った方が却ってよいかもしれません。
HTTは1CPU(1コア)で使わないと、Windows2000を含め、XPやVistaでもその能力を発揮するのは普通の利用では難しいようです。

関連記事:

Windows 2000をマルチコアで最適化する
Hyper Threading Technology の足枷?

関連リンク:
プログラムの実行に使用するCPUを限定させる - @IT
Windows Server 2003、Windows 2000 Server、または Windows NT 4.0 実行しているコンピュータで複数のプロセッサのプロセッサの負荷が分散できません。

おすすめ

2件のフィードバック

  1. 通りすがり より:

    “関連記事:
    Windows 2000をマルチコアで最適化する”
    のリンク先をミスしてまする

  2. blackwingcat より:

    ありがとうございます。
    他も狂ってたので修正しました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です