融合変換による最適化の理論的基盤と正当性 (2006-06-27)

36
融融融融融融融融融融融 融融融融融融融融融 融融融融 融融融融融融融融融 融融 融融融融融融融融融融融 2融

Upload: masahiro-sakai

Post on 26-Jun-2015

1.207 views

Category:

Technology


5 download

TRANSCRIPT

Page 1: 融合変換による最適化の理論的基盤と正当性 (2006-06-27)

融合変換による最適化の理論的基盤と正当性

酒井政裕慶應義塾大学大学院政策・メディア研究科修士課程 2 年

Page 2: 融合変換による最適化の理論的基盤と正当性 (2006-06-27)

自己紹介 2001 年 慶應義塾大学総合政策学部入学 2005 年 同卒業 2005 年慶應義塾大学大学院 政策・メディ

ア研究科 入学、現在在学中 萩野達也研究室所属

Page 3: 融合変換による最適化の理論的基盤と正当性 (2006-06-27)

自己紹介 : 活動 Haskell

Lightweight Language Weekend 2004 Lightweight Language Day and Night

2005 日経ソフトウェア 6 月号「 Haskell による関

数プログラミング入門」 Ruby-GNOME2

Page 4: 融合変換による最適化の理論的基盤と正当性 (2006-06-27)

研究的興味 関数型言語の最適化 プログラム変換、特に融合変換の

理論的基盤とアルゴリズム

Page 5: 融合変換による最適化の理論的基盤と正当性 (2006-06-27)

研究の背景 ソフトウェアの不具合が社会問題化するケ

ースが増加 ソフトウェアが必要とされる領域の広がり ソフトウェアの高機能化・多機能化にともなう

複雑化 ソフトウェアの信頼性が重要に 様々なレベルの方法が必要

工学的な品質管理 , etc 分かり易い自明なコードも重要

Page 6: 融合変換による最適化の理論的基盤と正当性 (2006-06-27)

研究の背景 (2)

分かり易い自明なコードは重要 しかし性能のよいコードは複雑で分かり難

い 信頼性と効率の両立は難しい

Page 7: 融合変換による最適化の理論的基盤と正当性 (2006-06-27)

研究の目的 高度な最適化技術の実現

強力な最適化 しっかりとした理論的な基盤 信頼性を損なわない

信頼性と効率の両立

Page 8: 融合変換による最適化の理論的基盤と正当性 (2006-06-27)

位置づけ

信頼性の高いソフトウェア高性能なソフトウェア

プログラム変換 ソフトウェア検証

プログラム意味論コンピュータサイエンス

数理論理学基礎

応用

Page 9: 融合変換による最適化の理論的基盤と正当性 (2006-06-27)

位置づけ

信頼性の高いソフトウェア高性能なソフトウェア

プログラム変換 ソフトウェア検証

プログラム意味論コンピュータサイエンス

数理論理学基礎

応用

領域理論型理論各種意味論

ロジック圏論

離散数学

融合変換等

形式的証明モデル検査テスト等

Page 10: 融合変換による最適化の理論的基盤と正当性 (2006-06-27)

最適化 概念を素直に表現した単純なプログラム

分かりやすい モジュラリティーが高く、扱いやすい しかし、性能が悪いことがしばしば

最適化が必要 コンパイラによる最適化 ハンドチューニング

Page 11: 融合変換による最適化の理論的基盤と正当性 (2006-06-27)

ハンドチューニングの問題 その過程でバグが混入する可能性 結果のプログラムは

複雑で保守が困難 モジュラリティーが低く再利用が困難

信頼性を損なう 最適化のための別アプローチが必要 !

Page 12: 融合変換による最適化の理論的基盤と正当性 (2006-06-27)

プログラム変換 数学的 ( 代数的 ) な性質を用いる最適化

例 ) a×3 + a×2 = { 分配則 } a×(3+2) = { calculation } a×5

同じ意味で性能のよいプログラムへ変換 オーダが変わるような場合も

Page 13: 融合変換による最適化の理論的基盤と正当性 (2006-06-27)

融合変換 プログラム変換の一種 複数のパスからなるプログラム

わかりやすいが 中間データが存在し、効率が悪い

これを単一のパスに変換

Page 14: 融合変換による最適化の理論的基盤と正当性 (2006-06-27)

融合変換の例 add(vector A, vector B) { vector tmp; for (int i = 0; i < A.size; i++) tmp[i] = A[i] + B[i]; return tmp; } add(add(A,B), C); 二回ループを回す必要

Page 15: 融合変換による最適化の理論的基盤と正当性 (2006-06-27)

融合変換の例 add3(vector A, vector B, vector C) { vector tmp; for (int i = 0; i < A.size; i++) tmp[i] = A[i] + B[i] + C[i]; return tmp; } add3(A,B,C); 一回のループですむ

効率向上

Page 16: 融合変換による最適化の理論的基盤と正当性 (2006-06-27)

融合変換 (2)

中間データ構造を生成しないことによる、空間効率の向上

これまで離れていたコードが接することにより、更なる最適化が適用可能に

主に関数型言語で用いられる

Page 17: 融合変換による最適化の理論的基盤と正当性 (2006-06-27)

関数型言語 数学的な関数に基づいた言語

( 原則的に ) 副作用がない 等しい式は自由に置き換えが可能 数学的な取り扱いが容易

例 : Haskell, ML, Lisp

Page 18: 融合変換による最適化の理論的基盤と正当性 (2006-06-27)

なぜ関数型言語か ?

数学的に厳密な議論をしたい 現状の一般的な命令型言語では難しい

代数的性質が簡単に利用できる 命令型言語では特別な解析が必要

そこで、とりあえず関数型言語に特化

Page 19: 融合変換による最適化の理論的基盤と正当性 (2006-06-27)

融合変換の理論 圏論 データ型と帰納的定義 一意性による等式の導出 融合変換の難しさ

Page 20: 融合変換による最適化の理論的基盤と正当性 (2006-06-27)

圏論

対象と射 (矢印 ) による抽象化 プログラムを扱うのに便利な概念を提供 等式を図式で表現 対象 射

集合 関数位相空間

連続関数

群 準同型型 プログラム

Page 21: 融合変換による最適化の理論的基盤と正当性 (2006-06-27)

データ型と帰納的定義 : 自然数を例に 以下のような再帰的

定義で関数 h: N->X が一意に決まる h(0) = f h(s(n)) = g(h(n))

圏論での書き方 h 0 = f∘ h s = g h∘ ∘

この h を fold(f,g) と表す。

一意に決まることが N の本質

Page 22: 融合変換による最適化の理論的基盤と正当性 (2006-06-27)

帰納的定義の例 2 倍する関数

double : N -> Ndouble(0) = 0double(s(n)) = s(s(double(n))

fold で表現double = fold(0, s s)∘

Page 23: 融合変換による最適化の理論的基盤と正当性 (2006-06-27)

double ∘ double の融合 double は以下を満たす

double 0 = 0∘ double s s∘ ∘ = s s s s double∘ ∘ ∘ ∘

よってdouble double 0 = 0∘ ∘double double s∘ ∘ = s s s s double double∘ ∘ ∘ ∘ ∘

Page 24: 融合変換による最適化の理論的基盤と正当性 (2006-06-27)

double ∘ double の融合 double∘double ∘ 0 = 0

double∘double ∘ s

= s∘s∘s∘s∘double∘double fold(0,s s s s) ∘ ∘ ∘ も

同じ等式を満たす 一意性より

double double∘ = fold(0,s s s s)∘ ∘ ∘

Page 25: 融合変換による最適化の理論的基盤と正当性 (2006-06-27)

double ∘ double の融合 double∘double ∘ 0 = 0

double∘double ∘ s

= s∘s∘s∘s∘double.double fold(0,s s s s) ∘ ∘ ∘ も

同じ等式を満たす 一意性より

double double∘ = fold(0,s s s s)∘ ∘ ∘

融合できた !!

Page 26: 融合変換による最適化の理論的基盤と正当性 (2006-06-27)

融合変換の規則

一般に h:X->Y が h g = g’ h∘ ∘ h f = f’∘を満たすならば h fold(f,g)∘ = fold(f’,g’)

Page 27: 融合変換による最適化の理論的基盤と正当性 (2006-06-27)

融合の難しさ

h fold(f,g) = fold(f’,g’) ∘ f’, g’ をどう発見するか ? 関数は fold(f,g) の形をしていないかも

対策 Shortcut 融合変換

関数を融合しやすい形で定義しておく Warm Fusion

一般の再帰的定義から fold/build を導出

Page 28: 融合変換による最適化の理論的基盤と正当性 (2006-06-27)

融合変換の実装例 Haskell の処理系 GHC

short-cut 融合変換 10 クイーンで 43%, 大規模ベンチマークで平

均 3% の実行時間改善 尾上 能之 『融合変換による関数プログラ

ムの最適化』  [Onoue’99] 再帰的定義から Hylomorphism という形式を導

出し、 Hylo-Cata fusion という規則によって融合を行う

GHC に実装したが取り込まれてはいない

Page 29: 融合変換による最適化の理論的基盤と正当性 (2006-06-27)

尾上らの手法の問題 Hylo-Cata のみを扱いその双対の Hylo-Ana

を扱っていない Hylomorphism と Free theorems を組み合

わせることの正当性の問題

Page 30: 融合変換による最適化の理論的基盤と正当性 (2006-06-27)

正当性の問題 Hylomorphism

余帰納的な関数でデータを生成し、帰納的な関数でデータを消費する関数

帰納的データ型と余帰納的データ型の一致が必要μX. F(X) = νX. F(X) … (A)

Free Theorems 型を関係として解釈することによって証明される パラメトリシティに基づく … (B)

A と B は厳密には矛盾 !!

Page 31: 融合変換による最適化の理論的基盤と正当性 (2006-06-27)

なぜ矛盾するか ラムダ計算に基づく体系では以下が同値

帰納的データ型と余帰納的データ型が一致 すべての型 A に不動点コンビネータ

fixA: (A -> A) -> A が存在 パラメトリシティより、直和 A+B を表現可能

∀ C. (A->C) -> (B->C) -> C ラムダ計算 (= Cartesian Closed Category) では

直和と不動点コンビネータは矛盾 正確には退化したモデルしか存在しない

Page 32: 融合変換による最適化の理論的基盤と正当性 (2006-06-27)

何が困るのか 正当性は微妙なのは気持ち悪い 本来成り立っていない等式に基づいた最適

化が行われてしまう可能性 アドホックに正当性を保障することは可能だが、一般的な保障が欲しい

Page 33: 融合変換による最適化の理論的基盤と正当性 (2006-06-27)

私のアプローチ 形式的な意味論を用いた正当化 今考えているアイディア

Moral equality [Danielsson’06] の利用 ? 途中の過程では弱い等号を用いる 最終的には条件付の等式に

Page 34: 融合変換による最適化の理論的基盤と正当性 (2006-06-27)

目的 正当性を理論的に保障 融合変換をより安全に広い範囲で使用可能

に 安全で強力な最適化技術の実現 信頼性と性能の両立を

また、その過程で融合変換についてよりよく理解したい

それによって、より高度な融合変換を

Page 35: 融合変換による最適化の理論的基盤と正当性 (2006-06-27)

詳しくは目下研究中

Page 36: 融合変換による最適化の理論的基盤と正当性 (2006-06-27)

まとめ プログラム変換の一つとしての融合変換 融合変換の簡単な例と理論 私のアプローチ