MIPSのマイクロアーキテクチャ

Similar documents
Microsoft PowerPoint - Sol7 [Compatibility Mode]

計算機アーキテクチャ

計算機アーキテクチャ

ディジタル回路 第1回 ガイダンス、CMOSの基本回路

ソフトウェア基礎技術研修

Microsoft PowerPoint - Chap4 [Compatibility Mode]

COMET II のプログラミング ここでは機械語レベルプログラミングを学びます 1

Microsoft PowerPoint - 3.3タイミング制御.pptx

コンピュータ工学Ⅰ

2ALU 以下はデータ幅 4ビットの ALU の例 加算, 減算,AND,OR の4つの演算を実行する 実際のプロセッサの ALU は, もっと多種類の演算が可能 リスト 7-2 ALU の VHDL 記述 M use IEEE.STD_LOGIC_1164.ALL; 00 : 加算 use IEE

ディジタル回路 第1回 ガイダンス、CMOSの基本回路

ソフトウェア基礎技術研修

プログラミング入門1

-2 外からみたプロセッサ GND VCC CLK A0 A1 A2 A3 A4 A A6 A7 A8 A9 A10 A11 A12 A13 A14 A1 A16 A17 A18 A19 D0 D1 D2 D3 D4 D D6 D7 D8 D9 D10 D11 D12 D13 D14 D1 MEMR

Windows10の標準機能だけでデータを完全バックアップする方法 | 【ぱそちき】パソコン初心者に教えたい仕事に役立つPC知識

Microsoft PowerPoint - NxLecture ppt [互換モード]

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

Microsoft PowerPoint - Lec pptx

計算機アーキテクチャ特論 後半第2回 アウトオブオーダー実行 Out-of-Order Execution

回路 7 レジスタ ( 同期イネーブル及び非同期リセット付 ) 入力データを保持するのに用いる記憶素子 使用用途として, マイクロプロセッサ内部で演算や実行状態の保持に用いられる Fig4-2 のレジスタは, クロック信号の立ち上がり時かつ 信号が 1 のときに外部からの 1 ビットデータ R をレ

Microsoft PowerPoint - NxLec ppt

QuartusII SOPC_Builderで利用できるGPIF-AVALONブリッジとは?

コンピュータの仕組み(1)ハードウェア

JavaプログラミングⅠ

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

ex05_2012.pptx

JavaプログラミングⅠ

また RLF 命令は 図 2 示す様に RRF 命令とは逆に 各ビットを一つずつ 左方向に回転 ( ローテイト ) する命令である 8 ビット変数のアドレスを A とし C フラグに 0 を代入してから RLF A,1 を実行すると 変数の内容が 左に 1 ビットシフトし 最下位ビット (LSB)

2.RL78 での割り込み処理 ( 割り込み受け付け ) マスクが解除された (xxmk ビットが 0 の ) 割り込み要求信号は 2 つの用途で使用されます 一つ目は,CPU のスタンバイ状態の解除です この動作は, 割り込み優先順位とは全く無関係で, マスクされていない (xxmk=0 の )

Microsoft PowerPoint - Chap3 [Compatibility Mode]

初心者のための RL78 入門コース ( 第 3 回 : ポート出力例 2 とポート入力 ) 第 3 回の今回は, 前回作成したプログラムを RL78/G13 のハードウェアを用いて見直しをお こないます 今回の内容 8. コード生成を利用した実際のプログラム作成 ( その 2) P40 9. コー

注 ) CDをセットしてから プログラムが起動するまでの時間はパソコン CDドライブの性能によって差がありますが 概ね10 秒程度です 1 分間待ってもプログラムが起動しない場合は もう一度 CDをセットしなおしてください それでも起動しない場合 CDからの自動起動が無効になっている可能性があります

マウス操作だけで本格プログラミングを - 世界のナベアツをコンピュータで - プログラムというと普通は英語みたいな言葉で作ることになりますが 今回はマウスの操作だけで作ってみます Baltie, SGP System 操作説明ビデオなどは 高校 情

arduino プログラミング課題集 ( Ver /06/01 ) arduino と各種ボードを組み合わせ 制御するためのプログラミングを学 ぼう! 1 入出力ポートの設定と利用方法 (1) 制御( コントロール ) する とは 外部装置( ペリフェラル ) が必要とする信号をマイ

まず,13 行目の HardwareTimer Timer(1); は,HardwareTimer というクラスを利用するという宣言である. この宣言によって Timer というインスタンスが生成される.Timer(1) の 1 は,OpenCM に 4 個用意されているタイマのうち,1 番のタイマ

スライド 1

CodeRecorderでカバレッジ

Microsoft PowerPoint - 01-VerilogSetup-2019.pptx

MIPSのマルチサイクル マイクロアーキテクチャ

目次 はじめに第章議長権限について 1 自由会議モードと議長会議モード 2 議長になることでできる操作 第 2 章議長専用の機能紹介第章議長専用メニューの使い方 1 会議モードの変更 2 ミュート 3 映像同期化 4 レイアウト同期化 5 会議室の入室制限 6 録画の制限 7 プライベートチャット制

Microsoft PowerPoint - 6.PID制御.pptx

- VHDL 演習 ( 組み合せ論理回路 ) 回路 半加算器 (half adder,fig.-) 全加算器を構成する要素である半加算器を作成する i) リスト - のコードを理解してから, コンパイル, ダウンロードする ii) 実験基板上のスイッチ W, が, の入力,LED, が, の出力とな

2 / 8 オンデマンドダウンロード機能 を使用するときに次の制約があります 1. インターネットに接続されていない ( オフライン ) 場合は OneDrive エリアのみにあるファイルを開くことはできない 2.OneDrive エリアからダウンロードが完了するまでいくらか待たされるし ( 特に大

Microsoft Word - Mac版 Eclipseの導入と設定.docx

ディジタル回路 第1回 ガイダンス、CMOSの基本回路

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

TOPPERS活用アイデア・アプリケーション開発

Microsoft Word - CygwinでPython.docx

PowerPoint プレゼンテーション

untitled

Microsoft PowerPoint - ソフトウェア更新手順書_DAN-W62_mac_ _1.ppt

HDDコピーツール CloneDrive2

POSIXスレッド

/*Source.cpp*/ #include<stdio.h> //printf はここでインクルードして初めて使えるようになる // ここで関数 average を定義 3 つの整数の平均値を返す double 型の関数です double average(int a,int b,int c){

PowerPoint プレゼンテーション

Singapore Contec Pte Ltd. Opening Ceremony

スライド 1

CR-UK1ソフトウェアユーザーズガイド

スライド 1

Microsoft Word Proself-guide4STD+Prof.docx

VLSI工学

スクールCOBOL2002

040402.ユニットテスト

PowerPoint プレゼンテーション

Transcription:

今回はパイプラインの動作を妨げるハザードとその対処法をやります 1

前回紹介した構造ハザードは 資源の競合により起こるハザードで回避は簡単 ( というか複製しか手がない ) でした 今回はハザードの中のハザード データハザードを紹介します 2

パイプライン処理では 直前の命令の結果がレジスタファイルに書き込まれないうちに 後続の命令が読み出しを行うため この命令間にデータの依存性があると 誤って更新前の値を読み出してしまいます これを書き込む前に読んでしまうことから RAW(Read After Write) ハザードと呼ばれ 最も一般的なハザードです 他にも WAR や WAW があるのですが MIPS ではパイプラインの最後に結果を書き込むのでこれらは生じません RAW ハザードを解決するには 命令間の間隔を保ってやれば良いのですが これは本質的に性能を落とすことになります もう一つ 最新の結果を横流しすることで データハザードのロスを軽減することができます 3

データハザードの範囲を検討しましょう W ステージで書き込みを行うので 2 3 ではこの値が読めず これ以前の値を読み出すことになります 4 も書き込んだデータを読めるように工夫しなければ同様に以前の値を読んでしまうことになります ここで 4 は比較的容易に対処が可能です レジスタファイルに書き込んだ値をそのまま読めれば良いので 書いた値をスルーして読めるようにするか サイクルの前半で書いて 後半で読み出すようにするかを行います 4

この記述は後者のアプローチで クロックが立ち下がった時にデータが格納されるようにします この方法でクロックの前半で書き込み 後半で読み出しが行われます 後半の時間がクリティカルパスになり勝ちです 5

5 は回避できたので それ以前の命令のデータハザードを回避するために 命令間の距離を取る方法を検討しましょう この場合 二つ NOP を入れれば回避できることが分かります しかし これはかなりの性能低下をもたらします より現実的な方法は来週検討しましょう 6

さらに積極的にフォワーディングをするにはどうすれば良いでしょう? この例では 1 の命令の結果は E ステージの終わりでは計算済です これを次の命令の E ステージの最初に送れば 計算可能になります また この命令が M ステージを出た所で 次の次の命令の E ステージに送ってやれば 3 の命令も計算可能になります 7

ここでは データの入れ替えは基本的に E ステージの ALU の直前で行います これは 先行命令の結果を書き込むレジスタ (rd か rt) が E ステージの命令の rt(rs) と一致することが必要で かつ先行命令がレジスタファイルに書き込みを行う命令であることが必要です 8

このために ALU の入力にフォワーディング用のマルチプレクサを付けます 9

このマルチプレクサに対して条件が成立した場合の計算結果をフィードバックします これは 命令 1 から命令 2 へのフィードバックです 10

同様のフォワーディングは W ステージからも行います 両方からのフィードバックが必要な場合 M ステージを優先します 11

通常の計算データはこの方法でフォワーディング可能です しかし Load 系の命令 lw, lb, lbu ではこれだけでは十分でないです この命令では 答が M ステージの終了後でなければ得られないためです このため次の命令でこの結果を利用する場合 どうしても 1 サイクル分のバブルを入れてパイプラインを待たせてやる必要があります 12

この待たせる操作をパイプラインインターロックと呼びます これを実現するにはまず D ステージでチェックをし E ステージの Load 命令の読んできた結果が D ステージで利用される場合 M と W は実行を続け F,D,E は実行を停止します これをパイプラインインターロックと呼びます 13

パイプラインインターロックは命令コードの実行順を入れ替えることで対処できます 例えば 例題のコードを実行する場合 普通にプログラミングすると 2 か所ストールしてしまいます 14

しかし 処理の順番を入れ替えることで ストールは 0 にすることができます これをコードスケジュールと呼びます 15

ではフォワーディングの Verilog 記述を紹介します ALU の A,B それぞれのマルチプレクサを拡張します 図と対応させて理解しましょう 16

やや拡大した図です Verilog 記述と対応させてください 17

次にパイプラインインターロックの Verilog 記述を紹介します D ステージで判定を行い F ステージはこの信号 lwstall でパイプラインを止めます 18

D ステージも同様にしてパイプラインを止めます 一方 E ステージ以降はこのようなインターロックをさせません 19

最後のハザードがコントロール ( 制御 ) ハザードです これは分岐命令が原因で次に実行する命令の確定ができないことから生じます 20

ALU で分岐先を計算させるとしましょう E ステージの後の M ステージで PC が更新され 次のクロックからそれに従ってフェッチされます これだ 3 クロック分次の命令の始まりが遅れ パイプラインの性能計算の式に基づくと 分岐系の命令が合わせて 25% と仮定すると CPI=1 が 1.75 になってしまいます これはちょっとダメージが大きいです 21

F ステージではそもそも命令をまだ取って来てないので 最速で分岐先を計算するのは D ステージで計算および判断をやって 次のステージに分岐後の命令を取ってくることです この方法では ALU が使えないので 専用の加算器が必要ですがダメージが 1 サイクルになります 分岐命令と分かったら次に命令を取ってくるのを止めて 1 クロック待って ( バブルが入る ) 次のクロックに正しい命令を取ってきます この場合 1 クロックのダメージがあるので 分岐命令の確率を 25% とすると CPI は 1 から 1.25 になります 22

では このための仕組みを考えます D ステージに飛び先計算と 飛ぶかどうかを判定するハードウェアを入れてやります 飛び先の計算は加算器に入れる前にシフトが必要です 分岐の判定はレジスタ同士が等しいかどうかをしれべれば良いので簡単です 23

問題は 分岐の判定を早い時期に持ってきたことで 判定するレジスタに対してデータハザードが生じてしまうことです これは M ステージからと E ステージからの二つを考慮する必要があります 両方ともレジスタ番号が一致して先行命令がレジスタに書き込む命令で 後続命令が分岐命令の時フォワーディングが必要になりますが 直前からフォワーディングをすると クリティカルパスが延びてしまうので ここではインターロックをすることにします 24

また lw 命令は結果が使えるのは M ステージの後なので これもインターロックの必要があります 25

M ステージからのフォワーディングを行うためにマルチプレクサをレジスタファイルの出力に付けてやります 26

それでは Verilog コードを見てやりましょう パイプラインハザードの対処はステージ間をまたがるので 慎重に考えて信号名を間違えないようにしましょう ストールしない場合で 分岐が成立すれば pc に飛び先をセットし そうでなければ pc+4 を pc にセットします これとは別に pc+4 は次のステージに送ってやる必要があります 27

では D ステージでの処理です 分岐命令が成立するかどうかはフォワーディングのマルチプレクサを含めての記述です 条件が少しややっこしいです 分岐の飛び先は F ステージからの PC+4 に飛び先をシフトした値を足します ここで専用の加算器を使います ここで使うレジスタには M ステージからのフォワーディングを行う必要があります 28

次はパイプラインインターロックの説明です lw 命令の次の命令がそれを使う時 これがデータハザードによるインターロックで lwstall という信号名を使っています 分岐命令の方は branchstall という名前になっていて E ステージの命令の結果が次の分岐命令の判断に使う時 M ステージのレジスタを分岐命令で使う時に パイプラインを止めています これらのインターロックは 命令スケジューリングによって回避できます 29

このパイプラインでは 分岐命令の次の命令はフェッチしてきても捨てなければならず 1 クロックのストールが必ず生じます これを低減するための簡単な方法を二つ紹介します 一つは Predict Not Taken という方法で 分岐命令が常に分岐しない と予想する一種の分岐予測です 予測がはずれて分岐が成立すると分岐命令を NOP に変更してパイプラインに流します これはバブルとなってダメージとなりますが 分岐が不成立ならば フェッチしてきた命令をそのまま使うことができてロスが生じません この方法は簡単な付加ハードウェアで性能が向上しますが 不幸なことに分岐命令は成立する場合の方が多いので 思ったより効果が得られません もう一つの方法は 遅延分岐 (Delayed Branch) といって ハードウェアは何も変更せずに 取ってきた命令をパイプラインに流してしまいます そして この分岐命令は一命令分効き目が遅いんだ と解釈します このパイプラインに流してしまう命令の場所を遅延スロットと呼びます 30

この図は Predict Not Taken を示しています 成立の場合のみ命令をフェッチしなおします 31

遅延分岐は 分岐命令の次の命令をパイプラインに入れてしまい 必ず実行する方法です すなわち分岐命令の効き目が遅いと考えるのです パイプラインスケジュールによって 有効な命令を入れてやることができれば この命令は無駄にはならないです どうしても有効な命令が入れられない場合 NOP 命令を入れておきます これはロスになってしまいます 32

mult.asm の例を考えましょう この分岐は遅延分岐で NOP が入って正常に動いています では この NOP を有効な命令で埋めるにはどうすれば良いでしょうか? 33

add 命令を持ってきた例です このコードは一見ものすごく変に見えますが bne が遅延分岐ならばちゃんと動きます 34

もう一つ 制御変数の $1 をカウントダウンする命令を使う方法もあります この場合は インターロックを減らす効力もあります しかし 命令の実行順は変わらないため あらかじめ一つ引いて置く工夫が必要になります 35

36

では インフォ丸に MIPS5 段パイプラインをまとめてもらいましょう 実際 このパイプラインは良くできていて 単純な 32 ビットプロセッサはおおむねこれに類似した 5 段パイプラインを持っています 37