今回の内容 命令スケジューリング グラフ彩色によるレジスタ割り当て

Similar documents
今日の内容 Garbage Collection (GC, ごみ集め ) 参照されなくなったメモリ領域を解放すること 配列境界検査

コンパイラ演習 第 7 回

48 * *2

スライド 1

計算機アーキテクチャ

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

この方法では, 複数のアドレスが同じインデックスに対応づけられる可能性があるため, キャッシュラインのコピーと書き戻しが交互に起きる性のミスが発生する可能性がある. これを回避するために考案されたのが, 連想メモリアクセスができる形キャッシュである. この方式は, キャッシュに余裕がある限り主記憶の

コンパイラ演習第 11 回 2006/1/19 大山恵弘 佐藤秀明 今回の内容 バリアント / レコード 表現方法 型付け パターンマッチ 型付け switch 文への変換 簡単な最適化 マッチング漏れ 以降のフェーズでの処理 発展 exhaustivenessinformation の利用 パター

1 (1) vs. (2) (2) (a)(c) (a) (b) (c) 31 2 (a) (b) (c) LENCHAR

PSCHG000.PS

スライド 1

Microsoft PowerPoint - 09re.ppt [互換モード]

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

スライド 1

簡単な検索と整列(ソート)

Taro10-岩手県警察航空隊の運営及

Microsoft PowerPoint - DA2_2017.pptx


< B8CDD8AB B83685D>

スライド 1

Microsoft PowerPoint - ICD2011TakadaSlides.pptx


計算機アーキテクチャ

スライド 1

リソース制約下における組込みソフトウェアの性能検証および最適化方法

Microsoft Word - no12.doc

Microsoft PowerPoint - 05.pptx

今回の内容 エスケープ解析 メモリに置かれる値のうち ヒープではなくスタックに alocate できるものを発見 Garbagecolection の負荷を軽減 JavaSE6 が採用 2006 年夏にリリース予定 [ 参考 ] リージョン推論 静的メモリ管理の一般的枠組み 本講義では MLKit[

6. パイプライン制御

PSCHG000.PS

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

05-scheduling.ppt

従業員の融通を許した シフトスケジューリング問題

Microsoft PowerPoint - mp11-06.pptx

Microsoft PowerPoint - DA2_2019.pptx

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

Microsoft PowerPoint - 11Web.pptx

-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

プログラム言語及び演習Ⅲ

PG13-6S

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

PowerPoint プレゼンテーション


今回のプログラミングの課題 ( 前回の課題で取り上げた )data.txt の要素をソートして sorted.txt というファイルに書出す ソート (sort) とは : 数の場合 小さいものから大きなもの ( 昇順 ) もしくは 大きなものから小さなもの ( 降順 ) になるよう 並び替えること

PowerPoint プレゼンテーション

…好きです 解説

Microsoft PowerPoint - DA2_2017.pptx

コンピュータ工学Ⅰ

Microsoft PowerPoint - DA2_2018.pptx

Microsoft PowerPoint - Sol7 [Compatibility Mode]

gengo1-8

Microsoft PowerPoint - No6note.ppt

Microsoft PowerPoint - 講義10改.pptx

プログラミング基礎

Microsoft PowerPoint - OS11.pptx

演習課題No12

DumpsKing Latest exam dumps & reliable dumps VCE & valid certification king

情報工学実験 C コンパイラ第 2 回説明資料 (2017 年度 ) 担当 : 笹倉 佐藤

Microsoft PowerPoint - mp11-02.pptx

スライド 1

プログラミング基礎

Microsoft PowerPoint - Chap4 [Compatibility Mode]

Microsoft PowerPoint - 13.ppt [互換モード]

スライド 1

フローチャートの書き方

untitled

C に必要なコンピュータ知識 C はコンピュータの力を引き出せるように設計 コンピュータの知識が必要

Microsoft PowerPoint - 09.pptx

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

UNIX 初級講習会 (第一日目)

2 場合の数次の問いに答えよ (1) 表裏がわかる 3 種類のコイン a,b,c を投げて, 表が出た枚数が奇数となる場合は何通りあるか (2) ソファ, テーブル, カーペットがそれぞれ 3 種類,4 種類,2 種類ある それぞれ 1 つずつ選ぶとすると, 選び方は何通りあるか 要点和の法則 2

8

memo

memo

Insert your Title here

(1)2004年度 日本地理

M M M M

Microsoft Word ã‡»ã…«ã‡ªã…¼ã…‹ã…žã…‹ã…³ã†¨åłºæœ›å•¤(佒芤喋çfl�)

議会における政党のパワーを ゲーム理論から見ると?

コンピュータ工学Ⅰ

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

Microsoft PowerPoint - 計算機言語 第7回.ppt

特殊なケースでの定式化技法

<4D F736F F F696E74202D208D8296D889EB8DC65F C835B8393>

<4D F736F F F696E74202D B835E82CC8EED97DE B835E82CC834F BB F0955C82B793C190AB926C>

TFTP serverの実装

040402.ユニットテスト

自然言語は曖昧性だらけ! I saw a girl with a telescope 構文解析 ( パージング ) は構造的な曖昧性を解消 2

問 2. タイミングチャート以下に示す VHDL コードで記述されている回路に関するタイミングチャートを完成させよ ) レジスタの動作 use IEEE.std_logic_64.all; entity RegN is generic (N : integer := 8 port ( CLK, EN

メモリ管理

新たな基礎年金制度の構築に向けて

プログラミング実習I

PSCHG000.PS

Microsoft PowerPoint - sc7.ppt [互換モード]

二次関数 1 二次関数とは ともなって変化する 2 つの数 ( 変数 ) x, y があります x y つの変数 x, y が, 表のように変化するとき y は x の二次関数 といいます また,2 つの変数を式に表すと, 2 y x となりま

コンピュータ応用・演習 情報処理システム

Microsoft Word - 教科書大1b第12週06.doc

データ構造

変更要求管理テンプレート仕様書

Transcription:

コンパイラ演習 第 9 回 (2011/12/08) 中村晃一野瀬貴史前田俊行秋山茂樹池尻拓朗鈴木友博渡邊裕貴潮田資秀小酒井隆広山下諒蔵佐藤春旗大山恵弘佐藤秀明住井英二郎

今回の内容 命令スケジューリング グラフ彩色によるレジスタ割り当て

命令スケジューリングとは 命令の順序を並び替える事 二つの効果がある 1. 命令レベル並列性の向上 2. データ局所性向上 ( レジスタ割り当ての効率向上 )

命令レベル並列性の向上 例 : p[0][0] + p[1][1] + p[2][2] Data hazard a = load p[0] b = load a[0] c = load p[1] d = load c[1] e = fadd b d f = load p[2] g = load f[2] R = fadd e g a = load p[0] c = load p[1] b = load a[0] d = load c[1] f = load p[2] e = fadd b d g = load f[2] R = fadd e g Data hazard load load load load fadd load load fadd load load load load load fadd load fadd 14 サイクル 10 サイクル (load,faddのレイテンシが2の場合)

データ局所性の向上 生存変数 {a} {a,c} {a,b} {b,d} {b,d,f} {e,f} {e,g} {R} 例 : p[0][0] + p[1][1] + p[2][2] a = load p[0] c = load p[1] b = load a[0] d = load c[1] f = load p[2] e = fadd b d g = load f[2] R = fadd e g a = load p[0] b = load a[0] c = load p[1] d = load c[1] e = fadd b d f = load p[2] g = load f[2] R = fadd e g 生存変数 {a} {a,b} {b,c} {b,d} {e} {e,f} {e,g} {R} レジスタが 3 つ必要 レジスタは 2 つで良い

並列性と局所性のトレードオフ 命令レベル並列性を上げる為には 無関係な ( 因果関係にない ) 命令を近くに配置する データの局所性を上げる為には 関係する ( 因果関係がある ) 命令を近くに配置する どの様な戦略を取るべきかはアーキテクチャに依る

スケジューリング ( リストスケジューリング ) の手順 1. 命令間の依存を解析しグラフ構築 2. グラフから一命令づつ取り出しながらスケジュール

依存解析 命令 a, b の順番を変えると意味が変わるとき b は a に依存する という 1. RAW (Read a7er Write) 依存関係 2. WAR (Write a7er Read) 依存関係 3. WAW (Write a7er Write) 依存関係 x =.. =.. x.. RAW.. =.. x.. x = WAR x = x = WAW

依存グラフと ready set 依存グラフ G = (V, E) と ready set R を構築 V = { 命令 } E = { (a, b) bがaに依存 } R = { a indegree(a) = 0 } i1 i3 i6 R i1: a = load p[0] i2: b = load a[0] i3: c = load p[1] i4: d = load c[1] i5: e = fadd b d i6: f = load p[2] i7: g = load f[2] i8: R = fadd e g i2 i5 i4 i8 i7

資源制約 資源制約 : 演算器等が使用可能かどうか? テーブルを作成して管理 ALU FADD MEM cycle n c = fadd a b x = load p[0] ステージ 1 ステージ 2 ALU FADD MEM cycle n+1 c = fadd a b x = load p[0] ステージ 1 ステージ 2

レイテンシ制約 レイテンシ制約 : 演算結果が使用可能かどうか? Ready set の各命令にあと何サイクル待つ必要があるかを表すカウンタを付与 0 cycle n cycle n+1 cycle n+2 i1 i1 発行 i2 1 i2 0 i2

リストスケジューリング 全命令を並べ終わるまで以下を繰り返す 1. Ready set に実行可能な命令あれば優先度の高い命令を一つ取り出し並べる 2. グラフ ready set を更新 l 資源制約 レイテンシ制約を 1 サイクル分更新 i1 i3 i6 R i3 i6 R i2 i4 i7 i2 i4 i7 i5 i5 i8?? i8 i1?

スケジューリングの戦略 何を優先的に取り出すか? 実行時間を優先 vs 資源節約を優先 優先度が高いが制約を満たさない命令 と 優先度は低いが制約を満たす命令 のどちらを先に並べるべきか? どれくらい真面目に計算するか? 最適なスケジューリングを行う事は一般に NP 困難

実行時間優先のスケジューリング ( 例 ) クリティカルパスを優先的にスケジュール 先行命令のレイテンシを辺の重みとする 0 i1 0 i3 0 i6 2 2 2 cycle = 0 ALU FADD MEM i2 i4 i7 2 i5 2 2 i8 2

実行時間優先のスケジューリング ( 例 ) クリティカルパスを優先的にスケジュール cycle = 0 0 i1 0 i3 0 i6 2 2 2 i2 i4 i7 ALU FADD MEM i1 2 i5 2 2 i8 2 i1

実行時間優先のスケジューリング ( 例 ) クリティカルパスを優先的にスケジュール cycle = 1 1 i2 2 0 i3 0 i6 2 2 i4 i7 2 i5 2 2 i8 i1 i3 ALU FADD MEM i3 i1

実行時間優先のスケジューリング ( 例 ) クリティカルパスを優先的にスケジュール cycle = 3 0 i2 1 2 i5 2 i4 2 i8 0 i6 2 i7 2 ALU FADD MEM i2 i3 i1 i3 i2

実行時間優先のスケジューリング ( 例 ) クリティカルパスを優先的にスケジュール i1: a = load p[0] i3: c = load p[1] i2: b = load a[0] i4: d = load c[1] i6: f = load p[2] i5: e = fadd b d i7: g = load f[2] i8: R = fadd e g 10 サイクルレジスタ 3 個 i1 i3 i2 i4 i6 i5 i7 i8

資源節約優先のスケジューリング ( 例 ) 既に並べた命令に依存する命令を優先的にスケジュール 1 i1 1 i3 1 i6 2 i2 2 i4 2 i7 3 i5 4 i8 後続命令に先行命令より高い優先度を付与

資源節約優先のスケジューリング ( 例 ) 既に並べた命令に依存する命令を優先的にスケジュール 1 i1 1 i3 1 i6 2 i2 2 i4 2 i7 3 i5 4 i8 i1 後続命令に先行命令より高い優先度を付与

資源節約優先のスケジューリング ( 例 ) 既に並べた命令に依存する命令を優先的にスケジュール 1 i3 1 i6 2 i2 2 i4 2 i7 3 i5 4 i8 i1 i2 後続命令に先行命令より高い優先度を付与

資源節約優先のスケジューリング ( 例 ) 既に並べた命令に依存する命令を優先的にスケジュール 1 i3 1 i6 2 i4 2 i7 3 i5 4 i8 i1 i2 i3 後続命令に先行命令より高い優先度を付与

資源節約優先のスケジューリング ( 例 ) 既に並べた命令に依存する命令を優先的にスケジュール i1: a = load p[0] i2: b = load a[0] i3: c = load p[1] i4: d = load c[1] i5: e = fadd b d i6: f = load p[2] i7: g = load f[2] i8: R = fadd e g 14 サイクルレジスタ 2 個 i1 i2 i3 i4 i5 i6 i7 i8 後続命令に先行命令より高い優先度を付与

グラフカラーリングによるレジスタ割り当て 現実のコンパイラで幅広く用いられている方法 手順 1. 生存解析 2. 干渉グラフ構築 3. グラフ塗り分け

生存解析 各命令実行直後に生きている変数を求める 生きている その後使われる なので後方解析 live[i]: 命令 iの実行直後に生きている変数 def[i]: 命令 iが定義する変数 use[i]: 命令 i が使用する変数 x = a + b live = (A\{x})U{a,b} live = A

生存解析の例 例 :m[i]*m[j]/(x[i]-x[j])^2 a = load m[i] b = load m[j] d = load x[i] c = fmul a b e = load x[j] f = fsub d e g = fmul f f R = fdiv c g ret R: 戻り値用レジスタ live

生存解析の例 例 :m[i]*m[j]/(x[i]-x[j])^2 a = load m[i] b = load m[j] d = load x[i] c = fmul a b e = load x[j] f = fsub d e g = fmul f f R = fdiv c g ret {R} R: 戻り値用レジスタ live

生存解析の例 例 :m[i]*m[j]/(x[i]-x[j])^2 a = load m[i] b = load m[j] d = load x[i] c = fmul a b e = load x[j] f = fsub d e g = fmul f f R = fdiv c g ret {R} {R} R: 戻り値用レジスタ live # ({R} Φ)UΦ

生存解析の例 例 :m[i]*m[j]/(x[i]-x[j])^2 a = load m[i] b = load m[j] d = load x[i] c = fmul a b e = load x[j] f = fsub d e g = fmul f f R = fdiv c g ret R: 戻り値用レジスタ live {c,g} # ({R} {R})U{c,g} {R} {R}

生存解析の例 例 :m[i]*m[j]/(x[i]-x[j])^2 a = load m[i] b = load m[j] d = load x[i] c = fmul a b e = load x[j] f = fsub d e g = fmul f f R = fdiv c g ret R: 戻り値用レジスタ live {c,f} # ({c,g} {g})u{f} {c,g} {R} {R}

生存解析の例 例 :m[i]*m[j]/(x[i]-x[j])^2 a = load m[i] b = load m[j] d = load x[i] c = fmul a b e = load x[j] f = fsub d e g = fmul f f R = fdiv c g ret R: 戻り値用レジスタ live {c,d,e} # ({c,f} {f})u{d,e} {c,f} {c,g} {R} {R}

生存解析の例 a = load m[i] b = load m[j] d = load x[i] c = fmul a b e = load x[j] f = fsub d e g = fmul f f R = fdiv c g ret 例 :m[i]*m[j]/(x[i]-x[j])^2 R: 戻り値用レジスタ live {i,j,m,x} {a,i,j,m,x} {a,b,i,j,x} {a,b,d,j,x} {c,d,j,x} {c,d,e} {c,f} {c,g} {R} {R}

干渉グラフ G = (V, E) V = { 変数 or レジスタ } E = {(a, b) a,b が同時に生存 } m a = load m[i] b = load m[j] d = load x[i] c = fmul a b e = load x[j] f = fsub d e g = fmul f f R = fdiv c g ret {i,j,m,x} {a,i,j,m,x} {a,b,i,j,x} {a,b,d,j,x} {c,d,j,x} {c,d,e} {c,f} {c,g} {R} {R} b a i j d x c e R f g

レジスタ割り当て レジスタ割り当て 干渉グラフのカラーリング m m a x a x f f i j c i j c g g b d e b d e R R

カラーリングの方法 色数が最小となる最適カラーリングを求める事は NP 困難 各変数が spill した場合のコストを計算しそれが大きい順に割り当てる Spill コストの大きい変数 ループ内変数 複数回参照される変数 同一命令中で使われる他の変数が spill している 普通 一命令中で複数のメモリアクセスはできない

スケジューリングとレジスタ割り当て : 全体の流れ レジスタ数に余裕があるなら スケジューリング レジスタ割り当て ないなら レジスタ割り当て スケジューリング 微妙なら交互に スケジューリング 最初は速度優先後半はレジスタ節約優先 レジスタ割り当て レジスタが足りなくなったら その変数は保留

生存区間分割 長く生きている変数の名前を途中で替える a = = a = a.. = a 頻繁に a にアクセス a にアクセスしない ここでは a をレジスタに載せたい ここではレジスタに載らなくても良い

生存区間分割 長く生きている変数の名前を途中で替える a = = a = a.. = a a = = a = a a = a.. = a a をレジスタに載せる a をスタックに載せる

共通課題 二つの共通課題のうち一つ以上を解いてください

課題 1 リストスケジューリングを実装せよ どのような優先順位を設定したか説明すること 最低 2 種類の戦略を実装し 比較 評価をすること

課題 2 min- rt.ml から適度に大きい関数を選び手作業でレジスタ割り当てとスケジューリングをした結果を示せ 何らかのアルゴリズムに従って行うこと 各班の自作コンパイラの出力を用いてもよいし MinCaml の出力を用いてもよい

コンパイラ係向け課題 グラフカラーリング ( もしくはそれに準ずるアルゴリズム ) によるレジスタ割り当てを実装せよ どのような塗り分け方法を採ったか選択の理由を含めて説明せよ

課題の提出先と締め切り 提出先 : compiler- report- 2011@yl.is.s.u- tokyo.ac.jp 締め切り : 2 週間後 (12/22) の午後 1 時 (JST) コンパイラ係向け課題締切 :2012/2/27 Subject: Report 9 < 学籍番号 : 5 桁 > 半角スペース 1 個ずつ 例 : Report 9 11099 本文にも氏名と学籍番号を明記のこと u 質問は compiler-query-2011@yl.is.s.u-tokyo.ac.jp まで