1.CPUの基本構造・動作とメモリとの関係
まずはCPUの構造と処理の流れを理解しよう
いろいろな処理をこなす「CPU」。ものすごい高度な処理をしているように見えますが、実は意外と単純な作業を繰り返ししてるだけです。この単純な作業を高速で行うことにより、凄い処理を行っているように見せているわけです。
下図はCPUの基本構造とメモリの関係を表した図です
|
▲CPUの基本構造とメモリの関係 |
上図で「アドレス」「レジスタ」という用語が出てきましたが、この「アドレス」「レジスタ」について後のためにちょっと説明しましょう。
1.アドレスとは
アドレスとはその名の通り「住所:番地」を意味します。1次記憶装置の内部ではデータが書き込まれると、その書き込まれた場所に「番地:アドレス」が付きます。そのアドレスは「アドレス領域」と呼ばれるところに自動的に書き込まれるため、中央演算装置はその「アドレス」を基にデータを取り出します。
|
▲メモリの内部構造も「アドレス」で管理される |
2.レジスタとは
レジスタとはマイクロプロセッサ(CPUのチップセット)内にある記憶素子で、演算の過程や演算や実行状態の保持を行う部分です。CPUには人間のように「脳」が当然ありませんので計算の暗算はできません。また、人間のように「ちょっとおぼえとこう」などは無理です。そのためこの「レジスタ」と言う部分を使ってひとつひとつ「記憶」させておかないと次の処理ができません。
よく人間で前のことを忘れる人の場合「鶏の頭」と表現しますよね。CPUは「鶏の頭」なのです。今の処理をしていると、前の処理はもう忘れてしまいます。それを補うのが「レジスタ」です。
|
▲CPUは一つ前のことを忘れます。(記憶回路がありません。 |
このレジスタの容量は小さいですが、とても高速で動作します。このレジスタにもいろいろな役割分担があります。
- 1.データレジスタ
- CPUがデータを一時的に記憶するレジスタで、演算の結果やデータ変数の内容を一時的に記憶させておきます。
- 2.アドレスレジスタ
- メモリのアドレスを格納するレジスタ。このレジスタのアドレスを基にメモリのデータを参照します。
- 3.アキュムレータ
- 演算を行うとき、累計の値を格納するレジスタ。
- 4.ベースレジスタ
- プログラムをロード(読み込み)を行ったとき、メモリ上のプログラムの先頭位置のアドレスを格納します。
- 5.インデックスレジスタ
- 配列を使用する場合、配列のインデックス(配列の何番目か)を格納します。
- 6.スタックポインタ
- プログラム上でスタックという処理(普通は先に読み込んだ処理の結果が先に出ますが、スタックとは「後入れ先出し」で後に処理された結果が先に出力される処理のことを言います。よく関数処理などで発生します。)が行われたとき、メモリ上では「スタック」専用のメモリ領域に格納されますが、その時、スタックポインタの値はそのデータ量の分だけ増え、逆に、取り出されるとその分だけ減ります。
- 7.プログラムカウンタ
- プロセッサが次に実行するプログラムの命令のメモリアドレスを格納しておく場所です。プロセッサ現在実行している命令の処理が終了すると、このメモリアドレスを参照して次の命令をメモリから取り出し実行します。「命令ポインタ」・「インストラクションポインタ
」・「 IPレジスタ」 ・「 逐次制御カウンタ」とも呼ばれています。
CPUは、メモリ上に記憶されたプログラムの中の命令を一つずつ読み取り、その命令を翻訳(解釈)・実行を繰り返しているだけで動きとしてはシンプルです。CPUの中で実際行われている動きは
- 1.ロード命令
- メモリ内の指定されたアドレスの内容をCPUの指定されたデータレジスタに読み込む
- 2.セーブ命令
- CPUの指定されたデータレジスタの内容をメモリの指定されたアドレスに書き込む
- 3.加算命令
- 指定されたデータレジスタにメモリの指定されたアドレスの内容を加算する
- 4.減算命令
- 指定されたデータレジスタにメモリの指定されたアドレスの内容を減算する
- 5.ジャンプ
- 無条件にまたは前の演算結果に応じて、今現在のプログラムカウンタに値を入れ、次に実行する命令のアドレスにさせる
であり、これらが複雑に組み合わされてプログラムが実行されています。
2.CPUの性能のクロック数とベースクロック
CPUの性能の指標「クロック数」は以外と複雑
CPUの性能を見るには「クロック数」「ベースクロック」などがあります。よく、「CPUのオーバークロック」などでCPUの性能を上げるといったことがよくありますが、このクロックとベースクロックの関係をよく分からないままオーバークロックを行っている人がいます。この関係をよく理解しないと非常に危険で、ハード全体を壊すおそれがあります。
CPUのクロックとベースクロックの関係について少し説明します。
1.CPUのクロック数とは
CPUの処理性能を見るときに「CPUのクロック数」という数値があります。これは簡単に言うと、CPUが1秒間に何回計算することが出来るかという数値となります。
CPUは電子回路の集合体です。そのため、電気信号のタイミングでさまざまな処理をしなければなりません。CPU内部の計算や命令の読み出しも1つの電気信号のタイミングで1つの処理を行うわけです。その電気信号のタイミングが長ければ処理スピードは遅くなり、逆に短くなれば処理スピードは速くなります。
1秒間に1回の計算が出来たとした場合、CPUのクロック数は「1Hz」となります。これが1MHzの場合、1秒間に100万回の計算や命令の処理が出来ます。これは1GHzになると10億回の計算や命令の処理が出来るということになります。
CPUに記載されているクロック数が「安定して処理が出来るクロック数」であり、絶対的な数値ではありません。使用環境や処理内容によりクロック数は絶えず変化します。
CPUは電気で動きます。(これは当然ですが...)
CPUを高速で動かす場合当然電気を使用しますから、発熱します。発熱すると電子回路に負担がかかるため、処理が遅くなります。この発熱を抑えると、電子回路に負担がかからないため、処理が早くなります。そのためCPUには発熱を抑えるため「ファン」が取り付けられています。また、コンピュータや室内の温度が低い場合は処理クロックは高速になり、逆に温度が高いと低速になります。
|
▲1Hzは1秒間のタイミング |
2.ベースクロックとは
CPUは高速で動きますが、CPUだけ高速に動いていても、回りのパーツがそれに合ったクロック数では動作してくれません。各パーツなどのクロック数は当然違います。(内部メモリやPCIカード、グラフィックボード・サウンドボードなど)
CPUと各パーツのクロック数がまちまちのまま動かすと、大変なことになります。そのため、CPUや各パーツ間で統一のクロック数でデータをやりとりをさせなければなりません。この各パーツ間の統一した信号のタイミングを「ベースクロック」と言います。
このベースクロックは「マザーボード」と呼ばれる各パーツを制御する基板で管理します。このクロック数のタイミングにより各パーツ間でのやり取りが行われています。
よく、「周波数の高いメモリやグラフィックボードを購入したけれども全然早くならない」といった話があります。各パーツの周波数を上げても、このベースクロックが上がらなければ、全体のパフォーマンスが向上しなということになります。
|
▲各パーツは「ベースクロック」で動く |
3.FSBとクロック数の間に入る「倍率」
上記の説明を読んでいると、CPUが高速で動いていても、ベースクロックが低いとCPUのクロック数は無駄?思う人は多いと思います。
ではなぜCPUは高速に動かせるかというと「倍率」というのがあります。
CPUの速度は総称では3.0GHzとなっていますが、実は
CPUの速度 = ベースクロック × 倍率
となっています。
この倍率は何?と思いますよね。これは「クロックダブラ」と呼ばれ、逓倍回路とも言います。
クロックタブラはCPU内部の一部の回路であり、CPUの入力クロック信号を整数倍化して高速のクロック信号を生成します。
|
▲CPUはFSBクロックを編倍して高速化しています。 |
なぜ、現在のCPUはこの方式を採用しているかと言うと、次の理由があります。
- 1.高速のクロック信号を供給するのが困難である。
- 現在の技術では高速のクロック信号を発生させることは出来ますが、これをどうやって伝送させるかという技術がないのが現状です。CPUなどのごく狭い範囲での高速のクロック信号の伝送は出来ますが、後に紹介するマザーボードなどの大きな回路上での伝送は「損失」が発生するため、高速のクロック信号の伝送は困難になります。
- 2.CPUごとに専用のマザーボードの製作は困難
- もし、CPUと同じ高速のクロック信号を供給できたとしても、今度はCPUごとに基盤を作らなければならないという問題が発生します。
現在のCPUはさまざまなクロック数があります。CPUのクロック数と同じクロック数を持ったマザーボードを作った場合、1GHzのCPUを使用した場合、マザーボードも1GHz、1.2GHzのCPUを使用した場合、マザーボードも1.2GHzといったように、非常に多くの種類のマザーボードを作らなければならず、非常に煩雑になりすぎるといった具合になります。
上記の理由により、現在のCPUは ベースクロック×倍率で動いているわけです。
3.シングルコアとマルチコア
マルチコアのCPUも使用次第です。
CPUの高速化に伴い大きな問題が1つ問題が発生しました。「CPUが発生する熱」です。一昔前のCPUはそれほど気にしませんでしたが、CPUの高速化になるにつれてCPUから発生する「熱」が高くなるのと、消費する「電力量」が大きくなるといった問題が発生しました。
特に「熱」に関しては、CPUが熱暴走し、破損してしまう危険性があるため、CPU上に大きなファンなどを取り付けて放熱等を行っておりましたがその方法も限界があり、これ以上の高速は無理に近い状態まできていました。そこで考え出したのが「コアのマルチ化」です。当初は1つのコアで多数の処理をさせようとするため、CPUを当然高速化しなければなりませんが、処理を分散させることにより、少し低速になってもCPU自体に余裕を持たせて、楽に処理させることが出来るといったことになりました。そのため、CPUから発生する「熱」や「電力量」も改善されるようになりました。
マルチコアも使用時は注意が必要?
マルチコアCPUは確かに高性能ですが、実際使用時、この高性能を常に味わえるわけではありません。
もともとCPUの処理は「マルチタスク処理」を行っており、この「マルチタスク処理」で補えない場合にマルチコアCPUが発揮します。
マルチタスクとは、複数の処理を切り替えて並行して処理することです。通常のCPUの場合、短い周期で処理しているため、処理の空きは出てきます。その空きを利用して別の処理を行っているわけです。
そのため、マルチコアCPUで効果が発揮できるのは、映像のエンコード・デコード(作成)や音楽ファイルの編集・オンラインゲームなど、1つのアプリケーションがCPUを占有している場合に別のアプリケーションを動か時などに発揮します。
エクセルのファイル編集やメール閲覧・インターネット閲覧などは、CPUはマルチタスク処理で済んでしまうので、マルチコアCPUであっても一つのCPUで処理なるので、処理の快適さはあまり体感できません。
また、マルチコアCPUの効果を活かすには、操作するソフトウェア(Adobe社のフォトショップやイラストレータ等)が対応になっていなければならず、非対応のソフトウェアを使用した場合はマルチコアCPUであっても一つのコアCPUで動作し、重たい処理を行った場合はシングルコアのCPUと同様にフリーズする可能性があります。
プログラムを開発する場合は、マルチコアCPUを使用のを前提とした「並列プログラミング」をいう技術が必要です。しかし、この技術は少々むずかしく、個人などで作ったプログラムはごの技術を使ったプログラムは少ないと思ったほうが良いでしょう。
|
▲CPUコアも使用次第では負担がかかります。 |