資格道場 › レッスン一覧 › コンピュータ構成要素
コンピュータ構成要素・3/9・13分

パイプラインと並列処理で速くする

ゴール

パイプライン処理の定義と5段の順序を説明でき、「n段・m命令ならn+m−1サイクル」の計算を自力で解けるようになる。あわせて、投機実行・SIMD/MIMD・マルチコア・グリッド・GPU・パワーゲーティングを選択肢の中から見分けられるようになる。

前回は CPI(1命令に何クロックかかるか)で CPU の速さを計算しました。パイプラインは、1命令の速さはそのままで、命令を重ねて処理することで全体を速くする仕組みです。定義、計算、図の読み取り、紛らわしい用語の区別と、出題の型が決まっているので得点しやすい単元です。

このレッスンで稽古する(用語チェック・過去問)

結論:パイプラインは「段階をずらして重ねる」流れ作業

パイプライン処理とは、1つの命令の処理を複数のステージ(段階)に分け、命令を1段ずつずらしながら重ねて同時に進める方式です。1命令あたりの時間は短くなりませんが、一定時間内に終わる命令の数が増えます。

たとえば洗濯の「洗う→干す→たたむ」で、1回目を干している間に2回目を洗うと、全体が早く終わります。どの段も遊ばせないのがコツで、CPU も同じ考え方です。

試験では、似たような高速化の方式と並べて出題されます。キーワードで見分けましょう。

方式 何をするか 選択肢の目印
パイプライン 命令をステージに分け、段階をずらして重ねる 「複数のステージに細分化」「少しずつ段階をずらして」
スーパスカラ 演算器を複数持ち、実行時に動的に割り当てて同時実行する 「実行される段階で動的に決めながら」
VLIW コンパイラがあらかじめ演算器への割当てを決めておく 「目的プログラムを生成する段階で割り振る」
マイクロプログラム方式 1命令を、より細かいマイクロ命令の組合せで実行する 「更に細かなマイクロ命令」
洗う干すたたむ逐次:1回ずつ終わらせる111222333パイプライン:ずらして重ねる111222333ここで全部終わる1回分の時間は同じ時間
同じ3回の洗濯でも、段階をずらして重ねると全体が早く終わる(1回分の時間は変わらない)。

図で確認:F→D→E を1マスずつずらす

命令を「F:命令フェッチ(メモリから命令を取ってくる)→ D:解読 → E:実行」の3段に分けた場合、正しいパイプラインは次のようになります。

時刻 1 2 3 4 5
命令1 F D E
命令2 F D E
命令3 F D E

確かめるのは2点です。① どの命令も F→D→E の順になっているか、② 次の命令が1マスずつ遅れて始まっているかです。全く重ならない図は逐次実行(パイプラインなし)です。順序が D→F→E になっている図や、同じ段を2つの命令が同時に使う図は誤りです。

RISC の5段パイプラインの順序

RISC(単純な命令を少しだけ持ち、パイプラインに向く CPU 設計)でよく使う5段の順序は、次のとおりです。

  1. 命令フェッチ(命令を取ってくる)
  2. 命令デコードとレジスタファイル読出し(解読して、使う値を読む)
  3. 実行とアドレス生成(計算する・メモリ番地を求める)
  4. メモリアクセス(メモリを読み書きする)
  5. 書込み(結果をレジスタに書き戻す)

「取る→読む→やる→メモリ→書く」と覚えましょう。メモリアクセスには番地が必要なので、番地を計算する「実行とアドレス生成」が必ず先に来ます。

実行時間の計算:最初の1命令だけ全段分かかる

どの段も1サイクル(1ピッチ)で終わり、途中で止まらない前提で考えます。最初の命令はステージ数分の時間がかかり、それ以降は1サイクルごとに1命令ずつ終わります。

  • サイクル数 = ステージ数 + 命令数 − 1
  • 時間 = (命令数 I + 深さ D − 1) × ピッチ P

パイプラインの深さはステージ数、パイプラインピッチは1ステージにかかる時間を指します。上の図でも、3段・3命令で 3+3−1=5 サイクルになっています。この「−1」は、最初の命令の最終段と2番目以降の数え方が重なる分を引いたものです。

時刻12345命令1FDE命令2FDE命令3FDE最初の1命令:3残り:1ずつ×23 + (3 − 1) = 5 サイクルステージ数 + 命令数 − 1
3段・3命令の例:最初の1命令で3サイクル、残り2命令は1サイクルずつ終わるので 3+3−1=5 サイクル。

分岐命令に弱い:ハザードと投機実行

パイプラインは「次はこの命令」と見込んで先に取りかかります。分岐命令(条件によって次に実行する場所が変わる命令)があると、見込みが外れたときに先取りした命令を捨てることになります。このように流れが乱れることをパイプラインハザードといいます。

そのため、パイプラインを生かすには分岐命令を少なくするのが基本です。CASE 文を増やすと分岐も増えるので逆効果です。命令の読込みとデータのアクセスが分かれた構造の CPU なら、メモリアクセス命令はパイプラインへの影響が小さくなります。

対策として、分岐先を予想する分岐予測と、確定する前に予想した先の命令を実行し始める投機実行があります。紛らわしい方式は次のとおりです。

用語 説明
投機実行 分岐先が決まる前に、予測した分岐先の命令の実行を始める
アウトオブオーダ実行 依存関係のない命令を、プログラムの順序に関係なく実行する
SMT(ハイパースレッディング) パイプラインの空きを使って2スレッドを動かし、2プロセッサに見せる
マルチコア 2つ以上のコアで複数スレッドを同時に実行する
123456分岐命令FDE先取りFD捨てる先取りF捨てる分岐先FDE行き先が決まる見込みが外れると先取りを捨てる(ハザード)対策:決まる前に予測先を実行=投機実行
分岐命令の行き先が決まると、見込みで先取りしていた命令は捨てられ、本当の分岐先から取り直しになる。

並列処理の分類:SIMD と MIMD

命令の流れとデータの流れが「1本か複数か」で4つに分けます。試験では SIMD と MIMD の区別がよく問われます。

方式 命令 データ 特徴
SISD 1つ 1つ 普通の逐次処理
SIMD 1つ 複数 1命令で複数データに同じ操作をする。画像・音声などマルチメディア処理向け
MISD 複数 1つ 実用例はほとんどない
MIMD 複数 複数 プロセッサごとに違う命令を実行する。商用の超並列コンピュータの多く

CISC や RISC は命令セットの設計思想です。並列処理方式の分類ではないので、この問題では外れ選択肢になります。

SIMD命令(1つ)データデータデータ全部に同じ操作画像・音声向けMIMD命令A命令B命令Cデータデータデータそれぞれ違う命令超並列コンピュータ
SIMD は1つの命令を複数のデータに同時にかけ、MIMD はプロセッサごとに違う命令をそれぞれのデータにかける。

マルチコアとグリッドコンピューティング

マルチコアプロセッサは、1つのプロセッサに複数のコア(演算の中心部分)を載せたものです。クロック周波数を上げなくても処理性能を高められるので、消費電力を抑えやすいのが特徴です。ただし性能がコア数の n 倍(まして n² 倍)になるわけではありません。キャッシュやメモリなど共有資源の取り合い(競合)も起こります。

グリッドコンピューティングは、ネットワーク上の PC から大型機までをまとめ、処理を分割して並列に計算させ、1つの大規模な処理をこなす方式です。データを中央に集める集中処理、バックアップ、データ共有とは別物です。役割を固定した複数プロセッサ(非対称型)や、同等の複数プロセッサ(対称型)の説明とも区別しましょう。

プロセッサの種類と省電力技術

特徴の説明文から名前を当てる形式で出題されます。

名前 特徴
GPU 多数の浮動小数点演算ユニットを並列に動かし、3D 演算などを高速に処理する
TPM OS や他のハードウェアから独立して、暗号鍵などを安全に管理するチップ
FPGA 目的に合わせて内部の論理回路を作り直せる
量子コンピュータ 0と1を重ね合わせた量子ビットで計算する

省電力技術は「何を止める(変える)か」で区別します。

技術 何をするか
パワーゲーティング 使っていない回路ブロックへの電源を遮断する
クロックゲーティング 使っていない回路ブロックへのクロックを止める
DVFS 仕事量に応じて電圧や周波数を変える
(電力枠の再配分) 使わないコアの電力枠を、動いているコアに回す
例題 1

5ステージ・20命令は何サイクル?

全ての命令が 5 ステージで完了するように設計された,パイプライン制御のコンピュータがある。20 命令を実行するには何サイクル必要となるか。ここで,全ての命令は途中で停止することなく実行でき,パイプラインの各ステージは 1 サイクルで動作を完了するものとする。

ア 20
イ 21
ウ 24
エ 25

出典:基本情報技術者試験 科目A免除 修了試験 20200726 実施分 問11

解き方と答えを見る
  1. 条件を整理する:ステージ数 n=5、命令数 m=20、途中で止まらない、1ステージ=1サイクル。
  2. 最初の命令は5つのステージをすべて通るので、5サイクル目に完了する。
  3. 2番目以降の命令は1サイクルずつ遅れて始まるので、1サイクルごとに1命令ずつ完了する。残りは 20−1=19 命令なので、さらに 19 サイクルかかる。
  4. 合計は 5+19=24 サイクル。公式 n+m−1 に当てはめても 5+20−1=24 になる。
  5. 誤りの選択肢を確認する:20 は最初の命令が全段を通る時間を無視した数、25 は 5+20 と最初の命令を二重に数えた数。21 も最初の命令の扱いを誤った数で、公式で数え直せば外せる。また、5×20=100(パイプラインを使わず1命令ずつ実行した場合)と考える誤りもある。ただし 100 は選択肢にない。

答え:ウ(24サイクル)

例題 2

深さ D・ピッチ P・I命令の所要時間の式

パイプラインの深さを D,パイプラインピッチを P 秒とすると,I 個の命令をパイプラインで実行するのに要する時間を表す式はどれか。ここで,パイプラインは 1 本だけとし,全ての命令は処理に D ステージ分の時間がかかり,各ステージは 1 ピッチで処理されるものとする。また,パイプラインハザードについては,考慮しなくてよい。

ア (I + D) × P
イ (I + D − 1) × P
ウ (I × D) + P
エ (I × D − 1) + P

出典:基本情報技術者試験 科目A免除 修了試験 20180128 実施分 問10

解き方と答えを見る
  1. 最初の命令は D ステージを通るので、D×P 秒かかる。
  2. 残りの I−1 個の命令は、1ピッチごとに1つずつ完了するので、(I−1)×P 秒かかる。
  3. 合計は D×P+(I−1)×P=(I+D−1)×P。
  4. 数値で確かめる:D=5、I=20、P=1 を代入すると (20+5−1)×1=24 になり、前の例題と一致する。
  5. (I+D)×P は最初の命令を二重に数えている。ウ・エは命令数と深さを掛けたものにピッチを足しており、単位がそろわないので不正解。

答え:イ((I+D−1)×P)

要点(試験直前に読む)

  • パイプライン=命令をステージに分け、1段ずつずらして重ねて実行する。図問題では「F→D→E の順」と「1マスずれ」を確認する。
  • RISC の5段は「フェッチ→デコード・レジスタ読出し→実行・アドレス生成→メモリアクセス→書込み」。
  • サイクル数=ステージ数+命令数−1。時間=(I+D−1)×P。5段・20命令なら24サイクル。
  • 分岐命令はパイプラインを乱すので減らすほうがよい。分岐先を予測して先に実行するのが投機実行。
  • SIMD=1命令で複数データ(マルチメディア向け)、MIMD=プロセッサごとに違う命令(超並列機)。
  • GPU=多数の演算器で並列計算。パワーゲーティング=電源を遮断、クロックゲーティング=クロックを停止。

ひっかけ

  • パイプラインの定義問題では、スーパスカラ(実行時に動的に割当て)、VLIW(コンパイラが割当て)、マイクロプログラム、SIMD・MIMD の説明が並ぶ。「段階をずらして重ねる」「ステージに細分化」がある選択肢を選ぶ。
  • サイクル数の問題では、選択肢に 20・21・25 が並ぶ。20×5=100 のようにパイプラインなしの掛け算で考えたり、20+5=25 と最初の命令を二重に数えたりする誤りを誘っている。必ず「最初の命令は n、残りは 1 ずつ」で数え直す。
  • タイムチャートの図問題では、段の順序を D→F→E に崩した図や、2つの命令が同時に始まる図が混ざる。順序 F→D→E と1マスずれの両方を満たす図だけが正解。
  • 投機実行の問題では、アウトオブオーダ実行(順序の入れ替え)、SMT(2スレッドで2プロセッサに見せる)、マルチコアの説明が並ぶ。「分岐先が決まる前に予測して実行」が正解の目印。
  • パワーゲーティングの問題では、クロック停止(クロックゲーティング)、電圧・周波数の変更(DVFS)、電力枠の再配分が並ぶ。「電源供給を遮断」の一語で見分ける。

用語(25)

パイプライン処理 パイプラインしょり
命令の処理を複数の段階に分け、命令を1段ずつずらして重ねて同時に進める高速化の方式。
⚠ スーパスカラ(実行時に演算器を動的に割当て)やVLIW(コンパイラが割当て)と混同しやすい。「段階をずらして重ねる」がパイプラインの目印。
ステージ ステージ
パイプラインで1つの命令の処理を分けた各段階(例:フェッチ・解読・実行)。
パイプラインの深さ パイプラインのふかさ
1命令を分けたステージの数。
⚠ ピッチ(1ステージにかかる時間)と取り違えない。
パイプラインピッチ パイプラインピッチ
1ステージの処理にかかる時間で、パイプラインが1段進む間隔。
⚠ 深さ(段数)と取り違えない。
命令フェッチ めいれいフェッチ
実行する命令をメモリから取り出す最初の段階。
⚠ デコード(取り出した命令の解読)より必ず先に来る。
RISC Reduced Instruction Set Computer
単純で長さのそろった命令を少数持ち、パイプライン処理に向いた CPU の設計思想。
⚠ CISC(複雑な命令を多く持つ)。どちらも命令セットの考え方で、SIMD・MIMD のような並列処理方式の分類ではない。
パイプラインハザード パイプラインハザード
分岐などが原因で、先に取りかかった命令が使えなくなり、パイプラインの流れが乱れたり止まったりすること。
分岐予測 ぶんきよそく
分岐命令の分岐先がどちらになるかを、実行前に予想する仕組み。
⚠ 投機実行は、予想した先の命令を実際に実行し始めること。
投機実行 とうきじっこう
分岐先が確定する前に、予測した分岐先の命令の実行を始めること。
⚠ アウトオブオーダ実行(依存のない命令の順番を入れ替える)。「分岐先が決まる前に」が投機実行の目印。
アウトオブオーダ実行 アウトオブオーダじっこう
依存関係のない命令を、プログラムに書かれた順序に関係なく実行すること。
⚠ 投機実行と混同しやすい。こちらは分岐の予測ではなく順序の入れ替え。
スーパスカラ スーパスカラ
複数の演算器を持ち、実行時に動的に割り当てて複数の命令を同時に実行する方式。
⚠ VLIW はコンパイル時に割当てを決める。「動的」ならスーパスカラ。
VLIW Very Long Instruction Word
同時に実行する命令と使う演算器を、コンパイラがあらかじめ決めて1つの長い命令にまとめる方式。
⚠ スーパスカラ(実行時に動的に割当て)。
マルチコアプロセッサ マルチコアプロセッサ
1つのプロセッサに複数のコアを載せ、消費電力を抑えながら処理性能を高めるもの。
⚠ 性能がコア数倍になる・共有資源の競合がない・クロックを高くできる、はいずれも誤り。
SMT Simultaneous MultiThreading
1つのコアのパイプラインの空きを使って複数のスレッドを実行し、複数のプロセッサがあるように見せる技術(ハイパースレッディング)。
⚠ マルチコアは物理的にコアが複数ある。SMT はコアが1つでも成り立つ。
SIMD Single Instruction Multiple Data
1つの命令で、複数のデータに同じ操作を同時に行う方式で、マルチメディア処理に使われる。
⚠ MIMD はプロセッサごとに違う命令を実行する。「1命令で同一の操作」なら SIMD。
MIMD Multiple Instruction Multiple Data
複数のプロセッサが、それぞれ違う命令を違うデータに対して並列に実行する方式。
⚠ SIMD(1命令を複数データに適用)。
SISD・MISD Single Instruction Single Data・Multiple Instruction Single Data
SISD は1命令・1データの普通の逐次処理、MISD は複数命令・1データの方式で、実用例はほとんどない。
グリッドコンピューティング グリッドコンピューティング
ネットワーク上の多数のコンピュータに処理を分割して割り当て、まとめて1つの大規模な処理を行う方式。
⚠ 中央への集中処理、バックアップ、データ共有、1台の中での対称型・非対称型マルチプロセッサとは別物。
GPU Graphics Processing Unit
多数の浮動小数点演算ユニットを並列に動かし、3D 描画などの大量計算を高速に行うプロセッサ。
⚠ TPM(鍵の安全な管理)、FPGA(回路を作り直せる)、量子コンピュータ(量子ビット)。
TPM Trusted Platform Module
OS や他のハードウェアから独立して、暗号鍵などを安全に保管・処理するチップ。
FPGA Field Programmable Gate Array
出荷後も、目的に合わせて内部の論理回路を作り直せる半導体デバイス。
量子コンピュータ りょうしコンピュータ
0と1を重ね合わせた状態を持てる量子ビットを使って計算するコンピュータ。
パワーゲーティング パワーゲーティング
動作していない回路ブロックへの電源供給を遮断して、消費電力を減らす技術。
⚠ クロックゲーティングはクロックを止めるだけ。「電源を遮断」ならパワーゲーティング。
クロックゲーティング クロックゲーティング
動作していない回路ブロックへのクロック供給を止めて、消費電力を減らす技術。
⚠ パワーゲーティング(電源そのものを遮断)。
DVFS Dynamic Voltage and Frequency Scaling
仕事量に応じて、プロセッサの電源電圧とクロック周波数を変えて消費電力を調整する技術。
⚠ パワーゲーティング(止まっている部分の電源を切る)。

このレッスンの過去問

このレッスンで稽古する