■ベンチマーク・テストの結果,デュアルコア・プロセッサで2つのプログラムを同時実行すると,処理性能が約2倍になることが確認できた。
■2組の演算器が並列稼働していることが裏付けられている。
ベンチマークでその効果を確認
次に,デュアルコア・プロセッサを使ったシステムで,簡単なベンチマーク・テストを行い,複数のプログラムの同時実行性能が向上することを確認した。実施したテストは,音声データのエンコーディングである。WAVデータをMP3データに変換するのにかかった時間を計測した。
テスト内容は,コマンド・ラインで利用するシングル・スレッドのMP3エンコーダ・ソフト「LAME」を使い,LAMEを1つだけ実行したときにかかった時間と,LAMEを2つ同時に実行したときにかかった時間を計測した。WAVEファイルは,同じ内容のファイルを2つずつ3曲分,合計6曲分用意した。総ファイル容量は,6曲分で約300Mバイトである。LAMEを1つだけ実行したときは6曲分を,LAMEを2つ同時起動したときはそれぞれのLAMEで3曲分ずつをエンコードした。
テストに使用したデュアルコア・システムはPentium Extreme Edition 840(3.2GHz動作)とPentium D 820(2.8GHz動作)を搭載している。比較のため,ハイパースレッディングに対応したシングルコアのPentium 4(3.4GHz動作)と,シングルコアのAthlon 64 3000+(2GHz動作)を搭載したシステムでも実行した。使用したOSは,Windows XP Professional SP2(32ビット版)である。
結果は図6の通りである。各プロセッサの動作周波数がまちまちなので,図6には,LAMEを1つだけ実行したときに比べて2つ同時実行すると,どの程度速くなったかを示した。今回のテストは,ファイルやメモリーへのアクセスに比べて演算の負荷が非常に高いので,「2」に限りなく近づくはずである。参考のため,実際にかかった時間は表1に示した。
![]() |
図6●ベンチマーク・テストの結果(相対速度)
2スレッド同時に動かした場合,1スレッドだけ動かしたときに比べて何倍高速化したかを表す。デュアルコアのPentium Dでは約2倍速かった。同じデュアルコアでもハイパースレッディング・テクノロジ対応のPentium Extreme Editionでは,約1.67倍しか速くならなかった。 |
| |||||||||||||||||||||||||||||||||||||
表1●ベンチマーク・テストの結果(処理時間)
WAVファイルをMP3ファイルに変換するのにかかった時間。WAVファイルは合計約300Mバイトである。 |
図6を見ると,Pentium Dでは約2になり,2つのLAMEを同時実行すると,2倍速くなったことが分かる。2組の演算器が並列稼働していることが裏付けられている。
これに対してAthlon 64(シングルコア)の結果は,図6では1だが,表1の実際の値を見るとわずかに1を下回る。つまり2つのLAMEを同時実行すると,逆に遅くなってしまうことが分かる。これは,演算器が1組しかないので処理時間は短縮できない上に,同時実行のためのオーバーヘッドがあるためだ。
興味深いのは,ハイパースレッディング対応のPentium 4(シングルコア)とPentium Extreme Editionの結果である。シングルコアでも,ハイパースレッディングによって2つのスレッドを同時実行できるPentium 4では,2つのLAMEを同時実行すると,1つのLAMEしか動かさないときに比べて約1.2倍速かった。演算器は1組だが,ハイパースレッディングによってその使用効率が高められていることが分かる。
一方,Pentium Extreme Editionでは,2つのLAMEを同時実行したときは,1つのLAMEしか動かさないときに比べて約1.7倍しか速くなっていない。Pentium Extreme Editionはデュアルコア・プロセッサであり,Pentium Dと同様に約2倍速くなってもいいはずだ。それなのに1.7倍しか速くなっていないのは,同時に動かす2つのLAMEをWindowsが物理コアを区別せずに論理CPUに割り当てているからだ。
異なる2つのコアの論理CPUで2つのLAMEを同時実行すれば,Pentium Dの結果と同様に2倍速くなるはずだが,同じ物理コアの2つの論理CPUで2つのLAMEを同時実行したら,ハイパースレッディング対応Pentium 4と同様に1.2倍しか速くならない。実際には,2つのLAMEが動作する論理CPUは,LAMEの実行中にランダムに変化する(図7)。2つのLAMEが,異なるコアで動作したり同じコアで動作したりする。
![]() |
図7●2つのLAMEを同時に実行したときのタスク・マネージャの様子
2つのプログラムが動作する論理CPUがランダムに変化している。4つの論理CPUのうち,フル稼働しているのは常に2つなので,CPU使用率は常に50%で変わらない。 |
スレッドをプロセッサに割り当てるとき,空いている論理プロセッサが複数見つかった場合には,負荷がかかっているプロセッサとは物理コアの異なるプロセッサに優先的に割り当てるようにした方が,全体の処理性能は向上する。だが,今回のテストから,Windows XP Professionalのスケジューラは,物理コアを区別していないことが推測できる。先に説明したようにWindowsは,エディションごとに,CPUのソケット数を認識して,同時実行するスレッド数(対応CPU数)を決めている。そこまでしているならば,スケジューラも物理コアを区別するような実装に改善すべきだろう。
以上のように,デュアルコア・プロセッサは,複数のプログラム/スレッドを同時実行したときに処理性能が向上する。複数のサービスを動かしたり,複数のユーザーから同時にリクエストを受けたりするサーバーは元より,クライアントでも最近はセキュリティ対策ソフトとビジネス・アプリケーションを同時に動かす。今後はx64とともに,デュアルコア・システムが主流になりそうだ。
似て非なるハイパースレッディングとデュアルコア1個のCPUで,2個分の論理CPUが動作するという点で,デュアルコアは,インテルのハイパースレッディング・テクノロジと似ていると思うかもしれない。どちらも,1つのCPUで2つのスレッドを同時実行できるが,その原理は大きく異なる。ハイパースレッディング・テクノロジは,CPUが備えている1組の演算器をより効率よく利用するための技術である。それに対してデュアルコアは,完全なCPUの機能を2組用意して,複数のプログラム/スレッドの同時実行性能を向上させるものである。 Pentium 4など最近のCPUは演算器がパイプライン化されており,ある命令の実行が終了する前に次の命令の実行を開始できる。例えばPentium 4(Prescottコア)の場合,整数乗算の結果が出るまでに10クロックかかるが,1クロック後には別の整数乗算を開始できる。こうすることによって,演算にかかる見かけ上のクロック数を少なくしており,演算性能を上げている。 だが,「a×b×c」という演算を考えてみよう。CPUの機能としては,a×bの演算を始めた1クロック後に次の「×c」の演算を始められるのだが,a×bの演算結果が出ないことには「×c」の演算を始められない。そのため,「×c」の演算は,a×bの結果が出る10クロック後でないと始められないのである。つまり9クロック分演算器が遊んでしまい,ムダな時間がかかることになる。このような状態を「命令に依存性がある」と呼ぶ。 ここで,「a×b×c」の処理の次に「x×y×z」という演算をする場合を考えてみよう。「x×y」は「a×b×c」の演算には依存していない。そのため,「a×b」の次に「x×y」をしても処理結果に影響を与えない。このような場合,Pentium 4(に限らず最近のすべてのCPU)は,命令が「a×b」「×c」「x×y」「×z」と並んでいても,「a×b」の次に「x×y」を実行してしまう。このようにして,演算器が遊んでしまう時間を極力少なくしている。これをout-of-order実行と呼ぶ。 out-of-order実行以外にも様々な仕組みを取り入れて,演算器のパイプラインをなるべくフル稼働させようと努力するのだが,x86アーキテクチャで利用できるレジスタ(変数に相当)の数には32ビットの場合で8本という制限があり,命令の依存性は避けられない。つまり,パイプラインを完全に詰めることは非常に難しい。 ただ,一連の処理だけで考えるから命令に依存性が出てしまうのである。異なる2つの処理(スレッド)の間ならば,命令に依存性はないはずだ。そこで,異なる2つの処理を1組の演算器で実行することで,より演算器の利用効率を上げようというのがハイパースレッディング・テクノロジである。2つのスレッドから命令を送り込むために命令の入り口を2つ設けているが,それがつながっているのは1つの共通した演算器である(図A)。演算器は1組なので,2つのスレッドを同時に動かしても処理速度は2倍にはならない。インテルは,ハイパースレッディング・テクノロジによる処理性能の向上は一般に,同一動作周波数で25%程度だとしている。
これに対してデュアルコアには,命令の入り口も,それがつながる演算器も2組ずつ用意されている(図B)。そのため,演算が主体の処理ならば,2つのスレッドを同時に動かすことで,約2倍の処理性能向上が見込める。
日本AMDによると,シングルコア・プロセッサをデュアルコア・プロセッサに置き換えることで,同じシステムで最大90%の処理性能向上が見込めるという。
|