プロセッサの動作と並列処理
要点と定義
プロセッサは命令を取り出して解読し、必要なデータを用いて実行します。命令アドレスレジスタ(プログラムカウンタ)は次に取り出す命令のアドレスを示し、命令レジスタは取り出した命令を保持します。スタックポインタはスタック領域の先頭位置を指すレジスタです。サブルーチン呼出しなどで戻り先やレジスタの内容をスタックに保存する設計では、その保存位置を扱うのに使います。保存方法はプロセッサや命令の仕様に依存します。
命令のアドレス部がデータそのものを示す方式を即値指定、データの格納先を直接示す方式を直接指定といいます。間接指定では、アドレス部が示す場所に、データの格納先アドレスが入っています。したがって、実際のデータにたどり着くにはアドレスを一段たどります。
パイプラインは、命令のフェッチ、解読、実行などの段階を複数命令の間で重ねて進める方式です。各段階が1サイクルで、停止などがない場合、段階数をk、命令数をnとすると、完了までのサイクル数は k+n-1 です。最初の命令にkサイクルかかり、その後は1サイクルごとに次の命令が完了するためです。
VLIWは、同時実行できる複数の処理を一つの長い命令語にまとめ、並列に実行する方式です。どの処理をまとめるかはコンパイラが決めます。複数の実行パイプラインで複数命令を実行するスーパースカラとは、並列に実行する仕組みの説明が異なります。
SIMDは、単一の命令の流れで複数のデータを処理する並列方式です。同じ演算を多数のデータに適用する処理に向きます。命令とデータの流れをそれぞれ単一か複数かで見ると、SISDは単一命令・単一データ、MIMDは複数命令・複数データです。
適用条件と例
パイプラインの式は、各段階が1サイクルで動き、全命令が同じ段階数を通り、途中停止がない場合に使えます。たとえば5段階で20命令なら、5+20-1=24サイクルです。段階数の5を命令数に掛けるのではなく、最初の命令の立ち上がりと、後続命令が1サイクルごとに完了する部分に分けて考えます。ハザードなどで停止する条件があれば、その分のサイクルを別途考慮します。
クロックを使う時間計算では、分周後の周波数から1周期の時間を求め、カウント数を掛けます。例として、16 MHzを32分周すると500 kHzで、1周期は2マイクロ秒です。初期値150から0まで150回カウントする条件なら、150×2=300マイクロ秒です。初期値の数え方や割込みの発生条件が異なる場合は、その条件に合わせます。
この節の続き
- 誤りやすい点
ここまでが冒頭部分です。ログインすると、無料でも1日2節まで全文をお読みいただけます。
アプリでこの節を読む