今のCPUではほぼ「当たり前」の高性能化手法を改めておさらい

今どきの高性能CPUではもうごく当たり前の技術として定着しているものの代表として、3つとても大きなコア技術があります。今回はこの3つの技術を改めて言葉にしてまとめておきます。

スーパースカラー

スーパースケーラとも呼ばれる技術です。CPUの1つのコア内で複数のCPU命令を並列で完全同時に実行可能にする技術です。

この技術を使わない場合、命令すべてを1クロックで実行可能にしたCPUでも、IPC値が1を超えることはありません。ですが今風のCPUでは、スーパースカラーやその他の性能改善手法の組み合わせで、1クロックあたりの平均的な命令実行数を表すIPC値は3を超えるとされています。

この仕組みの実装のために、CPUの入り口に当たる部分では、複数のCPU命令を一気に解釈出来るようにしてあります。加えてCPU内部には命令を実行するユニットが複数設けられています。

よく使われる整数演算のユニットは4つなど、多くの数を持つのが今の最新のCPUです。それに比べると実行される可能性が低い命令、例えば浮動小数点演算ユニットなどは少なめになります。

合計では10以上の命令実行ユニットを、今の多くのCPUは持つ形になっています。

インテルやAMDの最新CPUでは、1つのコアで最大4~6命令程度の並列実行が可能です。

スポンサーリンク
広告大

アウトオブオーダー実行

一般的な今の「ノイマン型」のコンピュータは通常は命令が記載されている順に処理を行っていきます。

ですが最新のCPUの内部では一部この原則を無視した動きをします。CPUの実行効率を優先して、命令の実行順序を入れ替えてしまいます。これが「アウト・オブ・オーダー」、実行順序無視の処理方式です。

簡単な例として次のような計算があったとします。

  1. A+Bの値をCに代入
  2. C+Dの値をEに代入
  3. F×Gの値をHに代入

2.の計算は1.の計算が終わった後でしか実行できないので、1.と2.は処理の並列化が出来ません。ですが、3.は1、2のどちらの計算結果とも関係がありませんので、処理の順番を入れ替えれば並列実行が出来ます。

こういった依存関係をCPU自体がその場その場で判断しながら、実行順序を入れ替えて処理の並列度を高めて効率、性能を上げるのがアウトオブオーダー実行の基本的な考え方です。

この仕組みはスーパースカラーの仕組みで1つのCPUが複数の命令を並列実行できる、という部分が基礎にあって、その仕組みをいかに効率よく動かせるかを追求するために追加されたような形の技術です。

そういう観点では、スーパースカラーとアウトオブオーダー実行は非常に緊密に絡む技術である、とも言えるわけです。

SMT

インテルCPUではハイパースレッディングと呼ばれる技術で、同時マルチスレッディング、SMT(Simultaneous Multi-Threading)が一般的な呼び方になります。

スーパースカラーの仕組みを実装したCPUでは、命令の実行ユニットがたくさん1つのコア内に含まれていますが、利用可能性の高い実行ユニットは数多く実装されるケースが多くなります。

命令が出現するパターンがどうなるかは予想が付きませんので、どのユニットもある程度余裕を持たせるような形で作り込みが行われるため、トータルでは必ず動いていない実行ユニットが発生します。

この「空き」実行ユニットを使う形で、1つのコアで複数のプログラム(またはスレッド)を同時に実行できるようにしたのがSMTの仕組みです。

この仕組みを実装したCPUは、OS側からは多くの場合1つの物理コアが2つの論理コアに見えるようになっています。

実際に動かしてみると、実行ユニットの競合がどうしても発生してしまうため、SMTで1つのコアを2つに見せても、トータルの処理性能は5%~25%上がる程度といわれています。

また、この仕組みを使うと遊んでいる回路が減るため、消費電力と発熱量がグッと上がります。製造プロセスの微細化の進んだ今のCPUでは、ごく小さな面積から大量の熱が生まれるため、冷却面で問題が生じるケースもあるようです。

この技術もスーパースカラーの仕組みで複数の実行ユニットが1コア内に実装されたことを、より有効活用するための技術で、他の技術とは切っても切れないものとなっています。

1つのCPUでより大量のプログラムを同時に動かす必要のあるサーバー用CPUなどでは、1コアで同時に4つプログラムを実行できるような実装も行われます。

スポンサーリンク
広告大
広告大

シェアする

  • このエントリーをはてなブックマークに追加

フォローする