48
融融融融融融融融融融融 融融融融融融融融融融融 融融融融融融融融融 融融融融融融融融融 融融融融 融融融融 融融融融融融融融 融融融融融融融 融融融融融融融融 融融融融融融融 融融融融 融融融融 2 2

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

Embed Size (px)

Citation preview

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

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

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

酒井政裕酒井政裕慶應義塾大学政策・メディア研究科慶應義塾大学政策・メディア研究科

修士課程修士課程 22 年年

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

自己紹介• 2001 年 慶應義塾大学総合政策学部入

学• 2005 年 同卒業• 2005 年慶應義塾大学大学院 政策・メ

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

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

自己紹介 : 活動• Haskell

– Lightweight Language Weekend 2004– Lightweight Language Day and Night

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

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

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

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

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

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

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

るケースが増加• 様々な要因

– ソフトウェアが必要とされる領域の広がり– ソフトウェアの高機能化・多機能化にとも

なう複雑化

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

研究の背景 (2)• ソフトウェアの信頼性が重要に• 様々なレベルの方法が必要

– 工学的な品質管理 , etc

• 分かり易い自明なコードが重要• 性能のよいコードは複雑で分かり難い• 信頼性と効率の両立は難しい

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

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

– 強力な最適化– 信頼性を損なわない

• 信頼性と効率の両立

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

位置づけ信頼性の高いソフトウェア

高性能なソフトウェア

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

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

数理論理学基礎

応用

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

位置づけ信頼性の高いソフトウェア

高性能なソフトウェア

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

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

数理論理学基礎

応用

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

ロジック圏論

離散数学

融合変換等

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

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

プログラム変換とプログラム変換と融合変換融合変換

プログラム変換とプログラム変換と融合変換融合変換

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

最適化• 概念を素直に書いた単純なプログラム

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

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

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

ハンドチューニングの問題

• その過程でバグが混入する可能性• 結果のプログラムは

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

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

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

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

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

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

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

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

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

• これを単一のパスに変換

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

融合変換の例• add(vector A, vector B) { vector tmp; for (int i = 0; i < A.dim; i++) { tmp[i] = A[i] + B[i]; } return tmp; }• add(add(A,B), C);

– 二回ループを回す必要

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

融合変換の例• add3(vector A, vector B, vector C) { vector tmp; for (int i = 0; i < A.dim; i++) { tmp[i] = A[i] + B[i] + C[i]; } return tmp; }• add3(A,B,C);

– 一回のループですむ

効率向上

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

融合変換 (2)• 主に関数型言語で用いられる• 中間データ構造を生成しないことによ

る、空間効率の向上• これまで離れていたコードが接するこ

とにより、更なる最適化が適用可能に– 時間効率も向上

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

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

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

• 例 : Haskell, ML, Lisp

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

なぜ関数型言語か ?• 数学的に厳密な議論をしたい

– 現状の一般的な命令型言語では難しい• 代数的性質が簡単に利用できる

– 命令型言語では特別な解析が必要

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

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

関数型言語の代数的性質( 例 )

• map 関数– map f [a, b, …] = [f a, f b, …]

• concat 関数– concat [[a,b], [c], [d,e], ..] = [a,b,c,d,e,…]

• map f . map g = map (f . g)• (map f) . concat = concat . (map (map f))

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

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

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

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

対象 射集合 関数位相空間

連続関数

群 準同型型 プログラ

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

Catamorphism• X, f, g に対して以下を満たす h が一意に

存在。 fold(f,g) で表す– h . 0 = f– h . s = g . h

帰納的定義を表現h(0) = fh(s(n)) = g(h(n))

catamorphismと呼ばれる

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

Catamorphism の例• 2 倍する関数

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

• fold で表現– double = fold(0, s.s)

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

double . double の融合• double は以下を満たす

double . 0 = 0 double . s.s = s.s.s.s . double

• よってdouble.double . 0 = 0double.double . s = s.s.s.s.double.double

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

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 27: 融合変換による最適化の理論的基盤と正当性 (2006-06-20)

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 28: 融合変換による最適化の理論的基盤と正当性 (2006-06-20)

融合変換の規則• 一般に h:X->Y が h . g = g’ . h h . f = f’を満たすならば h . fold(f,g) = fold(f’,g’)

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

データ型の一般化•以上の話は帰納的 (inductive) なデー

タ型一般に対して、一般化出来る• リスト , 木 , etc.

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

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

• 対策– Shortcut 融合変換

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

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

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

融合変換の実装例 (1)• Haskell の処理系 GHC•標準関数は short-cut 融合変換可能な形で定義されている

• short-cut 融合変換の書き換え規則をプラグマとして定義

• 10クイーンで 43%, 大規模ベンチマークで平均 3% の実行時間改善

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

融合変換の実装例 (2)• 尾上 能之 『融合変換による関数プロ

グラムの最適化』  [Onoue’99]• 再帰的定義から Hylomorphism という

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

• GHC に実装

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

私の研究私の研究私の研究私の研究

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

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

Ana を扱っていない• Hylomorphism と酸性雨定理を組み合

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

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

正当性の問題• Hylomorphism と Free Theorems を使用

– Hylomorphism には Inductive なデータ型と Coinductive なデータ型の一致が必要 μX. F(X) = νX. F(X) …(A)

– Free Theorems はパラメトリシティに依存• (A) とパラメトリシティは厳密には矛盾 !!

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

Catamorphism

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

Anamorphism

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

Hylomorphism• Coinduction (Anamorphism) より

– unfold(φ): A -> νX. F(X)• Induction (Catamorphism) より

– fold(ψ) : μX. F(X) -> B• νX. F(X) = μX. F(X) のとき、

これらを結合して A -> B が得られる• これが Hylomorphism

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

パラメトリシティ• 型を関係として解釈して性質を証明• 具体的な型は「等しい」という関係で解釈

• 型変数は任意の関係で解釈

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

パラメトリシティ (2)• 例 )

– length : ∀A. List(A) -> N– ∀A,A’,R⊆AxA’.

(xs,ys)∈List(R) ⇒ length xs = length ys– xRy iff y = f(x) とおくと、

∀ A,A’,f: A->A’. ys = List(f)(xs) ⇒ length xs = length ys

– length xs = length (map f xs)

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

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

値– Inductive なデータ型と Coinductive な

データ型が一致– すべての型 A に不動点コンビネータ

fixA: (A -> A) -> A が存在

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

なぜ矛盾するか (2)• ラムダ計算 = Cartesian Closed Category• パラメトリシティ の元では、直和 A+B を∀ C. (A->C) -> (B->C) -> C で表現可能

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

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

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

最適化が行われてしまう可能性• アドホックに正当性を保障することは

可能だが、一般的な保障が欲しい

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

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

– Moral equality [Danielsson’06] の利用 ?– 途中の過程では弱い等号を用いる

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

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

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

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

目的 (2)• また、その過程で、融合変換について

のよりよい理解が得られるのではないか ?

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

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

詳しくは現在研究中

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

まとめ• プログラム変換の一つとしての融合変

換• 融合変換の簡単な例と理論•私のアプローチ