パイプラインと並列処理で速くする
パイプライン処理の定義と5段の順序を説明でき、「n段・m命令ならn+m−1サイクル」の計算を自力で解けるようになる。あわせて、投機実行・SIMD/MIMD・マルチコア・グリッド・GPU・パワーゲーティングを選択肢の中から見分けられるようになる。
前回は CPI(1命令に何クロックかかるか)で CPU の速さを計算しました。パイプラインは、1命令の速さはそのままで、命令を重ねて処理することで全体を速くする仕組みです。定義、計算、図の読み取り、紛らわしい用語の区別と、出題の型が決まっているので得点しやすい単元です。
このレッスンで稽古する(用語チェック・過去問)結論:パイプラインは「段階をずらして重ねる」流れ作業
パイプライン処理とは、1つの命令の処理を複数のステージ(段階)に分け、命令を1段ずつずらしながら重ねて同時に進める方式です。1命令あたりの時間は短くなりませんが、一定時間内に終わる命令の数が増えます。
たとえば洗濯の「洗う→干す→たたむ」で、1回目を干している間に2回目を洗うと、全体が早く終わります。どの段も遊ばせないのがコツで、CPU も同じ考え方です。
試験では、似たような高速化の方式と並べて出題されます。キーワードで見分けましょう。
| 方式 | 何をするか | 選択肢の目印 |
|---|---|---|
| パイプライン | 命令をステージに分け、段階をずらして重ねる | 「複数のステージに細分化」「少しずつ段階をずらして」 |
| スーパスカラ | 演算器を複数持ち、実行時に動的に割り当てて同時実行する | 「実行される段階で動的に決めながら」 |
| VLIW | コンパイラがあらかじめ演算器への割当てを決めておく | 「目的プログラムを生成する段階で割り振る」 |
| マイクロプログラム方式 | 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命令だけ全段分かかる
どの段も1サイクル(1ピッチ)で終わり、途中で止まらない前提で考えます。最初の命令はステージ数分の時間がかかり、それ以降は1サイクルごとに1命令ずつ終わります。
- サイクル数 = ステージ数 + 命令数 − 1
- 時間 = (命令数 I + 深さ D − 1) × ピッチ P
パイプラインの深さはステージ数、パイプラインピッチは1ステージにかかる時間を指します。上の図でも、3段・3命令で 3+3−1=5 サイクルになっています。この「−1」は、最初の命令の最終段と2番目以降の数え方が重なる分を引いたものです。
分岐命令に弱い:ハザードと投機実行
パイプラインは「次はこの命令」と見込んで先に取りかかります。分岐命令(条件によって次に実行する場所が変わる命令)があると、見込みが外れたときに先取りした命令を捨てることになります。このように流れが乱れることをパイプラインハザードといいます。
そのため、パイプラインを生かすには分岐命令を少なくするのが基本です。CASE 文を増やすと分岐も増えるので逆効果です。命令の読込みとデータのアクセスが分かれた構造の CPU なら、メモリアクセス命令はパイプラインへの影響が小さくなります。
対策として、分岐先を予想する分岐予測と、確定する前に予想した先の命令を実行し始める投機実行があります。紛らわしい方式は次のとおりです。
| 用語 | 説明 |
|---|---|
| 投機実行 | 分岐先が決まる前に、予測した分岐先の命令の実行を始める |
| アウトオブオーダ実行 | 依存関係のない命令を、プログラムの順序に関係なく実行する |
| SMT(ハイパースレッディング) | パイプラインの空きを使って2スレッドを動かし、2プロセッサに見せる |
| マルチコア | 2つ以上のコアで複数スレッドを同時に実行する |
並列処理の分類:SIMD と MIMD
命令の流れとデータの流れが「1本か複数か」で4つに分けます。試験では SIMD と MIMD の区別がよく問われます。
| 方式 | 命令 | データ | 特徴 |
|---|---|---|---|
| SISD | 1つ | 1つ | 普通の逐次処理 |
| SIMD | 1つ | 複数 | 1命令で複数データに同じ操作をする。画像・音声などマルチメディア処理向け |
| MISD | 複数 | 1つ | 実用例はほとんどない |
| MIMD | 複数 | 複数 | プロセッサごとに違う命令を実行する。商用の超並列コンピュータの多く |
CISC や RISC は命令セットの設計思想です。並列処理方式の分類ではないので、この問題では外れ選択肢になります。
マルチコアとグリッドコンピューティング
マルチコアプロセッサは、1つのプロセッサに複数のコア(演算の中心部分)を載せたものです。クロック周波数を上げなくても処理性能を高められるので、消費電力を抑えやすいのが特徴です。ただし性能がコア数の n 倍(まして n² 倍)になるわけではありません。キャッシュやメモリなど共有資源の取り合い(競合)も起こります。
グリッドコンピューティングは、ネットワーク上の PC から大型機までをまとめ、処理を分割して並列に計算させ、1つの大規模な処理をこなす方式です。データを中央に集める集中処理、バックアップ、データ共有とは別物です。役割を固定した複数プロセッサ(非対称型)や、同等の複数プロセッサ(対称型)の説明とも区別しましょう。
プロセッサの種類と省電力技術
特徴の説明文から名前を当てる形式で出題されます。
| 名前 | 特徴 |
|---|---|
| GPU | 多数の浮動小数点演算ユニットを並列に動かし、3D 演算などを高速に処理する |
| TPM | OS や他のハードウェアから独立して、暗号鍵などを安全に管理するチップ |
| FPGA | 目的に合わせて内部の論理回路を作り直せる |
| 量子コンピュータ | 0と1を重ね合わせた量子ビットで計算する |
省電力技術は「何を止める(変える)か」で区別します。
| 技術 | 何をするか |
|---|---|
| パワーゲーティング | 使っていない回路ブロックへの電源を遮断する |
| クロックゲーティング | 使っていない回路ブロックへのクロックを止める |
| DVFS | 仕事量に応じて電圧や周波数を変える |
| (電力枠の再配分) | 使わないコアの電力枠を、動いているコアに回す |
5ステージ・20命令は何サイクル?
ア 20
イ 21
ウ 24
エ 25
出典:基本情報技術者試験 科目A免除 修了試験 20200726 実施分 問11
解き方と答えを見る
- 条件を整理する:ステージ数 n=5、命令数 m=20、途中で止まらない、1ステージ=1サイクル。
- 最初の命令は5つのステージをすべて通るので、5サイクル目に完了する。
- 2番目以降の命令は1サイクルずつ遅れて始まるので、1サイクルごとに1命令ずつ完了する。残りは 20−1=19 命令なので、さらに 19 サイクルかかる。
- 合計は 5+19=24 サイクル。公式 n+m−1 に当てはめても 5+20−1=24 になる。
- 誤りの選択肢を確認する:20 は最初の命令が全段を通る時間を無視した数、25 は 5+20 と最初の命令を二重に数えた数。21 も最初の命令の扱いを誤った数で、公式で数え直せば外せる。また、5×20=100(パイプラインを使わず1命令ずつ実行した場合)と考える誤りもある。ただし 100 は選択肢にない。
答え:ウ(24サイクル)
深さ D・ピッチ P・I命令の所要時間の式
ア (I + D) × P
イ (I + D − 1) × P
ウ (I × D) + P
エ (I × D − 1) + P
出典:基本情報技術者試験 科目A免除 修了試験 20180128 実施分 問10
解き方と答えを見る
- 最初の命令は D ステージを通るので、D×P 秒かかる。
- 残りの I−1 個の命令は、1ピッチごとに1つずつ完了するので、(I−1)×P 秒かかる。
- 合計は D×P+(I−1)×P=(I+D−1)×P。
- 数値で確かめる:D=5、I=20、P=1 を代入すると (20+5−1)×1=24 になり、前の例題と一致する。
- (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段進む間隔。
⚠ 深さ(段数)と取り違えない。
実行する命令をメモリから取り出す最初の段階。
⚠ デコード(取り出した命令の解読)より必ず先に来る。
単純で長さのそろった命令を少数持ち、パイプライン処理に向いた CPU の設計思想。
⚠ CISC(複雑な命令を多く持つ)。どちらも命令セットの考え方で、SIMD・MIMD のような並列処理方式の分類ではない。
分岐などが原因で、先に取りかかった命令が使えなくなり、パイプラインの流れが乱れたり止まったりすること。
分岐命令の分岐先がどちらになるかを、実行前に予想する仕組み。
⚠ 投機実行は、予想した先の命令を実際に実行し始めること。
分岐先が確定する前に、予測した分岐先の命令の実行を始めること。
⚠ アウトオブオーダ実行(依存のない命令の順番を入れ替える)。「分岐先が決まる前に」が投機実行の目印。
依存関係のない命令を、プログラムに書かれた順序に関係なく実行すること。
⚠ 投機実行と混同しやすい。こちらは分岐の予測ではなく順序の入れ替え。
複数の演算器を持ち、実行時に動的に割り当てて複数の命令を同時に実行する方式。
⚠ VLIW はコンパイル時に割当てを決める。「動的」ならスーパスカラ。
同時に実行する命令と使う演算器を、コンパイラがあらかじめ決めて1つの長い命令にまとめる方式。
⚠ スーパスカラ(実行時に動的に割当て)。
1つのプロセッサに複数のコアを載せ、消費電力を抑えながら処理性能を高めるもの。
⚠ 性能がコア数倍になる・共有資源の競合がない・クロックを高くできる、はいずれも誤り。
1つのコアのパイプラインの空きを使って複数のスレッドを実行し、複数のプロセッサがあるように見せる技術(ハイパースレッディング)。
⚠ マルチコアは物理的にコアが複数ある。SMT はコアが1つでも成り立つ。
1つの命令で、複数のデータに同じ操作を同時に行う方式で、マルチメディア処理に使われる。
⚠ MIMD はプロセッサごとに違う命令を実行する。「1命令で同一の操作」なら SIMD。
複数のプロセッサが、それぞれ違う命令を違うデータに対して並列に実行する方式。
⚠ SIMD(1命令を複数データに適用)。
SISD は1命令・1データの普通の逐次処理、MISD は複数命令・1データの方式で、実用例はほとんどない。
ネットワーク上の多数のコンピュータに処理を分割して割り当て、まとめて1つの大規模な処理を行う方式。
⚠ 中央への集中処理、バックアップ、データ共有、1台の中での対称型・非対称型マルチプロセッサとは別物。
多数の浮動小数点演算ユニットを並列に動かし、3D 描画などの大量計算を高速に行うプロセッサ。
⚠ TPM(鍵の安全な管理)、FPGA(回路を作り直せる)、量子コンピュータ(量子ビット)。
OS や他のハードウェアから独立して、暗号鍵などを安全に保管・処理するチップ。
出荷後も、目的に合わせて内部の論理回路を作り直せる半導体デバイス。
0と1を重ね合わせた状態を持てる量子ビットを使って計算するコンピュータ。
動作していない回路ブロックへの電源供給を遮断して、消費電力を減らす技術。
⚠ クロックゲーティングはクロックを止めるだけ。「電源を遮断」ならパワーゲーティング。
動作していない回路ブロックへのクロック供給を止めて、消費電力を減らす技術。
⚠ パワーゲーティング(電源そのものを遮断)。
仕事量に応じて、プロセッサの電源電圧とクロック周波数を変えて消費電力を調整する技術。
⚠ パワーゲーティング(止まっている部分の電源を切る)。
このレッスンの過去問
- パイプライン処理方式の定義平成22年度 秋期 基本情報技術者試験 午前 問10
- RISCパイプラインの5ステージの順序平成28年度 春期 基本情報技術者試験 午前 問10
- パイプライン処理の実行時間計算基本情報技術者試験 科目A免除 修了試験 20200726 実施分 問11
- パイプライン処理と分岐命令の影響基本情報技術者試験 科目A免除 修了試験 20171210 実施分 問10
- 投機実行の定義(分岐予測)平成28年度 秋期 基本情報技術者試験 午前 問10
- マルチコアプロセッサの特徴平成24年度 春期 基本情報技術者試験 午前 問10
- MIMDとSIMDの並列処理方式の分類基本情報技術者試験 科目A免除 修了試験 20180128 実施分 問11
- グリッドコンピューティングの定義基本情報技術者試験 科目A免除 修了試験 20171210 実施分 問9
- プロセッサの種類と特徴(GPU・TPM・FPGA・量子)令和8年度 基本情報技術者試験 科目A 公開問題 問3
- パワーゲーティングの定義基本情報技術者試験 科目A免除 修了試験 20241208 実施分 問8