PC 教室ハードウエアCPU

ハードウエア~とにかく CPU でしょ

余談
バケツリレーの話で、 「バケツを落としたらどうなるの?」とか... 「掛け声に間に合わなくなったら?」とか... 今は考えないでくださいね。

ディジタルという概念を導入したことで、 どうしても避けて通れないことが出来ました。それは、タイミングです。 例えば、CPU が、数値をメモリに記憶してもらうには、 数字を表す電気信号を、メモリに流さなくてはなりません。 それを伝えるのが、 バスです。

数字を 32bits32 桁の 2 進数)で表していて、 それを一度に伝える場合は、 バスを構成する、データをやり取りするための電線は、32 本必要になります。 それぞれの電線に、いい加減なタイミングで電気を流したら、正確な数字が伝わりません。

徒競走で、スタートの合図で一斉に走り出さないで、 皆がそれぞれ好き勝手に走り出したら、順位が付けられないのと似ています。

クロック信号

そこで、タイミングをそろえる為の時計が内蔵され、 電気信号の伝達は、その時計とタイミングを合わせて行うようにしました。 この時計の事をクロックと言います。 この時計は、とても細かい時間を刻んでいます。

CPU の種別を明確にする時、 Pentium III 300Mhz というような書き方をします。 この 300Mhz が、 CPU のクロックの細かさ(速さ)を示しています。 300Mhz というのは、一秒間に 6 億回、 ON になったり OFF になったりしている電気信号が、 クロックになっているということです。

図では、赤い線でクロック信号を示しています。こんな波形の電気信号です。 「VDD」という単位は、 クロック信号における ON の時の理想電圧に対する比率です。 「0.9VDD」とは、 理想電圧が 5v の場合、4.5v を意味します。

そのクロックが、ON になったタイミングで、 もしくは、OFF になったタイミングで、 せーの、でタイミングを合わせて、共同作業をしています。

CPU の処理スピードを判断するのに、この動作クロックを目安にすることができます。 同じ回路を持つ CPU なら、動作クロック 200Mhz のものは、 動作クロック 100Mhz のものの、 2 倍の処理能力になるであろうと、予想できるわけです。

バケツリレーをしていて、一方のチームは、2 秒に 1 回、 「せーの」の掛け声でバケツをそれぞれ隣の人に渡しているとします。 もう一方のチームは、「せーの」の掛け声が、 1 秒に 1 回だったとしたら、 運べるバケツの数は、どっちが多くなりますか?

ここで言っているのは、あくまでも CPU だけに注目した話です。 仮に、処理能力が 2 倍ある CPU に交換したのなら、 計算機トータルでの処理スピードも、2 倍になるのかというと、 こんなに単純には言えません。 色々な要素が複雑に絡み合ってきます。

動作クロックを早くする事だけではなく、 他の事で CPU を早くする技術もあります。 一つのタイミングで、同時により多くの仕事をするようにさせる技術です。

一つのタイミングで一つの仕事しか出来ない CPU なら、 プログラマは、2×3+4×5 という計算を以下のように実行するプログラムを作ります。

  1. 2×3 を実行。
  2. 答えの 6 を何処かに憶えておく。
  3. 4×5 を実行。
  4. 答えの 20 6 を憶えた所とは違う何処かに憶えておく。
  5. ステップ 2 と、ステップ 4 で憶えていた物を足し算する。
  6. 結果を何処かに記憶する。

とても単純に喩えると、クロックが 1hzCPU なら、 計算するまでに 6 秒掛る事になります。 もし同時に複数の仕事をこなせる CPU なら、 プログラマは、同じ計算を以下のように実行するプログラムを作るでしょう。

  1. 2×34×5 を実行。
  2. 答えの 6 と、答えの 20 を 何処かに憶えておく。
  3. ステップ 2 で憶えていた物を足し算する。
  4. 結果を何処かに記憶する。

同じ条件で、こちらの方法なら、4 秒で計算が終わります。 計算式がより複雑になればなるほど、同時に計算しても結果に影響を及ぼさない要素が増えます。 こうして処理スピードを上げるんです。 同時に出来る仕事の数や、仕事の種類は、CPU によって違っています。

ちょっとしたプログラムの例題を書きましたが、 CPU がこなしていく仕事のワンステップは、 意外なほど小さいでしょう? しかし、これをものすごいスピードで CPU はこなしているんです。

CPU がこなしていく仕事の事を、 インストラクションと言います。 また、クロック信号によって、「せ~の」の声が掛ってから、 次の「せ~の」の合図までを、 ワンサイクルと言います。

先ほどの例題では、 ワンサイクルで一つのインストラクションが終わるように喩えて書きましたが、 実際は、複数サイクル掛ってしまうインストラクションも在るので、 計算時間は、もっと長くなります。 ですから、一つのインストラクションをワンサイクルで終わらせる為の回路設計も、 CPU の処理スピードを高める為には欠かせません。

1 つの CPU で、同時に複数の仕事をこなせる技術は、 Pipeline Processing(パイプライン・プロセッシング、パイプライン処理)と呼ばれています。 最近は、Pipeline Processing だけでなく、 Hyper Threading(ハイパー・スレッディング)と呼ばれる技術もあります。 これは、IntelPentium 4 プロセッサに採用された技術で、 一つの CPU 上に、2 つの CPU を実装して、マルチ CPU と同じ効果を狙ったものです。