概要
情報技術の基礎として理解しておきたい プロセッサ について、命令実行、プロセッサの種類、高速化技術、マルチプロセッサ、性能指標、割込み、エンディアンを整理する。
パイプラインの完了時刻、並列化による高速化率、CPU時間を計算する。周波数やプロセッサ数の大きさだけでは性能を判断できない理由を同じ仕事の比較から確認する。
この記事の構成
- プロセッサ
プロセッサとは命令を実行してデータを処理する装置の総称で、CPU(Central Processing Unit)はコンピュータ全体の制御や汎用的な演算を担う中心的なプロセッサ。 - プロセッサの種類
プロセッサの種類と各項目の特徴を整理。 - プロセッサ命令とステージ
CPUにおけるプロセッサで一つの命令を実行する際、 制御装置、 演算装置以外にも 入力データの準備や命令となるプログラムを記憶装置から演算装置に取出す処理など、命令実行完了となるまでにいくつかの工程がある。 - プロセッサの高速化技術
5段パイプラインの完了時刻から待ち時間と処理能力の違いを確認。 - マルチプロセッサ
マルチプロセッサの意味と要点を具体例から整理。 - プロセッサの性能指標
命令数・CPI・周波数を使って二つの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:超長命令語)
コンパイラが互いに独立した複数の演算を一つの長い命令語にまとめ、複数の実行ユニットで並列実行する方式。
-
パイプラインは一命令を短くするのではなく、処理を重ねる
各ステージが1クロックで終わる5段パイプラインで、4命令を処理する理想的な場合を考える。重ねずに処理すると \(5\times4=20\) クロックだが、パイプラインでは最初の命令が5クロック目、残りが6、7、8クロック目に完了し、合計8クロックとなる。最初の命令の完了に必要な5クロックが1クロックに短縮されたわけではない。処理の重なりによって流れが埋まった後の完了間隔が1クロックになる。実際には前の命令の結果を次の命令が必要とする依存関係や分岐によって、待ちややり直しが発生し、この理想値から離れる。
マルチプロセッサ
上記のプロセッサ自体を高速化する技術以外に複数のプロセッサを同時稼働させて高速化を図るマルチプロセッサという技術がある。
複数プロセッサの結合方式は下記二つの種類がある。
-
密結合マルチプロセッサ
複数のプロセッサがメモリ(主記憶)を共有し同時稼働する方式。また、一つのプロセッサパッケージやチップ上に複数の処理コアを搭載するマルチコアプロセッサがある。
-
マルチコアプロセッサの代表例
-
デュアルコア
コアが \(2\) 個。 -
クアッドコア
コアが \(4\) 個。 -
ヘキサコア
コアが \(6\) 個。 -
オクタコア
コアが \(8\) 個。 -
ドデカコア
コアが \(12\) 個。 -
ヘキサデカコア
コアが \(16\) 個。
-
-
-
疎結合マルチプロセッサ
複数のプロセッサに別々のメモリを割当て同時稼働する方式。複数独立したコンピュータシステムが動いているのと同じで、複数のサーバーを連携して一つのシステムとして運用するクラスタシステムも疎結合マルチプロセッサの一つ。
-
4台に増やしても4倍速くならない例
一つの処理時間の20%は直列に実行する必要があり、残り80%だけを均等に並列化できるとする。元の処理時間を1とすると、4プロセッサでの理想的な処理時間は \(0.2+0.8/4=0.4\)。したがって高速化率は \(1/0.4=2.5\) 倍となる。さらにプロセッサ数を増やしても、直列部分の0.2は残るため、上限は5倍である。これは並列化の効果を考えるアムダールの法則の例で、通信や同期の追加コストを無視している。台数を増やす判断には並列化できる割合と増えたプロセッサ間の調整コストの両方が必要になる。
プロセッサの性能指標
以下、代表的な性能指標。
-
クロック周波数
- 1秒あたりのクロック周期数をHzで表す。周波数が同じでもプロセッサの構成や命令ごとの処理効率が異なれば性能は異なる。
-
CPI(Cycles Per Instruction)
- 1命令の実行に必要な平均クロック数。命令の種類や実行するプログラムによって変化し、同じ条件なら小さいほど効率がよい。
-
MIPS(Million Instructions Per Second)
- \(1\) 秒間に何百万命令を実行できるかを表す。
命令セットや命令の組合せによって1命令あたりの処理内容が異なるため、異なるアーキテクチャ間の単純な性能比較には向かない。
-
FLOPS(Floating-point Operations Per Second)
- \(1\) 秒毎に浮動小数点演算が何回できるかを表す。
科学技術計算やシミュレーションを行うスーパーコンピュータなどの性能指標として用いられる。
- \(1\) 秒毎に浮動小数点演算が何回できるかを表す。
-
クロック周波数とCPIを組み合わせて比較する
CPUで実行する命令数が1億、平均CPIが1.5、クロック周波数が2 GHzなら、CPU時間は次のようになる。\[ \frac{10^8\times1.5}{2\times10^9}=0.075\ \mathrm{s} \]同じ命令数で3 GHz、平均CPIが3なら、CPU時間は0.1秒になる。この条件では周波数が高い方が遅い。必要な命令数と一命令あたりの平均クロック数までそろえて初めて、CPU時間を比較できる。
ここで求めたのは与えたCPIに基づくCPU時間であり、利用者が待つ時間全体とは限らない。ディスクや通信を待つ時間など、計算に含めていない要素があれば別途考慮する。
割込み
割込みとは実行中の処理を一時中断し、発生した事象に対応する処理へ制御を移す仕組み。分類方法はプロセッサやOSによって異なるが、原因がCPU内部か外部かという観点では次のように整理できる。
-
内部割込み
命令の実行中に検出された例外やプログラムがOSのサービスを要求する命令など、CPU内部の要因で発生。-
プログラム割込み
ゼロ除算やオーバーフローなど、実行中の命令についてプロセッサが例外として扱う条件が成立したときに発生する割込み。どの条件で例外を発生させるかは命令やプロセッサの仕様によって異なる。 -
SVC(Supervisor Call)割込み
専用の命令を実行しOSのサービスを要求した場合に発生する割込み。 -
ページフォールト
プロセスが参照した仮想ページが物理メモリに常駐していない場合などに発生。アクセスが有効ならOSは補助記憶から対象ページを読み込んで処理を再開。
-
-
外部割込み
入出力装置やタイマーなど、実行中の命令とは非同期なCPU外部の要因で発生。-
タイマー割込み
タイマーにより発生する割込み。 -
機械チェック割込み
ハードウェアの異常が検出された場合に発生する割込み。 -
入出力割込み
入出力装置の処理完了やデータ受信などによって発生する割込み。 -
コンソール割込み
管理コンソールから発生する割込み。
-
エンディアン
エンディアンとは\(2\) バイト以上のデータを格納する際のデータの並び順のことで、バイトオーダーとも呼ばれる。
並び順については上位バイトから並べるビッグエンディアンと下位バイトから並べるリトルエンディアンがある。
-
並び替わるのはバイトの位置
32 bitの値0x12345678を1000番地から4 byteで保存するとする。アドレス ビッグエンディアン リトルエンディアン 1000 0x12 0x78 1001 0x34 0x56 1002 0x56 0x34 1003 0x78 0x12 どちらも表す数値は同じであり、各バイト内のビット順まで逆転するわけではない。ファイルや通信で取り決めた並びと読み取る側の解釈が違うと、同じ4 byteを別の整数として読んでしまう。メモリ上の表示順と数値の桁順を区別することが必要になる。
まとめ
- プロセッサは命令を取り出して解釈し実行。
- 性能はクロック周波数だけで決まらず、命令数や命令当たりのクロック数を表すCPI、1秒当たりの百万命令数を表すMIPSなどを組み合わせて判断する。
- パイプラインは命令の各段階を重ねて実行し、並列処理は複数の処理を同時に進める。密結合と疎結合はメモリ共有や結合度が異なる。
- 割込みは実行中の処理を一時中断し、内部または外部で発生した事象に対応する処理へ制御を移す仕組み。
- ビッグエンディアンとリトルエンディアンでは複数バイトをメモリへ格納する順序が異なる。
- パイプラインは処理の重なりを増やし、並列化の効果は直列部分に制限される。CPU時間は命令数・CPI・周波数を組み合わせて比較する。