# HG changeset patch # User Nobuyasu Oshiro # Date 1330320587 -32400 # Node ID 5ec4d6ecebd1ba5643b654fbd18752ef2d830c16 # Parent 24ef9b9127392f7f275de2a6859342d22f825f2d commit diff -r 24ef9b912739 -r 5ec4d6ecebd1 paper/graffle/state_conv1_noopt.graffle --- a/paper/graffle/state_conv1_noopt.graffle Mon Feb 27 14:11:40 2012 +0900 +++ b/paper/graffle/state_conv1_noopt.graffle Mon Feb 27 14:29:47 2012 +0900 @@ -44,7 +44,7 @@ Creator Nobuyasu Oshiro DisplayScale - 1 0/72 in = 1 0/72 in + 1 0/72 in = 1.0000 in GraphDocumentVersion 8 GraphicsList @@ -61,8 +61,8 @@ 19 Points - {103.20886, 197.46736} - {99.059959, 184.40334} + {112.4254, 198.11032} + {103.82727, 182.45906} Style @@ -88,14 +88,14 @@ Head ID - 3 + 5 ID 18 Points - {332.91068, 183.37383} - {339.76672, 198.76688} + {309.3009, 181.97667} + {298.96802, 199.18106} Style @@ -283,8 +283,8 @@ 11 Points - {166.49998, 222} - {139.50002, 222} + {180.49998, 221} + {153.50002, 221} Style @@ -316,8 +316,8 @@ 10 Points - {245.49998, 222} - {218.50002, 222} + {259.5, 221} + {232.50002, 221} Style @@ -343,39 +343,6 @@ Head ID - 5 - - ID - 9 - Points - - {324.5, 222} - {297.5, 222} - - Style - - stroke - - HeadArrow - FilledArrow - LineType - 1 - TailArrow - 0 - - - Tail - - ID - 3 - - - - Class - LineGraphic - Head - - ID 13 ID @@ -405,7 +372,7 @@ Bounds - {{83, 197}, {56, 50}} + {{97, 196}, {56, 50}} Class ShapedGraphic ID @@ -436,7 +403,7 @@ Bounds - {{167, 197}, {51, 50}} + {{181, 196}, {51, 50}} Class ShapedGraphic ID @@ -466,7 +433,7 @@ Bounds - {{246, 197}, {51, 50}} + {{260, 196}, {51, 50}} Class ShapedGraphic ID @@ -524,36 +491,6 @@ 0 - - Bounds - {{325, 197}, {51, 50}} - Class - ShapedGraphic - ID - 3 - Shape - Circle - Style - - shadow - - Draws - NO - - - Text - - Text - {\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf230 -{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc - -\f0\b\fs24 \cf0 f_g0} - VerticalPad - 0 - - GridInfo @@ -602,7 +539,7 @@ MasterSheets ModificationDate - 2012-02-26 10:06:54 +0000 + 2012-02-27 05:28:25 +0000 Modifier Nobuyasu Oshiro NotesVisible diff -r 24ef9b912739 -r 5ec4d6ecebd1 presen/cbc.md --- a/presen/cbc.md Mon Feb 27 14:11:40 2012 +0900 +++ b/presen/cbc.md Mon Feb 27 14:29:47 2012 +0900 @@ -286,8 +286,6 @@ - GCC-4.5 でもインライン展開はされていたが、GCC-4.6 はより良い最適化がかけられている。 - - --- @@ -319,6 +317,32 @@ --- +conv1 プログラム +======== +- conv1 プログラムでは計算と継続を交互に繰り返し行なう。 +- しかし状態のいくつかへは関数ポインタとして保存させておき継続を行う。 +
+__code g(int i,stack sp) { // Caller
+    struct f_g0_interface *c = 
+        (struct f_g0_interface *)(sp -= sizeof(struct f_g0_interface));
+
+    c->ret = g_h1;
+    c->i_ = i;
+
+    goto h(i+3,sp);
+}
+
+__code h(int i,stack sp) {
+    struct f_g0_interface *c = (struct f_g0_interface *)sp;
+    goto (c->ret)(i+4,sp);
+}
+
+ +- 関数ポインタへの継続はインライン展開されない。 + +--- + + CbC の実装: 環境付き継続 ======== - 環境付き継続: C との互換を取るための機能。継続を行った C の関数に戻ることができる。 diff -r 24ef9b912739 -r 5ec4d6ecebd1 presen/pix/state_conv1_noopt.png Binary file presen/pix/state_conv1_noopt.png has changed diff -r 24ef9b912739 -r 5ec4d6ecebd1 presen/presentation.html --- a/presen/presentation.html Mon Feb 27 14:11:40 2012 +0900 +++ b/presen/presentation.html Mon Feb 27 14:29:47 2012 +0900 @@ -74,7 +74,7 @@ @@ -109,7 +109,7 @@ @@ -144,7 +144,7 @@ @@ -182,7 +182,7 @@ @@ -225,7 +225,7 @@ @@ -284,7 +284,7 @@ @@ -347,7 +347,7 @@ @@ -375,7 +375,7 @@ @@ -434,7 +434,7 @@ @@ -477,7 +477,7 @@ @@ -514,7 +514,7 @@ @@ -558,7 +558,7 @@ @@ -611,7 +611,7 @@ @@ -626,18 +626,11 @@
    -
  • conv1 プログラムでは、GCC-4.6 のインライン展開が GCC-4.5 に比べより良くなっていることが分かった。
  • -
-

インライン展開

-
    -
  • -
  • -

    また, GCC では新たな最適化もアップデートが行われていく。 -その為、GCC のアップデートに合わせる

    -
  • -
-

引数 1 の時のプログラム

-

  • 引数が 1 の時は, 関数ポインタとして構造体に保存していたコードセグメントへと継続を行なっている
  • +
  • 最適化無しに比べると GCC-4.5、 GGC-4.6 共にコードセグメントの数が減っている。
  • +
  • これは、最適化の 1 つ『インライン展開』により各コードセグメントの計算がまとめて行われる為、 +継続する数を減らすことができるから。
  • +
  • GCC-4.5 でもインライン展開はされていたが、GCC-4.6 はより良い最適化がかけられている。
  • +
    @@ -653,7 +646,41 @@ + +
    + + + +
    +
    +
    + +

    GCC のアップデートに合わせる事の重要性

    + + +
      +
    • 今回の『インライン展開』のように GCC の最適化は日々改良されていく。
    • +
    • また、既存の最適化の改良だけでなく新たな最適化の追加等も行われていく。
    • +
    • それらの恩恵を受ける為にも GCC のアップデートに合わせていく事は今後も重要である。
    • +
    + +
    +
    +

    Presenter Notes

    +
    + +
    +
    +
    @@ -668,10 +695,10 @@
      -
    • 今回 CbC-GCC を GCC-4.6 へとアップデートを行った.
    • -
    • アップデートに伴い最適化の強制付与や環境付き継続の部分の実装の修正を行った.
    • -
    • アップデートにかけたことで, より良い最適化がかかることを確認できた.
    • -
    • GCC ベースの CbC コンパイラは今後 GCC のアップデートに合わせていくだけとなる.
    • +
    • 今回 CbC-GCC を GCC-4.6 へとアップデートを行った。
    • +
    • アップデートに伴い最適化の強制付与や環境付き継続の部分の実装の修正を行った。
    • +
    • アップデートにかけたことで, より良い最適化がかかることを確認できた。
    • +
    • GCC ベースの CbC コンパイラは今後 GCC のアップデートに合わせていくだけとなる。

    今後の課題

      @@ -693,7 +720,58 @@ + +
    + + + +
    +
    +
    + +

    conv1 プログラム

    + + +
      +
    • conv1 プログラムでは計算と継続を交互に繰り返し行なう。
    • +
    • +

      しかし状態のいくつかへは関数ポインタとして保存させておき継続を行う。 +

      +__code g(int i,stack sp) { // Caller
      +    struct f_g0_interface c = 
      +        (struct f_g0_interface )(sp -= sizeof(struct f_g0_interface));

      +

      c->ret = g_h1; +c->i_ = i;

      +

      goto h(i+3,sp); +}

      +
    • +
    +

    __code h(int i,stack sp) { + struct f_g0_interface c = (struct f_g0_interface )sp; + goto (c->ret)(i+4,sp); +} +

    +
      +
    • 関数ポインタへの継続はインライン展開されない。
    • +
    + +
    +
    +

    Presenter Notes

    +
    + +
    +
    +
    @@ -740,7 +818,7 @@
    @@ -788,7 +866,7 @@ @@ -824,7 +902,7 @@ @@ -886,7 +964,7 @@

  • 関数を展開してその場で計算する『インライン展開』がより強力になっているのが確認できる
  • @@ -908,7 +986,7 @@ @@ -930,7 +1008,7 @@
    @@ -1029,35 +1107,47 @@ - まとめ + GCC のアップデートに合わせる事の重要性 15 - CbC の実装: 環境付き継続 + まとめ 16 - CbC 引数渡し + conv1 プログラム 17 - GCC でのコンパイルの仕組み + CbC の実装: 環境付き継続 18 - 最適化の比較 + CbC 引数渡し 19 + + GCC でのコンパイルの仕組み + 20 + + + + + 最適化の比較 + 21 + + +