応用情報知識メモ06(PC内部の処理イメージ)


確認問題

以下にスラスラ答えられる人は読まなくても大丈夫。
・ノイマン型コンピュータにおいて、プログラムはどこに格納され、命令が実行されるまでにどのような手順を辿るかを説明せよ。ただし、HDD、メモリ、CPUの三つの語句を用いること。
・CPUが命令を実行する4手順を順番に答えよ。
・下記がそれぞれどのような役割を与えられているかを説明せよ。ただし、②命令レジスタにおいては、どのような二部で構成されているかも併せて説明すること。
→①プログラムカウンタ
→②命令レジスタ
→③インデックスレジスタ
→④ベースレジスタ
→⑤アキュムレータ
・CPUが命令を実行する4手順のそれぞれにおいて、上記の①〜⑤のどれが関連するかを全て答えよ。
・命令が格納されているアドレスを指定する下記の方式について、それぞれどこに参照されている値を用いるのかを説明せよ。
→①絶対アドレス指定方式
→②直接アドレス指定方式
→③間接アドレス指定方式
→④インデックスアドレス指定方式
→⑤ベースアドレス指定方式
→⑥相対アドレス指定方式
・「ビッグエンディアン」「リトルエンディアン」とはそれぞれ何か、例を挙げて説明せよ。
・「CPUのクロック周波数が 1GHz」とは何を意味するか説明せよ。
・CPI、MIPSとはそれぞれ何かを説明せよ。
・命令を 1ナノ秒(10^-9秒)で処理できるCPUのMIPSを算出せよ。
・パイプライン処理のスーパーパイプライン、スーパースカラ、VLIMとはそれぞれ何かを説明せよ。またVLIMに進化するとなぜ処理速度が上がるのか説明せよ。
・CISC、RISCとはそれぞれ何かを説明せよ。
・SISD、SIMD、MISD、MIMDとはそれぞれ何かを説明せよ。
・マルチプロセッサシステムにおける密結合、疎結合とはそれぞれ何かを説明せよ。
・全体の処理の中でプロセッサの並列化によって高速化できる処理が50%あり、並列化できるプロセッサが5台あるとき、1台だった場合と比べて処理時間が何%になるかを算出し答えよ。

処理イメージ

まず5大装置について簡潔にまとめる。
5大装置とは、制御装置、演算装置、記憶装置、入力装置、出力装置のこと。制御装置と演算装置はCPUに内蔵されている。記憶装置は主記憶装置(メモリ)と補助記憶装置(HDD、USBメモリ等)に分かれる。入力装置はキーボードやマウスなど操作者の入力を実行するデバイス。出力装置はモニターやプリンター等。
制御の流れ:制御装置からほかの4装置に対して命令が発行される。
データの流れ:データやプログラムは主記憶装置に格納される。主記憶装置からほかの4大装置にデータが渡る。
自分達が日頃使用しているコンピュータはノイマン型コンピュータと呼ばれる。ノイマン型コンピュータの定義は、プログラム内蔵方式ならびに逐次制御方式を採用している、という点にある。簡潔にまとめると「HDDに保存してあるプログラムをメモリに書き出し、そこから命令を1件ずつ取得して実行する」特徴がある。

プログラム内蔵方式(プログラム記憶方式)

基本的にプログラムは補助記憶装置つまりHDDに格納している。主記憶装置自体が小さいためココに常駐させるのは効率が悪い。
プログラムを補助記憶装置から主記憶装置に読み込む(ロード)方式を、プログラム内蔵方式と呼ぶ。

逐次制御方式

主記憶装置にロードしたプログラムを命令単位で取り出して1件ずつ実行する方式を逐次制御方式と呼ぶ。

CPUの命令実行手順

基本となる4手順

命令の実行手順は下記4手順。なお命令はレジスタに保持される。
1,命令の取り出し(fetch)
2,命令の解読(decode)
3,対象データの読み出し
4,命令実行

レジスタ一覧

$$
\begin{array}{|c|c|} \hline
プログラムカウンタ&次の命令のアドレスを記憶 \\ \hline
命令レジスタ&取り出した命令を一時的に記憶 \\ \hline
インデックス(指標)レジスタ&連続したデータを取り出す際の増分値を保持\\ \hline
ベースレジスタ&プログラムの先頭アドレスを保持\\ \hline
アキュムレータ&演算に使用する数や演算結果を保持\\ \hline
汎用レジスタ&汎用的に使用するレジスタ\\ \hline
\end{array}
$$

手順1:命令の取り出し(fetch)

1,プログラムカウンタを参照し、命令を取り出して命令レジスタに格納
2,プログラムカウンタを+1する

手順2:命令の解読(decode)

命令レジスタは「命令部」(命令の格納先のアドレス)、「オペランド部」(演算に用いるデータ等の格納先のアドレス)の二つに分けられる。
命令部から取得した命令の内容を、命令デコーダに解読してもらう。

手順3:対象データの読み出し

命令レジスタの「オペランド部」にアドレスが格納されている場合、命令に必要なデータを取得して汎用レジスタ等に保持する。
つまり、手順2と手順3はセットみたいなもの。どちらも命令レジスタを参照している。

手順4:命令実行

命令を実行するだけ。演算処理なら演算装置を使う。以上。

アドレス指定方式

命令レジスタのオペランド部にて、アドレスを格納するパターンが複数ある。

即値(絶対)アドレス指定方式

オペランド部にアドレスではなく、使用する値がそのまま入っている。

直接アドレス指定方式

オペランド部にアドレスがそのまま書いてある方式。

間接アドレス指定方式

オペランド部のアドレスを参照すると、そこにまたアドレスが入っている。例えばオペランド部に「アドレス15」と記載がある、アドレス15のデータを見ると「アドレス30」と記載があるので、アドレス30を参照すると、使用したい数値の「321」が入っていた、というイメージ。

インデックス(指標)アドレス指定方式

オペランド部にインデックスレジスタのアドレスと値が格納されているとき、インデックスレジスタのアドレスから取得した値と、オペランド部の値とを加算することで、実際にアクセスすべきアドレス(実効アドレス)を求める手法。

ベースアドレス指定方式

オペランド部の値とベースレジスタの値を加算し、実効アドレスを求める手法。命令レジスタとベースレジスタとが独立しているため、プログラムがどこに格納されても命令レジスタをいじる必要がないのが利点。

相対アドレス指定方式

ベースアドレス指定方式とほぼ同じパターン。
オペランド部の値とプログラムカウンタの値を加算し、実効アドレスを求める手法。ベースレジスタがない場合の代替手段。

バイトオーダー

byte order、つまりbyteデータをどの順番で並べるか(SQLのorderと同じ)を意味する。
並び順はビッグエンディアンリトルエンディアンの2つある。例えば16進数で「1234CDEF」という値がある場合は下記のようになる。
ビッグエンディアン:順番通りに並べる→12,34,CD,EF と並べる
リトルエンディアン:逆順に並べる→EF,CD,34,12
16進数表記の場合、1桁が4bit→2桁が8bitつまり1byteになるので、2桁ずつに区切って並べ替える。

CPUの性能指標

CPUの性能を表す用語はいくつかあるが、要するに「クロック数」「命令処理に要する時間」の2つである。

クロック周波数

コンピュータは装置同士で処理を同期させるため、処理時間の最小単位が定まっている。それをクロックと呼ぶ。例えばクロック周波数が1GHzといったとき、1秒間に10億回の処理が行えることになる。
ただここでいう「処理」とは命令を実行するという意味ではない。

CPI(Clock cycles Per Instruction)

命令(Instruction)に要するクロックサイクル、つまり1命令につき何クロックで実行できるか、を指す。
CPUのクロック数が同じであり、処理する命令が同じだとしたら、命令処理で100クロックを使用するCPUよりも、5クロックで命令を処理できるCPUのほうが優秀だということになる。

MIPS(Million Instruction Per Second)

1秒間で実行できる命令の数を指す。命令の単位は1ではなく100万となっている点に注意。

具体的に計算してみる

MIPSを実際に算出する際は、計算対象となる命令の組み合わせを固定化する必要がある。処理するのに100クロックかかる命令と200クロックかかる命令ではMIPSの値が異なるため。
例えば下記の命令AとBがあるとき、
命令A(実行時間:10クロック、出現頻度:60%)
命令B(実行時間:5クロック、出現頻度:40%)
合算して10×0.6+5×0.4=8クロックかかる命令と見なせる。
また、クロック周波数が1GHz、つまり1秒間に周波数が10^9だとする。
このとき1クロックにかかる時間は 1/10^9 秒となる。
命令を処理するのに8クロックかかるので、命令1件を処理するのにかかる時間は8/10^9秒となる。
では、1秒で命令が何件処理できるか?1/(8/10^9)=0.125×10^9=125×10^6件である。
MIPSの単位は「1秒ごとに何百万件の命令を処理できるか」なので、100万つまり10^6 で割ると、答えは125MIPSとなる。
計算が面倒だったら「命令の処理時間が1ナノ秒(10^9)のとき1000MIPS、処理時間が1マイクロ秒(10^6)のとき1MIPS」と覚えてもよい

パイプライン処理

CPUが命令を処理する際、複数の回路に同時並行で仕事をさせて効率化を図る手法をパイプライン処理と呼ぶ。パイプライン処理をさらに効率化するための手法を紹介する。
ただし、パイプライン処理とは「CPUが複数ある状態」ではない点に注意。それは「並列処理」に該当する(後述)。

スーパーパイプライン

命令を細分化することで、回路Aの処理時間が短くなり、回路Aの処理が終わるまで回路Bが待機する時間が短縮され、効率がよくなる。

スーパースカラ

パイプライン処理が行える回路を複数持つことで、同時並行で処理を進める手法。

VLIM(Very Long Instruction Word)

例えば命令が32bitで構成され、実行ユニットのビット長が128bitだとする。
VLIMによって依存関係のない命令4つを一まとめにすると、実行ユニット1つで4件の命令を同時に処理できることになる。
つまりVLIMとは、(実行ユニットが単体でも)実質複数の命令を同時に処理できる仕組み、ということになる。

CPUのアーキテクチャ

アーキテクチャにはCISCとRISCがある。

CISC(Complex Instruction Set Computer)

複雑な命令を処理できる。命令の長さはバラバラ、処理速度は高くないが高機能、というもの。
高機能な命令が準備されているため、命令の追加、変更が容易。

RISC(Reduced Instruction Set Computer)

こちらは低機能だが、命令の長さがほぼ等しいため実行速度に優れている。
命令処理をハードウェアで実装しているため命令の追加や変更は難しい。

並列処理(Parallel Processing)

CPUを複数搭載しているものをマルチプロセッサシステムと呼ぶ。
マルチプロセッサシステムの分類は主に2つ。
1、対称型=SMP(Symmetrical Multiple Processor)
2、非対称型=AMP(Asymmetrical Multiple Processor)
対称型は各CPUが同列に扱われるもの、非対称型は主従関係や役割分担が決まっているもの。

フリンの分類

命令処理とデータの関連性を4分類にしたもの。
[Single or Multiple ] Instruction + [Single or Multiple] Data streamで4つ。
SISD:1命令で単一のデータを処理
SIMD:1命令で複数のデータを処理。主に画像処理。
MISD:複数の命令で単一のデータを処理。実装例はないらしい。
MIMD:複数の命令で複数のデータを処理。マルチプロセッサシステムは大体ここに該当する。

マルチプロセッサシステムの管理形態

複数あるCPUが競合しないように統制する必要がある。その方式が2つある。
密結合マルチプロセッサ:CPU同士は単一の主記憶を参照する方式。OSが全CPUを管理する。一般的なPC一台がこの形態をとる。
疎結合マルチプロセッサ:CPUごとに別々の種記憶が割り当てられており、CPUそれぞれを個別のOSが管理する。要するに別々のコンピュータ同士が結合して一つの巨大なシステムを作っている状態。

マルチプロセッサの高速度の計算(アムダールの法則)

CPUを複数使った際にどのぐらい効率化できるのかを算出する公式。
計算に必要なのは下記2つの値。
・値1:全処理において、並列化によって高速化されうる処理の割合
・値2:CPUの台数
例えば、全体の処理のうち50%の処理が並列化によって高速化でき、またCPUが5台あるとする。このとき50%の処理は高速化されずに残るので、高速化される残り50%の処理について考える。高速化対象の50%の処理は、CPU5台のため処理時間が1/5 になるため、処理時間は50% ➗5 =10% となる。
つまり合計の処理時間は50% + 10% で 60% となり、1/0.6 が高速化の割合であるということになる。小数に治すと1.66…倍の高速化が見込めるわけだ。
ちなみにアムダールの法則の式は下記の通りとなる。

$$
E = {\frac 1 {1 - r + (\frac r n)}}
$$

先ほど述べたように、CPUの結合方式には密結合と疎結合がある。密結合の場合は、主記憶へのアクセス競合を防ぐため、疎結合よりも効率は下がる。

この記事が気に入ったらサポートをしてみませんか?