CPUとシステムクロックとIPC

CPUはシステムクロックが高いほど性能があがりやすい。それは大雑把にCPUが所定の命令を繰り返して処理しているからだが、それはいくつかの手順(フェーズ)に分けられる。

  1. フェッチ:メモリから命令を読む。
  2. エンコード:読み取った命令を回路の信号に変換して送り出す。この信号が届いた回路が動作する。
  3. ロード:所定のデータを読み込む。
  4. オペレーション:データに変更を加える。
  5. セーブ:所定の場所にデータを保存する。

これを単純に繰り返すと、手順が5段階も必要で、これではシステムクロックが5GHzでも、実質的なシステムのサイクルは1GHzになってしまう。しかも、手順の関連性が高く、順番通りに処理するしかないのだ。
だが、どこかの手順の間は他の手順でしか使わない回路はヒマしているのだから、次々と流れ作業を行う様に構成すれば、1つ1つの命令の結果が出てくるのは1GHz相当の時間が係るものの、5GHzで命令を読み取るので、ある程度の時間の間には5GHzで処理している様に見えるだろう。だがロードやセーブと同じ回路を使って毎回CPUの外のメモリから命令を読んでいたら、5手順のうち3手順で順番待ちが発生しせっかくのパイプラインも「たまにデータが流れていく」程度のシロモノになってしまう。パイプラインを効率的に回すにはどの手順からも手軽にアクセスできるメモリ(キャッシュ)が必要だ。いっそのことロードやセーブの手順もCPUの外のメモリはあまりアクセスせずキャッシュへのアクセスがフル回転するようにプログラミングすれば、パイプラインにはいつもデータが流れるだろう。また、処理時間が案外かかるオペレーションはパイプラインの列を増やしロードとセーブがよどみなく回る様にもできるだろう。そこまで工夫しても外部回路へのアクセス=CPUが処理した結果報告なので、低速な外部回路へのアクセスが無くなる訳では無く、1つのプログラムにCPUを独占させてもそうそう効率良く処理できないので、複数のプログラムを時分割処理をさせ順に外部回路へアクセスさせたり、CPUそのものを沢山集め複数のプログラムを並列処理させたりするのも手だ。
今のCPUはとりあえずそんな感じになっているし、CPUの種類や製造メーカーによってシステムクロックと処理速度の比率もバラバラで、「同じ系列のCPUならシステムクロックが速い方が処理速度が高そう」という目安にしかならないが、IPC(1クロックあたりに実行可能な命令数)とシステムクロックの掛け算をすればいいのかもしれない。
今時分のCPUのシステムクロック速度は停滞気味で、処理速度の向上はCPUの並列化が主な手段となっており、CPUを集合するクラスターの規模を越え、もっと巨大なクラウド(サーバーをたくさん集めたもので使っているサーバーがドレなのかは判らない)になりつつある。これは自前でサーバーを用意するなら予備機やバックアップも自前で用意しなければならないが、沢山のサーバーの塊であるクラウドなら、まだ未使用のサーバーがそれを兼ねることができるので、コストや手配の手間を低く抑えることができることが大きいのだが、それはひたすら規模拡大を突き進めている状況でありバブルな状態と云えるから、
いつかは「結局、高い買い物になってしまった。」という時がくるのだろう。




コメントを残す

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

CAPTCHA