概要
情報技術の基礎として理解しておきたいプロセッサについて、命令実行、プロセッサの種類、高速化技術、マルチプロセッサ、性能指標、割込み、エンディアンを整理する。
プロセッサは、コンピュータが命令を取り出し、解釈し、実行する中心的な装置となる。
高速化技術や性能指標は、処理能力をどう上げ、どう評価するかを理解するために重要となる。
この記事の構成
- プロセッサ
プロセッサとは、命令を実行してデータを処理する装置の総称で、CPU(Central Processing Unit)はコンピュータ全体の制御や汎用的な演算を担う中心的なプロセッサ。 - プロセッサの種類
プロセッサの種類と各項目の特徴を整理。 - プロセッサ命令とステージ
CPUにおけるプロセッサで一つの命令を実行する際、 制御装置、 演算装置以外にも、 入力データの準備や、命令となるプログラムを記憶装置から演算装置に取出す処理など、命令実行完了となるまでにいくつかの工程がある。 - プロセッサの高速化技術
プロセッサの高速化技術の意味と要点を具体例から整理。 - マルチプロセッサ
マルチプロセッサの意味と要点を具体例から整理。 - プロセッサの性能指標
プロセッサの性能指標の意味と要点を具体例から整理。 - 割込み
割込みとは、実行中の処理を一時中断し、発生した事象に対応する処理へ制御を移す仕組み。 - エンディアン
エンディアンの意味と要点を具体例から整理。
プロセッサ
プロセッサとは、命令を実行してデータを処理する装置の総称で、CPU(Central Processing Unit)はコンピュータ全体の制御や汎用的な演算を担う中心的なプロセッサとなる。
日常的には「プロセッサ」をCPUの意味で使うことも多いが、GPUやDSPも用途の異なるプロセッサに含まれる。
-
コンピュータ構成
コンピュータを多目的に使えるようにするため、内部にプログラムを保存できるよう設計された構成をプログラム内蔵方式といい、以下の構成に分類される。-
入力装置
外部からデータや指示を受け付ける、キーボード、マウス、センサーなどの装置。 -
記憶装置
命令やデータを保持する装置。CPUが直接アクセスする主記憶と、データを長期保存する補助記憶などがある。日常的に「メモリ」という場合は、主記憶を指すことが多い。 -
CPU(制御・演算装置)
プログラム制御行う制御装置と演算を行う演算装置を指し、コンピュータの心臓部にあたるハードウェア。 -
出力装置
データ(結果)を外部に出力するモニターやプロジェクタなどの装置。
-
プロセッサの種類
以下、特定用途向けの代表的なプロセッサや、CPUに組み込まれる演算ユニット。
-
DSP(Digital Signal Processor)
- 音声や画像など、ディジタル化された信号の積和演算やフィルタ処理に適したプロセッサ。アナログ信号をディジタル値に変換するA/D変換は、通常A/Dコンバータが担当する。
-
FPU(Floating-Point Unit)
- 浮動小数点演算を担う演算ユニット。CPUに組み込まれることが多い。
-
GPU(Graphics Processing Unit)
- 多数の演算を並列に処理することに適したプロセッサで、\(3D\) グラフィックスなどを高速に描画するために発展してきた。
また、GPUの並列演算能力を画像処理以外にも利用するGPGPU(General-Purpose computing on Graphics Processing Units)があり、科学技術計算やディープラーニングなどで用いられている。
プロセッサ命令とステージ
CPUにおけるプロセッサで一つの命令を実行する際、制御装置、演算装置以外にも、入力データの準備や、命令となるプログラムを記憶装置から演算装置に取出す処理など、命令実行完了となるまでにいくつかの工程がある。
この工程をステージと呼び、次の代表的なステージ(*1)~(*5)の順で実行される。
-
(*1)命令の取出し
- 記憶装置やキャッシュから次に実行する命令を取り出す。
-
(*2)命令の解読
- 制御装置で命令を解読する。
-
(*3)データの取出し
- 記憶装置から(*4)命令の実行に必要なデータを取出す。
-
(*4)命令の実行
- 演算装置で命令の実行を行う。
-
(*5)結果の格納
- 演算結果を記憶装置に格納する。
プロセッサの高速化技術
クロック周波数は、プロセッサを動作させるクロックの1秒あたりの周期数で、\(1\) GHzは1秒間に \(10^9\) クロックを意味する。
1クロックで必ず1命令や1ステージが完了するわけではなく、実際の性能は命令あたりのクロック数、同時実行数、メモリアクセスなどにも左右される。代表的な高速化技術には次のものがある。
-
パイプライン
命令の処理を複数のステージに分け、異なる命令の各ステージを重ねて進める方法。
ただし、命令間の依存関係や分岐、ハードウェア資源の競合があると、次の命令を予定どおり進められないパイプラインハザードが発生。ハザードが発生すると、後続命令を待たせるストールや、先読みした命令を破棄して取り直すフラッシュなどが必要となる。代表的な種類は次の三つとなる。
-
制御ハザード
分岐先が確定するまで、次に実行する命令が決められない場合。 -
データハザード
後続命令が必要とするデータを、先行命令がまだ生成・更新していない場合。 -
構造ハザード
複数の命令が同じハードウェア資源を同時に必要として競合する場合。
-
-
スーパースカラ
複数の実行ユニットなどを使い、依存関係のない複数の命令を1クロックで発行・実行できるようにする方式。 -
スーパーパイプライン
パイプラインの各ステージをさらに細分化し、各段の処理時間を短くして、より高いクロック周波数で動作させやすくする方式。 -
VLIW(Very Long Instruction Word:超長命令語)
コンパイラが互いに独立した複数の演算を一つの長い命令語にまとめ、複数の実行ユニットで並列実行する方式。
マルチプロセッサ
上記のプロセッサ自体を高速化する技術以外に複数のプロセッサを同時稼働させて高速化を図るマルチプロセッサという技術がある。
複数プロセッサの結合方式は、下記二つの種類がある。
-
密結合マルチプロセッサ
複数のプロセッサがメモリ(主記憶)を共有し、同時稼働する方式。また、一つのプロセッサパッケージやチップ上に複数の処理コアを搭載するマルチコアプロセッサがある。
-
マルチコアプロセッサの代表例
-
デュアルコア
コアが \(2\) 個。 -
クアッドコア
コアが \(4\) 個。 -
ヘキサコア
コアが \(6\) 個。 -
オクタコア
コアが \(8\) 個。 -
ドデカコア
コアが \(12\) 個。 -
ヘキサデカコア
コアが \(16\) 個。
-
-
-
疎結合マルチプロセッサ
複数のプロセッサに別々のメモリを割当て、同時稼働する方式。複数独立したコンピュータシステムが動いているのと同じで、複数のサーバーを連携して一つのシステムとして運用するクラスタシステムも疎結合マルチプロセッサの一つ。
プロセッサの性能指標
以下、代表的な性能指標。
-
クロック周波数
- 1秒あたりのクロック周期数をHzで表す。周波数が同じでも、プロセッサの構成や命令ごとの処理効率が異なれば性能は異なる。
-
CPI(Cycles Per Instruction)
- 1命令の実行に必要な平均クロック数。命令の種類や実行するプログラムによって変化し、同じ条件なら小さいほど効率がよい。
-
MIPS(Million Instructions Per Second)
- \(1\) 秒間に何百万命令を実行できるかを表す。
命令セットや命令の組合せによって1命令あたりの処理内容が異なるため、異なるアーキテクチャ間の単純な性能比較には向かない。
-
FLOPS(Floating-point Operations Per Second)
- \(1\) 秒毎に浮動小数点演算が何回できるかを表す。
科学技術計算やシミュレーションを行うスーパーコンピュータなどの性能指標として用いられる。
- \(1\) 秒毎に浮動小数点演算が何回できるかを表す。
割込み
割込みとは、実行中の処理を一時中断し、発生した事象に対応する処理へ制御を移す仕組み。分類方法はプロセッサやOSによって異なるが、原因がCPU内部か外部かという観点では次のように整理できる。
-
内部割込み
命令の実行中に検出された例外や、プログラムがOSのサービスを要求する命令など、CPU内部の要因で発生。-
プログラム割込み
ゼロ除算やオーバーフローなど、実行中の命令についてプロセッサが例外として扱う条件が成立したときに発生する割込み。どの条件で例外を発生させるかは、命令やプロセッサの仕様によって異なる。 -
SVC(Supervisor Call)割込み
専用の命令を実行し、OSのサービスを要求した場合に発生する割込み。 -
ページフォールト
プロセスが参照した仮想ページが物理メモリに常駐していない場合などに発生。アクセスが有効なら、OSは補助記憶から対象ページを読み込んで処理を再開。
-
-
外部割込み
入出力装置やタイマーなど、実行中の命令とは非同期なCPU外部の要因で発生。-
タイマー割込み
タイマーにより発生する割込み。 -
機械チェック割込み
ハードウェアの異常が検出された場合に発生する割込み。 -
入出力割込み
入出力装置の処理完了やデータ受信などによって発生する割込み。 -
コンソール割込み
管理コンソールから発生する割込み。
-
エンディアン
エンディアンとは、\(2\) バイト以上のデータを格納する際のデータの並び順のことで、バイトオーダーとも呼ばれる。
並び順については、上位バイトから並べるビッグエンディアンと下位バイトから並べるリトルエンディアンがある。
まとめ
- プロセッサは命令を取り出して解釈し、実行。
- 性能はクロック周波数だけで決まらず、命令数や命令当たりのクロック数を表すCPI、1秒当たりの百万命令数を表すMIPSなどを組み合わせて判断する。
- パイプラインは命令の各段階を重ねて実行し、並列処理は複数の処理を同時に進める。密結合と疎結合は、メモリ共有や結合度が異なる。
- 割込みは実行中の処理を一時中断し、内部または外部で発生した事象に対応する処理へ制御を移す仕組み。
- ビッグエンディアンとリトルエンディアンでは、複数バイトをメモリへ格納する順序が異なる。