レジスタの割付け 中田育男著 コンパイラの構成と最適化 朝倉書店, 1999年 第12章5節.

Slides:



Advertisements
Similar presentations
2.5 プログラムの構成要素 (1)文字セット ① ASCII ( American Standard Code for Interchange ) JIS コードと同じ ② EBCDIC ( Extended Binary Coded Decimal for Information Code ) 1.
Advertisements

区間グラフにおける区間表現からMPQ-treeを効率よく構成するアルゴリズム
2006/10/26 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井 英二郎
LZ符号化 森田 岳史.
計算理工学基礎 「ハイパフォーマンスコンピューティングの基礎」
コンパイラ 第13回 最適化 38号館4階N-411 内線5459
記 憶 管 理(1) オペレーティングシステム 第9回.
ネットワーク理論講義補助資料 Text. 組合せ最適化とアルゴリズム 4.5 節 主・双対法 pp
タスクスケジューリング    .
アルゴリズムイントロダクション第2章 主にソートに関して
4章 制御の流れ-3.
ラベル付き区間グラフを列挙するBDDとその応用
第11回 整列 ~ シェルソート,クイックソート ~
計算機アーキテクチャ特論Chapter.6.6~6.9
全体ミーティング (4/25) 村田雅之.
実行時のメモリ構造(1) Jasminの基礎とフレーム内動作
VBA H106077 寺沢友宏.
from KDD 2012 speaker: Kazuhiro Inaba
データ構造とプログラミング技法 (第8回) ーデータの探索ー.
2012年度 計算機システム演習 第4回 白幡 晃一.
コンパイラ演習 第 9 回 (2011/12/08) 中村 晃一 野瀬 貴史 前田 俊行 秋山 茂樹 池尻 拓朗 鈴木 友博 渡邊 裕貴
2006/11/02 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井 英二郎
6.4 コード最適化 (1)コード最適化(code optimization)
2007/1/11 山下 諒蔵 佐藤 春旗 前田 俊行 大山 恵弘 佐藤 秀明 住井 英二郎
ML 演習 第 7 回 新井淳也、中村宇佑、前田俊行 2011/05/31.
アルゴリズム入門.
大域的データフロー解析 流れグラフ 開始ブロック 基本ブロックをnodeとし、 基本ブロック間の制御関係をedgeとするグラフを、
第11回 整列 ~ シェルソート,クイックソート ~
変更文の移動を可能にした 静的単一代入形式上の部分冗長性除去
プログラミング基礎a 第8回 プログラムの設計 アルゴリズムとデータ構造
第7回 条件による繰り返し.
本時の目標 「簡単なプログラム言語の意味を理解し、マクロ機能を使って簡単なプログラムを作ることができる。」
並列計算システム特論演習 SCS特別講義 平成13年10月15日.
目的コードの生成 中田育男著 コンパイラの構成と最適化 朝倉書店, 1999年 第9章.
最適化の方法 中田育男著 コンパイラの構成と最適化 朝倉書店, 1999年 第11章.
電気・機械・情報概論 VBAプログラミング 第2回 2018年7月2日
アルゴリズムとデータ構造1 2006年6月16日
第7回 条件による繰り返し.
プログラミング言語論 第五回 理工学部 情報システム工学科 新田直也.
オペレーティングシステムJ/K (仮想記憶管理)
 情報の授業 アルゴリズムとプログラム(1) Go.Ota.
phononの分散関係の計算 -カイラルナノチューブ(18,3)-
25. Randomized Algorithms
b f c a d e g h a b c d e f g 図1 図2 2012年度 有限幾何学 期末試験
第5回放送授業.
決定木 Decision Tree DT 明治大学 理工学部 応用化学科 データ化学工学研究室 金子 弘昌.
アルゴリズムとデータ構造1 2005年7月5日
ファジィ制約充足問題への 連続領域の導入 Introducing continuous domains to
プログラミング基礎a 第8回 プログラムの設計 アルゴリズムとデータ構造
プログラミング 4 整列アルゴリズム.
プログラムの制御構造 配列・繰り返し.
色塗りゲームとゲームカラーリング数 慶應義塾大学大学院 理工学研究科   関口 陽介.
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語.
プログラムの基本構造と 構造化チャート(PAD)
プログラミングⅠ 平成31年1月7日 森田 彦.
ベイジアンネットワーク概説 Loopy Belief Propagation 茨城大学工学部 佐々木稔
JAVAバイトコードにおける データ依存解析手法の提案と実装
アルゴリズムとデータ構造 第3章 ヒープ 5月31日分の復習
データ構造とアルゴリズム (第5回) 静岡大学工学部 安藤和敏
直並列グラフの連続多重彩色 西関研究室 吉田進太郎.
アルゴリズムとデータ構造1 2006年6月23日
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
アルゴリズム入門 (Ver /10/07) ・フローチャートとプログラムの基本構造 ・リスト ・合計の計算
第6回放送授業.
コンパイラ 第12回 実行時環境 ― 変数と関数 ― 38号館4階N-411 内線5459
プログラミング入門2 第3回 条件分岐(2) 繰り返し文 篠埜 功.
情報処理Ⅱ 第3回 2004年10月19日(火).
6.5 最終コード生成 (1)コードの形式 ①絶対2進コード(AB : absolute binary) 命令後のオペランドが絶対番地指定。
グラフの帯域幅連続多重彩色 を求めるアルゴリズム (Bandwidth Consective Multicolorings of Graphs) 西関研究室 西川和秀.
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
Presentation transcript:

レジスタの割付け 中田育男著 コンパイラの構成と最適化 朝倉書店, 1999年 第12章5節

様々な問題 レジスタ割付けのタイミング レジスタ割付けの範囲 命令語の選択の後 命令語の選択の前 命令語を作るたびにレジスタ割付け レジスタは無限にあると仮定して命令語を作る。 命令語の選択の前 中間コードの変数をレジスタに割り当ててから 目的コードを生成。 命令語を作るたびにレジスタ割付け レジスタ割付けの範囲 プログラム全体 1つのサブルーチン ループ(多重ループの内側から)

様々な問題 どのレジスタを割付けの対象とするか。 できる限り範囲を広げる。 レジスタの役割を決めてしまう。 大域的なレジスタ・局所的なレジスタ サブルーチンの引数や結果の値

簡単な割付け法 変数の参照回数 参照頻度の高いものから順次に割り付ける。 n-1までこれで割付ける。 変数 … 中間コードの変数や命令語のレジスタ 参照頻度の高いものから順次に割り付ける。 n-1までこれで割付ける。 n: レジスタの数 それ以外の変数は残したレジスタにLoadする。

簡単な割付け法(その二) プログラムの先頭から順次割付ける。 空いているレジスタがなくなったら… を選んでその内容を退避して利用。 その場所以降で次に使われる場所が最も 遠い変数が入っているレジスタ その場所以降でその値が使われる回数が 最小のもの その値が最近使われたところから その場所までの長さが最も長いもの を選んでその内容を退避して利用。

生存区間の干渉グラフを使った レジスタ割付け 生存区間をノードとし、生存区間に重なりのある 2つの生存区間を辺で結んだ無向グラフ 変数の生存区間 変数が生きている区間 生きているとは、その値が使われる可能性が あるということ。 大域的にはデータの流れの解析が必要。

生存区間 do i = … 1: a = c * d 2: b = d + a 3: c = a – 5 4: d = b * c end do 1 2 3 4 a b c d

干渉グラフ a 1 2 3 4 a b b d c d c

生存区間の干渉グラフを使った レジスタ割付け 干渉グラフにおいて、ノードxとyが辺で 結ばれていたら、同じレジスタに割付け することはできない。 同じレジスタ番号=同じ色 レジスタ数=色の数 彩色問題 NP困難

Chatinのアルゴリズム 生存区間から干渉グラフGを作る spill_listを空とする while Gは空でない do if deg(x)<Nなるxが存在する then x(およびxからのすべての辺)をGから取り除く else Gのノードxを選びxをspill_listに加える end if end while if spill_listが空 then 取り除いた順序の逆順にノードに彩色する。 spill_listの各ノードxの生存区間を分割する このアルゴリズムの先頭に戻る

例(N=3) a c h g b d f e

例(N=3) f d,e a c h g b d e

例(N=3) c b,a f d,e a h g b d e

例(N=3) d* h,g,b,e c b,a f d,e a h g b e

例(N=3) dの生存区間を分割   このためには、   生存区間のグラフを   参照しなければならない。 a c h g b d d’ f スピル e

分割の遅延 d* h,g,b,e c b,a f d,e a h g b e

分割の遅延 e b,g d* h,g,b,e c b,a f d,e a h g b

分割の遅延 b a e b,g d* h,g,b,e c b,a f d,e a h g

分割の遅延 a g,h b e b,g d* h,g,b,e c b,a f d,e h g

分割の遅延 h g a g,h b e b,g d* h,g,b,e c b,a f d,e g

分割の遅延 g h a g,h b e b,g d* h,g,b,e c b,a f d,e

分割の遅延 g 1 h a g,h b e b,g d* h,g,b,e c b,a f d,e g

分割の遅延 g 1 h 2 a g,h b e b,g d* h,g,b,e c b,a f d,e h g

分割の遅延 g 1 h 2 a 3 b e b,g d* h,g,b,e c b,a f d,e a h g

分割の遅延 g 1 h 2 a 3 b e b,g d* h,g,b,e c b,a f d,e a h g b

分割の遅延 g 1 h 2 a 3 b e d* h,g,b,e c b,a f d,e a h g b e

分割の遅延 g 1 h 2 a 3 b e d* c b,a f d,e a h g b d e

分割の遅延 g 1 h 2 a 3 b e d* c f d,e a c h g b d e

分割の遅延 g 1 h 2 a 3 b e d* c f a c h g b d f e

生存区間の合併 コピー命令 a = b があるときに、 aとbに同じレジスタを 割り付けて、コピー命令を不要とする。 積極的な合併 スピルの原因 保守的な合併 繰り返し合併

保守的な合併(MCIiJ Chapter 11) Briggs 合併ノードabと隣り合うノードのうち、 K個以上のノードと隣り合うものの数は Kより小さい。 George aと隣り合う任意のノードtに対して、 tはbと干渉しているか(tとbは隣り合うか)、 tはKより少ない数のノードとしか隣り合わない K: 使えるレジスタ数

繰り返し合併の例 使えるレジスタ数は4 f e j k b m d h c Briggsによると 合併はできない。 g

まず単純化 使えるレジスタ数は4 f e j k b m d h c g

まず単純化 使えるレジスタ数は4 f e j k b m d c g

まず単純化 使えるレジスタ数は4 f e j k b m d c

まず単純化 使えるレジスタ数は4 f e j b m d c

まず単純化 使えるレジスタ数は4 e j b m d c

まず単純化 使えるレジスタ数は4 j b m d c

まず単純化 使えるレジスタ数は4 j b d c

合併 使えるレジスタ数は4 jb d c

合併 使えるレジスタ数は4 jb dc