見出し画像

CPU(中央演算装置)とは? Vol.2

こんにちは!
前々回CPUの話をしましたが、少々中途半端なところで終わっていました。
今回はその続きから書き始めます。

CPUのアドレス指定


前回CPUが実行する命令が、「命令部」と「オペランド部」の分かれていると書いたことを、覚えているでしょうか?
そのうちオペランド部とは、命令実行に必要なデータの在りかを示したものです。オペランド部の値を基にデータの取得を行います。
前回の記事でメモリのアドレスのことに触れたのですが、このデータの在りかといえば、ほぼメモリのアドレスのことだと思ってください。
ただ、オペランド部を使ったアドレスの指定方式は一つではなく、実はいくつもあるんです。そこで、様々なアドレスの指定方式をひとつずつ紹介していきたいと思います。


・即値アドレス方式

即値アドレス

オペランド部自体が命令に必要なデータになっています。
ですから、「」値アドレスです。メモリは参照しません。

・直接アドレス方式

直接アドレス

基本的なアドレス指定方式で、オペランド部に書かれた数字と同じメモリのアドレスを参照し、データを取得します。

・間接アドレス方式

間接アドレス

ここからややこしくなるので、気を引き締めて。オペランド部に書かれた数字と同じメモリアドレスを参照するのは一緒ですが、さらにそのアドレスにある数字と同じメモリアドレスをもう一度参照します。
二回アドレス参照があると考えてください。

・ベースアドレス方式

ベースアドレス

オペランド部の数字と、ベースレジスタという前回紹介したレジスタの一つであるレジスタに含まれる数字を加算し、その数値と同じアドレスからデータを取得します。
ベースレジスタとは、プログラムをメモリ上にロードしたときに占有しているアドレス領域のうち先頭の値を記憶するレジスタです。その数値とオペランド部を加算して、プログラム先頭部アドレスからの差分を指定します。

・インデックスアドレス方式

インデックスアドレス

オペランド部の数字と、初出のインデックスレジスタと呼ばれる連続するアドレスを扱うレジスタの数値と加算し、それと対応するアドレスを参照します。
オペランド部には数値とは別にインデックスレジスタ番号が格納され、その数値と対応するインデックスレジスタに格納された番号をオペランド部の数字に加算して、参照するアドレスを求めます。

適切な方式によって適切なアドレスを参照して、データを処理して命令を実行します。


CPUの性能の測り方

コンピューターの中枢を制御するCPUは大変優秀な存在ですが、CPU自体の性能も比較され、悲しいことにそこで優劣がつけられます。その比較の仕方ですが、ちゃんと基準があります。それがクロック周波数CPI、そしてMIPSです。

まず、クロックとはいわば周期のことで、CPUを含むコンピューター機器はクロックに合わせて動きます。そのクロックが1秒間に繰り返される回数をクロック周波数と呼びます。
このクロック周波数は数が多いほど多くの命令を処理できることになります。

詳しい説明は以下の通りです。

クロック周波数


CPI1命令あたりのクロックサイクル数を表します。クロックサイクルとは1つの命令にかけるクロック数のことで、こちらは、クロックサイクルが少ないほど、より多くの命令を処理できることになります。

詳しい説明は以下の通りです。

画像9


MIPSとは、一秒間に実行できる命令数をさし、Mはmillionの意味、すなわち、一秒間に何百万個の命令を行えるか表しています。CPUは百万の命令くらい平気でできるので、百万が基準になってるようですね。
こちらも数が大きい方がより多くの命令を処理できることになります。

計算の仕方は以下の通りです。

画像8

以上の基準をもってCPUの性能は測られるのです。


もっと高速にするために

CPUの命令実行には4つのステップがありました。命令取出し(フェッチ)・解読・データ取得・実行です。しかし、4ステップはセットなので、純粋に考えると、一つの命令処理が終わるまで次の処理ができないということになります。
しかし、現実はそんな非効率を許しません。
現代の技術では複数の命令を並行して実行できるのです。これをパイプライン処理と呼びます。

パイプライン処理


パイプライン処理は、4つのステップをステージという独立した単位に分割し、命令取り出しだけ、命令の解読だけというように各ステージが一つの作業に専念します。そのため、各ステージが一つの作業を終えたら次の命令の分の処理を行います。
そのため、複数の命令を同時に渡されても、すべての処理にかかる時間を最小化できるのです!!
しかし、弱点もあります。それは条件分岐がある時。分岐命令があると、どちらが正しいか明確になるまで次の処理ができません。しかし、後ろから別の命令処理が近づいているのです。その結果、後ろの命令処理も止めることになり、処理速度が遅くなってしまいます。
一方、それを防ぐ技術も生まれています。それが分岐予測投機実行です。

分岐予測・投機実行

分岐命令が出た際にCPUが次の命令を予測し(分岐予測)、予測に従った処理を続けさせます(投機実行)。それによって無駄な停止時間をなくし、高速な処理を実現できるのです!!
しかし、分岐予測と投機実行はその正誤判断を待たずに行うわけですから、予測が外れれば全部ムダになってしまいます。そのため、いかに精度の高い予測を行えるかが重要になってくるのです!!



まとめ

オペランド部の値をなんらかの計算をして、必要なデータが格納されているメモリのアドレスを求める。ただし、即値アドレス方式はオペランド部の値をそのまま用いる。

・CPUの性能比較として、クロック周波数・CPI・MIPSという基準が使われる。

・CPUが命令を並行して効率よく処理できるために、各手順をステージという単位に分けて一つの処理の専念させることをパイプライン処理と呼ぶ。

今回は以上です。
ちょっと難しかったかもしれませんが、CPUに関する大事なトコロなので、お忘れなく!
それでは、また!!

いいなと思ったら応援しよう!