第2回 Coreマイクロアーキテクチャ [前編]新約・見てわかる パソコン解体新書(3/4 ページ)

» 2006年11月01日 10時00分 公開
[大島篤(文とイラスト),ITmedia]

複数の命令を同時実行するスーパースケーラ

 パイプラインをどんなに細分化しても、パイプラインの最後から処理結果が出てくるスピードは、1クロックごとに1つです。これがPentium以前のCPUの限界でした。初代Pentiumで画期的だったのは、1クロックで1つ以上の命令を実行可能な、スーパースケーラという技法を取り入れている点です。

 スーパースケーラを簡単に説明したのが、下の図です。


 ご覧の通り、命令を実行処理するパイプラインが2本並べて設置されています。これで1クロックで2命令が実行できるというわけです。さらに、パイプラインを3本に増やせば、1クロックで3命令が実行できます!

 というのは実はウソで、話はそう簡単ではありません。まず、すべての種類の命令を処理可能なパイプラインを複数用意するのは、CPUの回路が大規模になりすぎて難しいのです。そこで、最初のPentiumでは、片方のパイプラインはすべての命令が処理できるけれども、もう一方のパイプラインは回路規模が小さくて、単純な命令だけしか処理できないようになっていました。機能が高度な命令は片方のパイプラインでしか処理できないので、プログラム中で高度な命令が連続している部分は、片方のパイプラインだけを動かして命令を1つずつ処理することになります。

 また、1つの命令の処理結果を次の命令が参照する、命令間に依存関係がある場合は、その2つの命令は同時に実行できないことは明らかです。このような場合は、後の命令の処理を止めて、前の命令が終了するのを待たなければいけません。

 以上のように、両方のパイプラインが常に働くわけではない(片方のパイプラインが時々止まる)ので、平均的な命令実行効率は1クロックあたり2命令以下になります。できるだけ複数あるパイプラインを止めずに命令の処理を進められるように、現在のCPUにはOOO(アウト・オブ・オーダー)という機能が搭載されています。OOOでは、プログラムされた命令の並びを無視して、実行可能な命令から先に処理を進めてしまいます。


空いている回路を有効利用してもう1つのCPUを作り出す!

 残念ながら、OOOを採用しても、実行ユニットの使用効率は100%にはなりません。実行ユニットだけではなく、パイプラインのいろいろなステージの回路が、処理すべき命令が回ってこなくて待機状態になることが頻繁にあるからです。たとえば、分岐予測ミスが発生したときはパイプライン内が空にされて、それからしばらくはパイプラインの下流には命令が流れて行きません。

 インテルは、この無駄に遊んでいる回路を有効活用するために、ハイパー・スレッディング・テクノロジー(HT)という手法を編み出しました。遊んでいる回路を、もう1つ別のCPUとして働かせようと言うのです。HTにより、実際にはCPUは1つしかないけれど、デュアルコアのように見えるCPUができあがるのです。このHTは、個人向けCPUではPentium 4 3.06GHzで初めて実装されました。


マイクロOps

 前のほうで、x86命令の1つ1つは単純な働きしかしないと書きました。しかし、単純とは言いながらある程度の複雑さを持っているのがx86命令の特徴です。たとえば、add eax,[120000h]という命令は、「メモリの120000h番地からデータを読んで、eaxレジスタの値に足す」という働きをしますが、よく見ればメモリへのアクセスと足し算という、2つの仕事をすることが分かります。CPUの回路にとっては、これは十分に複雑なことなのです。

 また、x86命令は、マシンコードの長さが1バイトから数バイトと一定していない点も複雑と言えます。CPUの中にある、命令の意味を判断するデコード回路が複雑になってしまいます。ちなみに、最近までアップルコンピュータのPower Macが採用していたPowerPCシリーズのCPUは、メモリアクセスと演算は必ず別命令となっているうえ、マシンコードの長さも一定です。

 x86命令のような複雑な命令系を持つCPUのことをCISC(複雑命令セットコンピュータ)、PowerPCのようなシンプルな命令系を持つCPUのことをRISC(縮小命令セットコンピュータ)と呼んで区別することがあります。

 複雑なx86命令は、高速に処理したり、スーパースケーラで複数命令を同時実行するのに不利です。そこで、1995年11月登場のPentium Proにおいて、複雑なx86命令をマイクロOpsと呼ばれる複数の単純命令に置き換えたうえでパイプラインに投入してスーパースケーラで処理するという仕組みが実装されました。

 x86命令のうち、働きが単純なものについては1命令が1つのマイクロOpsに変換されますが、働きが複雑な命令は2個から4個のマイクロOps(μOps)に変換されます。インテルはマイクロOpsの詳細を公開していませんが、命令の長さは118ビットの固定長と言われています。

 なお、OpsはOperations(作業、操作の複数形)のことです。


Pentium 4のアーキテクチャ

 Pentium 4の内部構造に、インテルは「NetBurstマイクロアーキテクチャ」という名前を付けています。NetBurstの大きな特徴として、実行トレースキャッシュの存在があります。実行トレースキャッシュは、普通のCPUのL1命令キャッシュに相当するものです。メインメモリ内にある、x86命令で作られたプログラムは、Pentium 4の内部に読み込まれて、マイクロOpsのプログラムに変換されます。変換されたプログラムは、実行トレースキャッシュに格納されます。そして、実行トレースキャッシュからマイクロOpsが読み出されてパイプラインに投入され、実行されるという仕組みです。

 実行するプログラムの部分が実行トレースキャッシュに入っている限りは、x86命令からマイクロOpsへの変換作業が不要で、素早く処理を進めることができます。

 Pentium 4の単純化したブロックダイアグラムを下に示します。実際には、各ブロックが複数のステージで構成されていて、全体が長いパイプラインを形成します。

 Pentium 4のパイプラインは31段と言われますが、これは実行トレースキャッシュより下流の部分だけを指しています。x86命令のデコードを行うブロックも、パイプライン構造をとっていますが、ここは実行トレースキャッシュにヒットし続ける限りは動きません。


 実行トレースキャッシュから読み出されたマイクロOpsは、必要な前処理を済ませてマイクロOpsキューに蓄えられます。スケジューラは、このキューの中からすぐに実行可能なマイクロOpsを選択して、7個ある実行ユニットに分配され、同時実行されます。とはいえ、いろいろな理由から7つのマイクロOpsが同時に実行できるわけではなく、最大でも同時実行マイクロOps数は5つ、平均では3つ以下です。

Copyright © ITmedia, Inc. All Rights Reserved.

アクセストップ10

2024年03月19日 更新
  1. 無償版「Copilot」でもフルタイムでGPT-4 Turboが利用可能に/「Copilot for Security」が4月1日から一般提供開始 (2024年03月17日)
  2. ナゼか小型タブレットでお絵描きにハマりそう! NECPC「LAVIE Tab T14/T9」 の実機を試して分かった驚き (2024年03月18日)
  3. 最高6.2GHzで動作するCoreプロセッサ現行最上位の「Core i9-14900KS」がデビュー! (2024年03月18日)
  4. 外付けGPU「ONEXGPU」でビジネスノートPCをパワーアップしてみた オンライン会議における“もっさり”の解決策になる? (2024年03月19日)
  5. 総務省がCHUWI(ツーウェイ)を「行政指導」 一部モデルで認証の取得漏れなどが判明 当該機種では「5GHz帯Wi-Fi」は使わないように (2023年04月13日)
  6. ロープロで2スロット厚! NVIDIA RTX 2000 “Ada世代”のグラフィックスカードが登場! (2024年03月16日)
  7. 新「M3 MacBook Air」は守備範囲の広さが魅力 MacBook Proとの違いはある? 買い替え検討者に伝えたい注目ポイント (2024年03月14日)
  8. PCの累計生産台数5000万台突破目前! 「島根富士通」が出雲にある理由 (2024年03月15日)
  9. Copilotで画像を生成できる「Image Creator」を試してみよう (2024年03月15日)
  10. あなたのPCのWindows 10/11の「ライセンス」はどうなっている? 調べる方法をチェック! (2023年10月20日)
最新トピックスPR

過去記事カレンダー