融合変換による最適化の 理論的基盤と正当性 酒井政裕 慶應義塾大学大学院 政策・メディア研究科修士課程2年
自己紹介 <ul><li>2001年 慶應義塾大学総合政策学部入学 </li></ul><ul><li>2005年 同卒業 </li></ul><ul><li>2005年慶應義塾大学大学院 政策・メディア研究科 入学、現在在学中 </li></...
自己紹介: 活動 <ul><li>Haskell </li></ul><ul><ul><li>Lightweight Language Weekend 2004 </li></ul></ul><ul><ul><li>Lightweight La...
研究的興味 <ul><li>関数型言語の最適化 </li></ul><ul><li>プログラム変換、特に融合変換の 理論的基盤とアルゴリズム </li></ul>
研究の背景 <ul><li>ソフトウェアの不具合が社会問題化するケースが増加 </li></ul><ul><ul><li>ソフトウェアが必要とされる領域の広がり </li></ul></ul><ul><ul><li>ソフトウェアの高機能化・多機...
研究の背景 (2) <ul><li>分かり易い自明なコードは重要 </li></ul><ul><li>しかし性能のよいコードは複雑で分かり難い </li></ul><ul><li>信頼性と効率の両立は難しい </li></ul>
研究の目的 <ul><li>高度な最適化技術の実現 </li></ul><ul><ul><li>強力な最適化 </li></ul></ul><ul><ul><li>しっかりとした理論的な基盤 </li></ul></ul><ul><ul><li...
位置づけ 基礎 応用 信頼性の高いソフトウェア 高性能なソフトウェア ソフトウェア検証 プログラム変換 数理論理学 プログラム意味論 コンピュータサイエンス
位置づけ 基礎 応用 領域理論 型理論 各種意味論 ロジック 圏論 離散数学 融合変換 等 形式的証明 モデル検査 テスト等 信頼性の高いソフトウェア 高性能なソフトウェア ソフトウェア検証 プログラム変換 数理論理学 プログラム意味論 コンピ...
最適化 <ul><li>概念を素直に表現した単純なプログラム </li></ul><ul><ul><li>分かりやすい </li></ul></ul><ul><ul><li>モジュラリティーが高く、扱いやすい </li></ul></ul><u...
ハンドチューニングの問題 <ul><li>その過程でバグが混入する可能性 </li></ul><ul><li>結果のプログラムは </li></ul><ul><ul><li>複雑で保守が困難 </li></ul></ul><ul><ul><li...
プログラム変換 <ul><li>数学的(代数的)な性質を用いる最適化 </li></ul><ul><ul><li>例)  a×3 + a×2   = { 分配則 }    a×(3+2)   = { calculation }   a×5 </...
融合変換 <ul><li>プログラム変換の一種 </li></ul><ul><li>複数のパスからなるプログラム </li></ul><ul><ul><li>わかりやすいが </li></ul></ul><ul><ul><li>中間データが存在...
融合変換の例 <ul><li>add(vector A, vector B) { </li></ul><ul><li>vector tmp; </li></ul><ul><li>for (int i = 0; i < A.size; i++) ...
融合変換の例 <ul><li>add3(vector A, vector B, vector C) { </li></ul><ul><li>vector tmp; </li></ul><ul><li>for (int i = 0; i < A....
融合変換 (2) <ul><li>中間データ構造を生成しないことによる、空間効率の向上 </li></ul><ul><li>これまで離れていたコードが接することにより、更なる最適化が適用可能に </li></ul><ul><li>主に関数型言語...
関数型言語 <ul><li>数学的な関数に基づいた言語 </li></ul><ul><ul><li>(原則的に)副作用がない </li></ul></ul><ul><ul><li>等しい式は自由に置き換えが可能 </li></ul></ul><...
なぜ関数型言語か? <ul><li>数学的に厳密な議論をしたい </li></ul><ul><ul><li>現状の一般的な命令型言語では難しい </li></ul></ul><ul><li>代数的性質が簡単に利用できる </li></ul><u...
融合変換の理論 <ul><li>圏論 </li></ul><ul><li>データ型と帰納的定義 </li></ul><ul><li>一意性による等式の導出 </li></ul><ul><li>融合変換の難しさ </li></ul>
圏論 <ul><li>対象と射 ( 矢印 ) による抽象化 </li></ul><ul><li>プログラムを扱うのに便利な概念を提供 </li></ul><ul><li>等式を図式で表現 </li></ul>連続関数 位相空間 準同型 群 関数...
データ型と帰納的定義: 自然数を例に <ul><li>以下のような再帰的定義で関数  h: N->X  が一意に決まる </li></ul><ul><ul><li>h(0) = f </li></ul></ul><ul><ul><li>h(s(...
帰納的定義の例 <ul><li>2 倍する関数 </li></ul><ul><ul><li>double : N -> N </li></ul></ul><ul><ul><li>double(0)  = 0 </li></ul></ul><ul...
double ∘ double の融合 <ul><li>double は以下を満たす </li></ul><ul><ul><li>double ∘ 0 = 0 </li></ul></ul><ul><ul><li>double ∘ s ∘ s ...
double ∘ double の融合 <ul><li>double ∘ double  ∘  0 = 0 </li></ul><ul><li>double ∘ double  ∘  s </li></ul><ul><li>= s ∘ s ∘ ...
double ∘ double の融合 <ul><li>double ∘ double  ∘  0 = 0 </li></ul><ul><li>double ∘ double  ∘  s </li></ul><ul><li>= s ∘ s ∘ ...
融合変換の規則 <ul><li>一般に  h:X->Y が </li></ul><ul><li>h ∘ g  = g’ ∘ h </li></ul><ul><li>h ∘ f  = f’ </li></ul><ul><li>を満たすならば </...
融合の難しさ <ul><li>h ∘ fold(f,g) = fold(f’,g’)  </li></ul><ul><li>f’, g’  をどう発見するか ? </li></ul><ul><li>関数は  fold(f,g)  の形をしていな...
融合変換の実装例 <ul><li>Haskell の処理系 GHC </li></ul><ul><ul><li>short-cut  融合変換 </li></ul></ul><ul><ul><li>10 クイーンで 43%,  大規模ベンチマー...
尾上らの手法の問題 <ul><li>Hylo-Cata  のみを扱いその双対の  Hylo-Ana  を扱っていない </li></ul><ul><li>Hylomorphism  と  Free theorems  を組み合わせることの正当性...
正当性の問題 <ul><li>Hylomorphism </li></ul><ul><ul><li>余帰納的な関数でデータを生成し、帰納的な関数でデータを消費する関数 </li></ul></ul><ul><ul><li>帰納的データ型と余帰納...
なぜ矛盾するか <ul><li>ラムダ計算に基づく体系では以下が同値 </li></ul><ul><ul><li>帰納的データ型と余帰納的データ型が一致 </li></ul></ul><ul><ul><li>すべての型 A に不動点コンビネータ...
何が困るのか <ul><li>正当性は微妙なのは気持ち悪い </li></ul><ul><li>本来成り立っていない等式に基づいた最適化が行われてしまう可能性 </li></ul><ul><li>アドホックに正当性を保障することは可能だが、一般...
私のアプローチ <ul><li>形式的な意味論を用いた正当化 </li></ul><ul><li>今考えているアイディア </li></ul><ul><ul><li>Moral equality [Danielsson’06] の利用? </l...
目的 <ul><li>正当性を理論的に保障 </li></ul><ul><li>融合変換をより安全に広い範囲で使用可能に </li></ul><ul><li>安全で強力な最適化技術の実現 </li></ul><ul><li>信頼性と性能の両立を...
<ul><li>詳しくは目下研究中 </li></ul>
まとめ <ul><li>プログラム変換の一つとしての融合変換 </li></ul><ul><li>融合変換の簡単な例と理論 </li></ul><ul><li>私のアプローチ </li></ul>
Upcoming SlideShare
Loading in …5
×

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

1,771 views

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,771
On SlideShare
0
From Embeds
0
Number of Embeds
110
Actions
Shares
0
Downloads
6
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

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

  1. 1. 融合変換による最適化の 理論的基盤と正当性 酒井政裕 慶應義塾大学大学院 政策・メディア研究科修士課程2年
  2. 2. 自己紹介 <ul><li>2001年 慶應義塾大学総合政策学部入学 </li></ul><ul><li>2005年 同卒業 </li></ul><ul><li>2005年慶應義塾大学大学院 政策・メディア研究科 入学、現在在学中 </li></ul><ul><li>萩野達也研究室所属 </li></ul>
  3. 3. 自己紹介: 活動 <ul><li>Haskell </li></ul><ul><ul><li>Lightweight Language Weekend 2004 </li></ul></ul><ul><ul><li>Lightweight Language Day and Night 2005 </li></ul></ul><ul><ul><li>日経ソフトウェア6月号「Haskellによる関数プログラミング入門」 </li></ul></ul><ul><li>Ruby-GNOME2 </li></ul>
  4. 4. 研究的興味 <ul><li>関数型言語の最適化 </li></ul><ul><li>プログラム変換、特に融合変換の 理論的基盤とアルゴリズム </li></ul>
  5. 5. 研究の背景 <ul><li>ソフトウェアの不具合が社会問題化するケースが増加 </li></ul><ul><ul><li>ソフトウェアが必要とされる領域の広がり </li></ul></ul><ul><ul><li>ソフトウェアの高機能化・多機能化にともなう 複雑化 </li></ul></ul><ul><li>ソフトウェアの信頼性が重要に </li></ul><ul><li>様々なレベルの方法が必要 </li></ul><ul><ul><li>工学的な品質管理, etc </li></ul></ul><ul><ul><li>分かり易い自明なコードも重要 </li></ul></ul>
  6. 6. 研究の背景 (2) <ul><li>分かり易い自明なコードは重要 </li></ul><ul><li>しかし性能のよいコードは複雑で分かり難い </li></ul><ul><li>信頼性と効率の両立は難しい </li></ul>
  7. 7. 研究の目的 <ul><li>高度な最適化技術の実現 </li></ul><ul><ul><li>強力な最適化 </li></ul></ul><ul><ul><li>しっかりとした理論的な基盤 </li></ul></ul><ul><ul><li>信頼性を損なわない </li></ul></ul><ul><li>信頼性と効率の両立 </li></ul>
  8. 8. 位置づけ 基礎 応用 信頼性の高いソフトウェア 高性能なソフトウェア ソフトウェア検証 プログラム変換 数理論理学 プログラム意味論 コンピュータサイエンス
  9. 9. 位置づけ 基礎 応用 領域理論 型理論 各種意味論 ロジック 圏論 離散数学 融合変換 等 形式的証明 モデル検査 テスト等 信頼性の高いソフトウェア 高性能なソフトウェア ソフトウェア検証 プログラム変換 数理論理学 プログラム意味論 コンピュータサイエンス
  10. 10. 最適化 <ul><li>概念を素直に表現した単純なプログラム </li></ul><ul><ul><li>分かりやすい </li></ul></ul><ul><ul><li>モジュラリティーが高く、扱いやすい </li></ul></ul><ul><ul><li>しかし、性能が悪いことがしばしば </li></ul></ul><ul><li>最適化が必要 </li></ul><ul><ul><li>コンパイラによる最適化 </li></ul></ul><ul><ul><li>ハンドチューニング </li></ul></ul>
  11. 11. ハンドチューニングの問題 <ul><li>その過程でバグが混入する可能性 </li></ul><ul><li>結果のプログラムは </li></ul><ul><ul><li>複雑で保守が困難 </li></ul></ul><ul><ul><li>モジュラリティーが低く再利用が困難 </li></ul></ul><ul><li>信頼性を損なう </li></ul><ul><li>最適化のための別アプローチが必要 ! </li></ul>
  12. 12. プログラム変換 <ul><li>数学的(代数的)な性質を用いる最適化 </li></ul><ul><ul><li>例) a×3 + a×2 = { 分配則 } a×(3+2) = { calculation } a×5 </li></ul></ul><ul><li>同じ 意味 で性能のよいプログラムへ変換 </li></ul><ul><li>オーダが変わるような場合も </li></ul>
  13. 13. 融合変換 <ul><li>プログラム変換の一種 </li></ul><ul><li>複数のパスからなるプログラム </li></ul><ul><ul><li>わかりやすいが </li></ul></ul><ul><ul><li>中間データが存在し、効率が悪い </li></ul></ul><ul><li>これを単一のパスに変換 </li></ul>
  14. 14. 融合変換の例 <ul><li>add(vector A, vector B) { </li></ul><ul><li>vector tmp; </li></ul><ul><li>for (int i = 0; i < A.size; i++) </li></ul><ul><li>tmp[i] = A[i] + B[i]; </li></ul><ul><li>return tmp; </li></ul><ul><li>} </li></ul><ul><li>add(add(A,B), C); </li></ul><ul><li>二回ループを回す必要 </li></ul>
  15. 15. 融合変換の例 <ul><li>add3(vector A, vector B, vector C) { </li></ul><ul><li>vector tmp; </li></ul><ul><li>for (int i = 0; i < A.size; i++) </li></ul><ul><li>tmp[i] = A[i] + B[i] + C[i]; </li></ul><ul><li>return tmp; </li></ul><ul><li>} </li></ul><ul><li>add3(A,B,C); </li></ul><ul><li>一回のループですむ </li></ul>効率向上
  16. 16. 融合変換 (2) <ul><li>中間データ構造を生成しないことによる、空間効率の向上 </li></ul><ul><li>これまで離れていたコードが接することにより、更なる最適化が適用可能に </li></ul><ul><li>主に関数型言語で用いられる </li></ul>
  17. 17. 関数型言語 <ul><li>数学的な関数に基づいた言語 </li></ul><ul><ul><li>(原則的に)副作用がない </li></ul></ul><ul><ul><li>等しい式は自由に置き換えが可能 </li></ul></ul><ul><ul><li>数学的な取り扱いが容易 </li></ul></ul><ul><li>例: Haskell, ML, Lisp </li></ul>
  18. 18. なぜ関数型言語か? <ul><li>数学的に厳密な議論をしたい </li></ul><ul><ul><li>現状の一般的な命令型言語では難しい </li></ul></ul><ul><li>代数的性質が簡単に利用できる </li></ul><ul><ul><li>命令型言語では特別な解析が必要 </li></ul></ul><ul><li>そこで、とりあえず関数型言語に特化 </li></ul>
  19. 19. 融合変換の理論 <ul><li>圏論 </li></ul><ul><li>データ型と帰納的定義 </li></ul><ul><li>一意性による等式の導出 </li></ul><ul><li>融合変換の難しさ </li></ul>
  20. 20. 圏論 <ul><li>対象と射 ( 矢印 ) による抽象化 </li></ul><ul><li>プログラムを扱うのに便利な概念を提供 </li></ul><ul><li>等式を図式で表現 </li></ul>連続関数 位相空間 準同型 群 関数 集合 プログラム 型 射 対象
  21. 21. データ型と帰納的定義: 自然数を例に <ul><li>以下のような再帰的定義で関数 h: N->X が一意に決まる </li></ul><ul><ul><li>h(0) = f </li></ul></ul><ul><ul><li>h(s(n)) = g(h(n)) </li></ul></ul><ul><li>圏論での書き方 </li></ul><ul><ul><li>h∘0 = f </li></ul></ul><ul><ul><li>h∘s = g∘h </li></ul></ul><ul><li>この h を fold(f,g) と表す。 </li></ul><ul><li>一意に決まることが N の本質 </li></ul>
  22. 22. 帰納的定義の例 <ul><li>2 倍する関数 </li></ul><ul><ul><li>double : N -> N </li></ul></ul><ul><ul><li>double(0) = 0 </li></ul></ul><ul><ul><li>double(s(n)) = s(s(double(n)) </li></ul></ul><ul><li>fold で表現 </li></ul><ul><ul><li>double = fold(0, s∘s) </li></ul></ul>
  23. 23. double ∘ double の融合 <ul><li>double は以下を満たす </li></ul><ul><ul><li>double ∘ 0 = 0 </li></ul></ul><ul><ul><li>double ∘ s ∘ s </li></ul></ul><ul><ul><li>= s∘s∘s∘s ∘ double </li></ul></ul><ul><li>よって </li></ul><ul><ul><li>double∘double ∘ 0 = 0 </li></ul></ul><ul><ul><li>double∘double ∘ s </li></ul></ul><ul><ul><li>= s∘s∘s∘s∘double∘double </li></ul></ul>
  24. 24. double ∘ double の融合 <ul><li>double ∘ double ∘ 0 = 0 </li></ul><ul><li>double ∘ double ∘ s </li></ul><ul><li>= s ∘ s ∘ s ∘ s ∘ double ∘ double </li></ul><ul><li>fold(0,s∘s∘s∘s) も 同じ等式を満たす </li></ul><ul><li>一意性より </li></ul><ul><ul><li>double ∘ double </li></ul></ul><ul><ul><li>= fold(0,s∘s∘s∘s) </li></ul></ul>
  25. 25. double ∘ double の融合 <ul><li>double ∘ double ∘ 0 = 0 </li></ul><ul><li>double ∘ double ∘ s </li></ul><ul><li>= s ∘ s ∘ s ∘ s ∘ double.double </li></ul><ul><li>fold(0,s∘s∘s∘s) も 同じ等式を満たす </li></ul><ul><li>一意性より </li></ul><ul><ul><li>double ∘ double </li></ul></ul><ul><ul><li>= fold(0,s∘s∘s∘s) </li></ul></ul>融合できた !!
  26. 26. 融合変換の規則 <ul><li>一般に h:X->Y が </li></ul><ul><li>h ∘ g = g’ ∘ h </li></ul><ul><li>h ∘ f = f’ </li></ul><ul><li>を満たすならば </li></ul><ul><li>h ∘ fold(f,g) </li></ul><ul><li>= fold(f’,g’) </li></ul>
  27. 27. 融合の難しさ <ul><li>h ∘ fold(f,g) = fold(f’,g’) </li></ul><ul><li>f’, g’ をどう発見するか ? </li></ul><ul><li>関数は fold(f,g) の形をしていないかも </li></ul><ul><li>対策 </li></ul><ul><ul><li>Shortcut 融合変換 </li></ul></ul><ul><ul><ul><li>関数を融合しやすい形で定義しておく </li></ul></ul></ul><ul><ul><li>Warm Fusion </li></ul></ul><ul><ul><ul><li>一般の再帰的定義から fold/build を導出 </li></ul></ul></ul>
  28. 28. 融合変換の実装例 <ul><li>Haskell の処理系 GHC </li></ul><ul><ul><li>short-cut 融合変換 </li></ul></ul><ul><ul><li>10 クイーンで 43%, 大規模ベンチマークで平均 3% の実行時間改善 </li></ul></ul><ul><li>尾上 能之 『融合変換による関数プログラムの最適化』  [Onoue’99] </li></ul><ul><ul><li>再帰的定義から Hylomorphism という形式を導出し、 Hylo-Cata fusion という規則によって融合を行う </li></ul></ul><ul><ul><li>GHC に実装したが取り込まれてはいない </li></ul></ul>
  29. 29. 尾上らの手法の問題 <ul><li>Hylo-Cata のみを扱いその双対の Hylo-Ana を扱っていない </li></ul><ul><li>Hylomorphism と Free theorems を組み合わせることの正当性の問題 </li></ul>
  30. 30. 正当性の問題 <ul><li>Hylomorphism </li></ul><ul><ul><li>余帰納的な関数でデータを生成し、帰納的な関数でデータを消費する関数 </li></ul></ul><ul><ul><li>帰納的データ型と余帰納的データ型の一致が必要 μX. F(X) = νX. F(X) … (A) </li></ul></ul><ul><li>Free Theorems </li></ul><ul><ul><li>型を関係として解釈することによって証明される </li></ul></ul><ul><ul><li>パラメトリシティに基づく … (B) </li></ul></ul><ul><li>A と B は厳密には 矛盾 !! </li></ul>
  31. 31. なぜ矛盾するか <ul><li>ラムダ計算に基づく体系では以下が同値 </li></ul><ul><ul><li>帰納的データ型と余帰納的データ型が一致 </li></ul></ul><ul><ul><li>すべての型 A に不動点コンビネータ fixA: (A -> A) -> A が存在 </li></ul></ul><ul><li>パラメトリシティより、直和 A+B を表現可能 ∀ C. (A->C) -> (B->C) -> C </li></ul><ul><li>ラムダ計算 (= Cartesian Closed Category) では直和と不動点コンビネータは矛盾 </li></ul><ul><ul><li>正確には退化したモデルしか存在しない </li></ul></ul>
  32. 32. 何が困るのか <ul><li>正当性は微妙なのは気持ち悪い </li></ul><ul><li>本来成り立っていない等式に基づいた最適化が行われてしまう可能性 </li></ul><ul><li>アドホックに正当性を保障することは可能だが、一般的な保障が欲しい </li></ul>
  33. 33. 私のアプローチ <ul><li>形式的な意味論を用いた正当化 </li></ul><ul><li>今考えているアイディア </li></ul><ul><ul><li>Moral equality [Danielsson’06] の利用? </li></ul></ul><ul><ul><li>途中の過程では弱い等号を用いる </li></ul></ul><ul><ul><li>最終的には条件付の等式に </li></ul></ul>
  34. 34. 目的 <ul><li>正当性を理論的に保障 </li></ul><ul><li>融合変換をより安全に広い範囲で使用可能に </li></ul><ul><li>安全で強力な最適化技術の実現 </li></ul><ul><li>信頼性と性能の両立を </li></ul><ul><li>また、その過程で融合変換についてよりよく理解したい </li></ul><ul><li>それによって、より高度な融合変換を </li></ul>
  35. 35. <ul><li>詳しくは目下研究中 </li></ul>
  36. 36. まとめ <ul><li>プログラム変換の一つとしての融合変換 </li></ul><ul><li>融合変換の簡単な例と理論 </li></ul><ul><li>私のアプローチ </li></ul>

×