パソコンのCPU高速化の歴史

パーソナルコンピュータことパソコンは、その名が付けられた製品が生まれたときから比べると、単純なCPUの性能では数万倍にも達するようなものすごい性能向上を果たしています。

この性能向上がどのようにして行われてきたかを少しまとめてみます。

  • クロック向上

パソコンに使われるCPUの性能を上げる方法としては、大きく分けるとまず2つの方法といいますか概念があります。

まず一つは動作クロックを上げること。

CPUは基本的にはクロックに同期して動作します。CPUの基本動作は1クロックにつき1度です。このためこのクロックを上げてやることで動作速度が向上するという考え方です。

登場したてのころのCPUは動作クロックが4MHzなどといった、今から考えるととても遅いクロックで動いていました。いまでは定格4GHz以上のクロックで動作するCPUも存在しますので、動作クロックだけでも1000倍ということになります。

単純に考えると、クロックが4GHzのCPUは1秒間に40億回基本的な動作を行うことが出来ると言うことになります。

スポンサーリンク
広告大

パソコンのCPU高速化の歴史1クロック当たりの性能を向上

CPUの動作は基本1クロックに1つ、と書いてきましたが、今存在しているCPUは実は1クロックの間に複数の動作を行うことが可能になっています。

一つ一つの処理装置は1クロックにつき1動作なのは間違いがないんですが、今時のCPUは基本的な動作を行う処理装置を複数持っていて、条件によってはその複数の装置が並列で同時に動作できるように作られています。

条件が揃えば、1クロック当たり4つも5つも複数の処理を同時に行うことが出来ますが、実際のプログラムにおいてはそういった条件が揃うことは多くはありません。

この1クロック当たりに平均どの程度動作が行えるかを、Intructions Per Clock(またはCycle)の頭文字を取ってIPCと呼びます。Instructionは日本語では「命令」と翻訳されています。CPUの基本となる実行の単位は命令と呼ばれます。

CPUのおおまかな性能の目安としては、クロック x IPC、という形になります。

2008年時点で、パソコンなどのCPU製造メーカーの最大手インテルの製造する高性能型CPUでは、IPCは平均で3を超えるほどになっているそうです。

  • スーパースケーラ

IPCを上げるためにCPU内部での並列動作を行う枠組みをまとめて、スーパースケーラ(スーパースカラー:Super Scalar)と呼びます。

CPU内部にはCPUが行える作業の単位(命令)を分担するための実行ユニットが複数個用意されていて、条件さえ満たされればそれらが複数の動作を同時に並列で実行します。これにより、1クロック当たりに実行できる動作の数を増やしています。

このためには、実行する動作の指示(≒プログラム、機械語などなど)をどんどん読み出してCPUが休むことなく動き続けることできるように、プログラムを読み出したり解釈したりしてやる仕組みなどが必要になります。

そういったいろいろな部分の改良が積み重なることで初めて、CPU全体の性能を引き上げることが出来ます。

  • アウトオブオーダー実行

プログラム全体としての動作の結果が変わらない範囲で、ということに限定しますが、最新のCPUの内部ではCPUの動作の単位レベルで、実行する順序をどんどん入れ替えて動作を行っています。

こういったことを行う理由の一つとしては、CPUの性能がどんどん高くなってきて、メモリや外部記憶装置の性能などよりもはるかに処理速度が速くなってしまったためです。

今の最新のCPUの性能で実行順を入れ替えないまま動作する場合には、メモリの読み出し/書き込みの必要がある状態になるとメモリからの応答を待つ間、CPU側は何十クロック分(あるいはそれ以上)もの間、動作が完全に止まってしまいます。

こういう状態はもちろんコンピュータの性能に大きく悪い影響を与えます。

このためメモリの応答が返ってくるまでの間に、プログラムの実行結果に影響を及ぼさないような処理は先に行ってしまおう、というのがアウトオブオーダー実行の基本的な考え方です。

メモリにアクセスする処理に限らず、実行に時間のかかる処理に関しては同様のやり方が適用できます。

ただし、どの処理も順番を入れ替えて行えるわけではありません。

  • 並列実行や実行順入れ替えの例

例えば、

1. AとBとを足し算してCに代入
2. DからEを引き算してFに代入

この二つは順序を入れ替えても、同時に実行しても結果に影響は出ません。このためスーパースケーラの枠組みを利用して、両者を同時に動かして見かけ上の性能を上げられます。

また、1の処理がすごく時間がかかる処理だったとしたら、1の実行待ちの間に2を先に処理して、さらに2の処理が終わったら次にある3とかそれ以降の処理を行うことも出来ます。

これに対して、

3. AとBとを足し算してCに代入
4. CからDを引き算してEに代入

これを同時に実行したり、順番を入れ替えて実行してしまったりするとEの値が本来あるべき値とは違ってしまって、正しい答えが得られなくなります。同時実行やアウトオブオーダー実行で性能を上げられないパターンの一つですね。

スーパースケーラやアウトオブオーダー実行の仕組みでは、こういった依存関係をCPUが判断しながら、誤った結果が出ることがないよう動作をしています。

  • マルチコア

スーパースケーラはCPU内部でCPUの動作の単位(命令)を並列実行できるようにして、トータルでCPUの性能を上げようとする仕組みですが、マルチコアはもう少し大きな単位で動作の並列性を上げて、CPU全体としての性能を引き上げようとするCPUの作り方です。

「コア」といわれるものは、基本的にはCPUのほぼすべての機能を持つCPUの構成要素になります。これを一つのチップの中に複数個持つことで、プログラムのようなより大きな単位を複数、実際に同時に実行できるようにしてしまおう、というのがマルチコアCPUの考え方です。

考え方としては、複数のCPUを1チップにまとめてしまったもの、ということで概ねあっていると思います。一部の重複する機能は省いて、複数のコアで共通化されていたりします。

今時のパソコンやスマートフォンのOSは、「マルチタスク」と言われるタイプのシステムになっていて、利用者が複数のプログラムを同時に動かすことが出来ます。また、利用者が何もアプリケーションソフトを動かしていなくても、OS自体のいろいろなサービスが見えないところで多数同時に動作しています。

コアが一つだけでも、見かけ上は複数のプログラムが同時に動いているように「見せる」ことは出来ます。

ですがこれは実際には、複数のプログラムを細かく時間で区切って切り換えながら交互に実行しているだけです。ある瞬間、瞬間で動作しているプログラムはあくまで1本だけになります。

マルチコアCPUやマルチCPUになると、本当の意味で複数のプログラムを同時に動かすことが出来るようになるため、うまくするとパソコン全体としての性能は、コア数分かけ算したのに近いところまで上がる事になります。

実際には1つのプログラムでも、プログラムの中の動作を上手く分割して、より小さな仕事の単位(≒スレッド)を作ってやることで、プログラムは1本だけでも複数のコアを同時に使いこなしてやることも可能になっています。

こうすると、1本だけのプログラムでも並列に同時実行できる部分は、コア数分に近いだけ性能を引き上げて実行時間を短縮することが出来ます。

  • ハイパースレッディング

ハイパースレディング(Hyper Threading:HT)はインテルの使う言葉で、もっと一般的な用語だとSMT(Simultaneou Multi-Threading)という言葉になります。

スーパースケーラの枠組みを実現しているCPU内部には、CPUの実行単位(命令)の処理を行うためのユニットが複数ありますが、これらがすべて遊びなく動作していることはまれで、いくつかの実行ユニットが処理をすることなく遊んでいるタイミングがたくさんあります。

HT、SMTというのは、この空いている実行ユニットを利用して、物理的に1つのコアを仮想的に複数のコアがあるかのように見せる技術です。

インテルのCPUでは物理的に1つのコアがOS側からは2つの仮想コアがあるように見えるような作りになっていますが、Oracle社の作るCPUや、IBMの作るCPUでは、もっと多くの仮想コアに見えるような作りとなっている製品もあります。

インテルのCPUですとPentium4の世代では、CPU内部の作りがまだまだ成熟しておらず空いている実行ユニットの割合が高かったため、ハイパースレッディングを有効にした場合の性能アップの効果が高かったのですが、現在のCoreプロセッサでは大変に上手く内部の実行ユニットを使えるようになっているため、ハイパースレッディング機能を利用しても、CPU全体の処理能力はさほど大きく向上はしなくなってきています。

ただ、仮想でコア数が増えているとは言っても、実際に増えた数の分だけプログラムは同時に動くことが出来ますので、サーバなど、たくさんのプログラムを同時に動かさなくてはいけない用途においては、十分にメリットがあると言えます。

消費電力の増大による、クロック向上の限界

今、パソコン用のCPUの性能を上げる方向性は動作クロックを上げることよりも、コア数を増やしたりIPCを上げたりする、動作の並列性の度合いを上げる方向性が主流となっています。

インテルのCPUではPentium4の時代には現在のような方向性はあまり重視されず、CPUの動作クロックをどんどん上げる方向で性能を稼ぐという考え方でした。

これは、CPUを作るための半導体のパターンの基本サイズが(≒プロセスルール)まだまだ大きかったため、採算の取れるチップのサイズに、マルチコアを盛り込むことが出来るような数のトランジスタを組み込むことが難しかったことが一つ。

また、IPCを上げるための仕組み作りは回路の設計が非常に難しく、そちらにたくさんのトランジスタをつぎ込むよりも、クロックを引き上げた方が簡単にCPUの性能の向上を図ることが出来るとインテルでは考えていた、ということがあると思います。

そしてPentium4というCPUの設計は、まさにCPUの動作クロックを上げることに特化した作りとなっていました。

ですが、CPUの消費電力は動作クロックに比例して増大します。インテルはその分を、CPUを作り込むサイズを小さくする(≒プロセスの微細化)でキャンセルするつもりでした。

しかし実際にはCPUを作り込むサイズがどんどん小さくなると、「リーク電流」という本来意図しない電気の流れが発生してしまい、CPUを小さくすることによって本来小さくなるはずだった消費電力の、削減分を打ち消してしまうようになってしまいました。

このためにPentium4は消費電力が当時としては大変に大きく「熱い」CPUになりました。そして、そのまま動作クロックを上げて行くと、CPUのチップの冷却が追いつかなくなりそうだ、ということが見えてきました。

何せ、大きくても2cm x 2cmなどといったサイズのチップから、100W分以上もの熱が発生するのですから。

この熱と消費電力の問題のため、それ以上はCPUの動作クロックが上げられなくなり、Pentium4の、当時のインテルのCPUの性能は頭打となってしまいました。

この時にもう一つの大手のパソコン用CPUメーカーであるAMDは、IPCを大幅に上げる方向で作り込んだCPUを発売するのですが、このCPUがPentium4よりも動作クロックがずっと低かったにもかかわらず、実際の性能では同等または上回るほどのものを示したため、インテルのCPUのシェアをかなり奪うことになりました。

動作クロック向上のみに頼ってCPU性能を引き上げることの限界が見えたこの時期以降は、インテルもパソコン用CPUの性能を上げるための開発の方向性を転換して、動作クロックは抑えてIPCを上げ、加えて、コアを複数持たせることでトータルでCPUの処理性能を引き上げる方向に舵を切りました。

実際、Pentium4は最高3.8GHz動作のものまで存在していましたが、現行のCoreプロセッサでも最高の定格動作クロックは4GHz止まりです。Pentium4からもう10年近くが経っていますが、CPUの動作クロックの面ではほとんど向上がないというのが現状です。

それでもCPU内部の徹底的な改良により、CPUのトータルの性能は向上し続けています。

  • メモリとCPUの性能の乖離

CPUが最初に世に出た当時はCPUとメモリは同期して動いていて、メモリの性能もそれで十分なものでした。

ソフトウェアがどんどん進化して出来ることが増えていくと同時に、プログラムのサイズもどんどん肥大化していき、プログラムを展開するためのメモリの容量もどんどん大きなものが求められるようになりました。

メモリには非常に高速に動作することも可能なSRAM(Static Random Access Memory)と、大容量を比較的簡単に実現可能なDRAM(Dynamic Random Access Memory)の大きく分けて二種類が現在使われています。

SRAMは高速なのですが、内部の仕組みが複雑なため大変高価で大容量が求められる用途には向きません。このためパソコンのみならず、サーバや、大型汎用コンピュータなどでもコンピュータのメモリはDRAMに置き換わりました。

SRAMに対してDRAMは、内部の仕組みが比較的単純でSRAMに比べてずっと安価です。このため大容量のメモリを実現するのに向いています。

ただ、DRAMはSRAMに比べると動作速度が遅く、どんどん高速化していくCPUには追いつけていません。また、たとえSRAMでメモリを構成したとしても、今の超がつくほどに高速になったCPUにはついていけません。

このためCPUの動作の中でメモリからのデータやプログラムの読み出し/書き込みが発生する状況になると、メモリからの応答を待つ間、一度CPUは完全に止まってしまうような状態になります。

CPU側の内部の仕組みでそういった状況をできるだけ避ける工夫もされていますが、それだけでは十分ではありません。

  • キャッシュメモリ

こういったメモリにアクセスする際にCPUの性能が極端に落ちてしまう状態をできるだけ避けるために、最近のCPUの内部には「キャッシュメモリ」と呼ばれる特別なメモリが必ず設けられています。

これは容量は限られるのですが、CPUの動作に近い大変高速に動作できるメモリです。

このキャッシュメモリの中によく使うメモリの内容をコピーしておき、データやプログラムを見に行くときにはまずキャッシュメモリを調べて、そこにコピーがあれば普通のメモリの方には参照に行かない仕組みになっています。

このキャッシュメモリの中身をいかに効率よく管理して、普通のメモリの方にできるだけアクセスに行かないような仕組みを作ることが出来るかどうかで、CPUの実性能が大幅に変わってしまうのが現在のコンピュータとなっています。

それぐらいまでにCPU自身の性能とメモリの性能には大きな差が出来てしまいました。

スポンサーリンク
広告大
広告大
  • このエントリーをはてなブックマークに追加

コメントをどうぞ

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