Mercurial > hg > Papers > 2012 > nobu-thesis
changeset 43:8539cd84106e draft
modify
author | Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 29 Feb 2012 07:02:44 +0900 |
parents | 1d66e06ae2c2 |
children | 1d830d6fc30b |
files | paper/graffle/state_conv1_45.graffle paper/graffle/state_conv1_46.graffle paper/graffle/state_conv1_noopt.graffle presen/cbc.md presen/pix/state_conv1_45.png presen/pix/state_conv1_46.png presen/pix/state_conv1_noopt.png presen/presentation.html |
diffstat | 8 files changed, 455 insertions(+), 386 deletions(-) [+] |
line wrap: on
line diff
--- a/paper/graffle/state_conv1_45.graffle Tue Feb 28 22:47:04 2012 +0900 +++ b/paper/graffle/state_conv1_45.graffle Wed Feb 29 07:02:44 2012 +0900 @@ -157,8 +157,8 @@ <integer>26</integer> <key>Points</key> <array> - <string>{123.7487, 357.61755}</string> - <string>{164.6412, 319.55411}</string> + <string>{123.74873, 357.61752}</string> + <string>{164.64119, 319.55411}</string> </array> <key>Style</key> <dict> @@ -189,6 +189,18 @@ <string>Circle</string> <key>Style</key> <dict> + <key>fill</key> + <dict> + <key>Color</key> + <dict> + <key>b</key> + <string>1</string> + <key>g</key> + <string>1</string> + <key>r</key> + <string>0</string> + </dict> + </dict> <key>shadow</key> <dict> <key>Draws</key> @@ -318,6 +330,18 @@ <string>Circle</string> <key>Style</key> <dict> + <key>fill</key> + <dict> + <key>Color</key> + <dict> + <key>b</key> + <string>0</string> + <key>g</key> + <string>1</string> + <key>r</key> + <string>1</string> + </dict> + </dict> <key>shadow</key> <dict> <key>Draws</key> @@ -349,6 +373,18 @@ <string>Circle</string> <key>Style</key> <dict> + <key>fill</key> + <dict> + <key>Color</key> + <dict> + <key>b</key> + <string>0</string> + <key>g</key> + <string>1</string> + <key>r</key> + <string>1</string> + </dict> + </dict> <key>shadow</key> <dict> <key>Draws</key> @@ -379,6 +415,18 @@ <string>Circle</string> <key>Style</key> <dict> + <key>fill</key> + <dict> + <key>Color</key> + <dict> + <key>b</key> + <string>0</string> + <key>g</key> + <string>1</string> + <key>r</key> + <string>1</string> + </dict> + </dict> <key>shadow</key> <dict> <key>Draws</key> @@ -409,6 +457,18 @@ <string>Circle</string> <key>Style</key> <dict> + <key>fill</key> + <dict> + <key>Color</key> + <dict> + <key>b</key> + <string>1</string> + <key>g</key> + <string>1</string> + <key>r</key> + <string>0</string> + </dict> + </dict> <key>shadow</key> <dict> <key>Draws</key> @@ -476,7 +536,7 @@ <key>MasterSheets</key> <array/> <key>ModificationDate</key> - <string>2012-02-27 18:34:20 +0000</string> + <string>2012-02-28 14:55:04 +0000</string> <key>Modifier</key> <string>Nobuyasu Oshiro</string> <key>NotesVisible</key> @@ -557,7 +617,7 @@ </dict> </array> <key>Frame</key> - <string>{{435, 4}, {693, 938}}</string> + <string>{{536, 120}, {693, 938}}</string> <key>ListView</key> <true/> <key>OutlineWidth</key>
--- a/paper/graffle/state_conv1_46.graffle Tue Feb 28 22:47:04 2012 +0900 +++ b/paper/graffle/state_conv1_46.graffle Wed Feb 29 07:02:44 2012 +0900 @@ -224,6 +224,18 @@ <string>Circle</string> <key>Style</key> <dict> + <key>fill</key> + <dict> + <key>Color</key> + <dict> + <key>b</key> + <string>0</string> + <key>g</key> + <string>1</string> + <key>r</key> + <string>1</string> + </dict> + </dict> <key>shadow</key> <dict> <key>Draws</key> @@ -255,6 +267,18 @@ <string>Circle</string> <key>Style</key> <dict> + <key>fill</key> + <dict> + <key>Color</key> + <dict> + <key>b</key> + <string>0</string> + <key>g</key> + <string>1</string> + <key>r</key> + <string>1</string> + </dict> + </dict> <key>shadow</key> <dict> <key>Draws</key> @@ -285,6 +309,18 @@ <string>Circle</string> <key>Style</key> <dict> + <key>fill</key> + <dict> + <key>Color</key> + <dict> + <key>b</key> + <string>0</string> + <key>g</key> + <string>1</string> + <key>r</key> + <string>1</string> + </dict> + </dict> <key>shadow</key> <dict> <key>Draws</key> @@ -352,7 +388,7 @@ <key>MasterSheets</key> <array/> <key>ModificationDate</key> - <string>2012-02-27 18:33:52 +0000</string> + <string>2012-02-28 14:54:44 +0000</string> <key>Modifier</key> <string>Nobuyasu Oshiro</string> <key>NotesVisible</key> @@ -433,7 +469,7 @@ </dict> </array> <key>Frame</key> - <string>{{633, 100}, {693, 938}}</string> + <string>{{-49, 73}, {693, 938}}</string> <key>ListView</key> <true/> <key>OutlineWidth</key>
--- a/paper/graffle/state_conv1_noopt.graffle Tue Feb 28 22:47:04 2012 +0900 +++ b/paper/graffle/state_conv1_noopt.graffle Wed Feb 29 07:02:44 2012 +0900 @@ -124,8 +124,8 @@ <integer>19</integer> <key>Points</key> <array> - <string>{118.70056, 237.57617}</string> - <string>{159.50687, 199.41438}</string> + <string>{118.74377, 237.61328}</string> + <string>{159.62735, 199.53978}</string> </array> <key>Style</key> <dict> @@ -190,8 +190,8 @@ <integer>17</integer> <key>Points</key> <array> - <string>{178.49965, 355.5}</string> - <string>{178.49933, 378.5}</string> + <string>{178.49991, 355.5}</string> + <string>{178.49982, 378.5}</string> </array> <key>Style</key> <dict> @@ -223,8 +223,8 @@ <integer>16</integer> <key>Points</key> <array> - <string>{178.45464, 281.49997}</string> - <string>{178.4137, 304.50012}</string> + <string>{178.48746, 281.5}</string> + <string>{178.47615, 304.5}</string> </array> <key>Style</key> <dict> @@ -315,6 +315,18 @@ <string>Circle</string> <key>Style</key> <dict> + <key>fill</key> + <dict> + <key>Color</key> + <dict> + <key>b</key> + <string>1</string> + <key>g</key> + <string>1</string> + <key>r</key> + <string>0</string> + </dict> + </dict> <key>shadow</key> <dict> <key>Draws</key> @@ -346,8 +358,8 @@ <integer>11</integer> <key>Points</key> <array> - <string>{98.999924, 304.5}</string> - <string>{98.999847, 281.5}</string> + <string>{98.999977, 304.5}</string> + <string>{98.999962, 281.5}</string> </array> <key>Style</key> <dict> @@ -379,8 +391,8 @@ <integer>10</integer> <key>Points</key> <array> - <string>{99.088615, 378.50012}</string> - <string>{99.168541, 355.49948}</string> + <string>{99.024498, 378.5}</string> + <string>{99.046593, 355.49997}</string> </array> <key>Style</key> <dict> @@ -412,8 +424,8 @@ <integer>8</integer> <key>Points</key> <array> - <string>{178.33638, 207.4995}</string> - <string>{178.18878, 230.5018}</string> + <string>{178.45477, 207.49997}</string> + <string>{178.41397, 230.50012}</string> </array> <key>Style</key> <dict> @@ -444,6 +456,18 @@ <string>Circle</string> <key>Style</key> <dict> + <key>fill</key> + <dict> + <key>Color</key> + <dict> + <key>b</key> + <string>0</string> + <key>g</key> + <string>1</string> + <key>r</key> + <string>1</string> + </dict> + </dict> <key>shadow</key> <dict> <key>Draws</key> @@ -475,6 +499,18 @@ <string>Circle</string> <key>Style</key> <dict> + <key>fill</key> + <dict> + <key>Color</key> + <dict> + <key>b</key> + <string>0</string> + <key>g</key> + <string>1</string> + <key>r</key> + <string>1</string> + </dict> + </dict> <key>shadow</key> <dict> <key>Draws</key> @@ -505,6 +541,18 @@ <string>Circle</string> <key>Style</key> <dict> + <key>fill</key> + <dict> + <key>Color</key> + <dict> + <key>b</key> + <string>0</string> + <key>g</key> + <string>1</string> + <key>r</key> + <string>1</string> + </dict> + </dict> <key>shadow</key> <dict> <key>Draws</key> @@ -535,6 +583,18 @@ <string>Circle</string> <key>Style</key> <dict> + <key>fill</key> + <dict> + <key>Color</key> + <dict> + <key>b</key> + <string>1</string> + <key>g</key> + <string>1</string> + <key>r</key> + <string>0</string> + </dict> + </dict> <key>shadow</key> <dict> <key>Draws</key> @@ -602,7 +662,7 @@ <key>MasterSheets</key> <array/> <key>ModificationDate</key> - <string>2012-02-27 18:31:21 +0000</string> + <string>2012-02-28 14:54:59 +0000</string> <key>Modifier</key> <string>Nobuyasu Oshiro</string> <key>NotesVisible</key> @@ -683,7 +743,7 @@ </dict> </array> <key>Frame</key> - <string>{{653, 80}, {693, 938}}</string> + <string>{{1140, 114}, {693, 938}}</string> <key>ListView</key> <true/> <key>OutlineWidth</key>
--- a/presen/cbc.md Tue Feb 28 22:47:04 2012 +0900 +++ b/presen/cbc.md Wed Feb 29 07:02:44 2012 +0900 @@ -23,7 +23,7 @@ コードセグメント単位での記述と継続を基本としたプログラミング言語 --------- -<li>コーセグメント:CbC におけるプログラムの基本単位</li> +<li><font size=5em>コーセグメント:CbC におけるプログラムの基本単位</font></li> <ul> <li>C の関数よりも細かな単位</li> <li>構文は C と同じだが、C から関数コールとループ制御が取り除かれた形</li> @@ -95,34 +95,34 @@ <caption>階乗を求める CbC のプログラム</caption> <td width=50%> <pre style="margin-left:5%"> -\_\_code print_factorial(int prod) +<font color="blue">\_\_code</font> print_factorial(int prod) { printf("factorial = %d\n",prod); exit(0); } -\_\_code factorial0(int prod, int x) +<font color="blue">\_\_code</font> factorial0(int prod, int x) { if ( x >= 1) { - goto factorial0(prod\*x, x-1); + <font color="red">goto</font> factorial0(prod\*x, x-1); }else{ - goto print_factorial(prod); + <font color="red">goto</font> print_factorial(prod); } } -\_\_code factorial(int x) +<font color="blue">\_\_code</font> factorial(int x) { - goto factorial0(1, x); + <font color="red">goto</font> factorial0(1, x); } int main(int argc, char \*\*argv) { int i; i = atoi(argv[1]); - goto factorial(i); + <font color="red">goto</font> factorial(i); } </pre> </td> <td> -<li>__code によるコードセグメントの宣言</li> -<li>引数付きの goto でコードセグメントを呼び出すことができる</li> +<li><font color="blue">__code</font> によるコードセグメントの宣言</li> +<li>引数付きの <font color="red">goto</font> でコードセグメントを呼び出すことができる</li> <li>内部では call ではなく jmp 命令でコードセグメントの処理が遷移している</li> </td> </table> @@ -190,13 +190,13 @@ ======== 末尾除去の条件をチェックする関数 --------- -- 関数が末尾除去にかかる為には幾つか条件があり、その条件はある関数によってチェックされる。 -- その関数を元に、『コードセグメントは末尾除去』にかける専用の関数を用意していた。 +- 関数(コードセグメント)が末尾除去にかかる為には幾つか条件があり、その条件はある関数によってチェックされる。 +- その関数を元に、『コードセグメントを末尾除去にかける』専用の関数を用意していた。 - しかしこの方法は、元になった関数が修正に合わせて専用の関数も修正を行う必要があった。 実装の修正とその利点 --------- -- しかし, 今回の実装でその関数を無くし, 末尾除去のフラグを強制的に立たせる実装に変更。 +- しかし 今回の実装でその関数を無くし, 末尾除去のフラグを強制的に立たせる実装に変更 - 専用関数がなくなったことで、今後より楽なアップデートを行なっていくことができるようになった。 - また、コードセグメントへの継続が jmp ではなく call 命令で行われるバグがあったが修正できた。 @@ -210,8 +210,7 @@ ======== <li><font color=red size=5em>本研究では GCC-4.5 から GCC-4.6 へのアップデートを行った。</font></li> <li>この 2 つのバージョンを用いて生成したプログラムの速度比較を行った。</li> -<li>conv1: 加算と継続を交互に繰り返すプログラム</li> - +<li>conv1: 加算と継続を交互に繰り返すプログラム。指定した回数ループする。</li> <table width=100% border=1> <caption>各コンパイラにより生成されたプログラムの速度比較</caption> <tr> @@ -250,8 +249,8 @@ <td width=50%> <pre style="margin-left:5%"> void func_b(){ - A; - B; + X; + Y; } void func_a() { @@ -263,10 +262,10 @@ <td> <pre style="margin-left:5%"> void func_a() { - A; - B; - A; - B; + X; + Y; + X; + Y; } </pre> </td> @@ -277,7 +276,7 @@ --- -<h1>最適化の比較</h1> +<h1>最適化の比較(conv1)</h1> <table width=100% border=1> <caption><h3>それぞれの最適化にかかった conv1プログラムの挙動(引数 1)</h3></caption> <tr> @@ -333,7 +332,9 @@ CbC ======== -<li><font color=red size=5em>状態遷移記述をベースとしたより細かい単位でのプログラミングを実現する</font></li> + +状態遷移記述をベースとしたより細かい単位でのプログラミングを実現する +--------- <li>組込みソフト、Real-time処理、通信プロトコル記述、どれも状態遷移ベース</li> <li>現存する記述言語は状態遷移の記述に向いていない</li> <li>スタックが状態を隠蔽するため、分割しにくい、検証が難しい</li> @@ -341,8 +342,9 @@ 具体的な CbC の利用予定 --------- -- モデル検査 - Cerium の実装 +- 状態探索 + --- @@ -369,7 +371,24 @@ --- +引数の並びに上書きコピー +======== +<li>以下の呼び出しを行うと、スタックの書き換えがおこる</li> +<pre> +void funcA(int a, int b) { + funcB(b, a); +} +</pre> +<table width=100%> +<tr> +<td style="margin:auto; text-align:center;"> +<img src="./pix/cs_prog.png"> +</td> +</tr> +</table> + +--- jmp と call @@ -383,27 +402,6 @@ --- -conv1 プログラム -======== -<li>性能評価で用いた conv1 プログラムの C 版</li> -<pre style="width:5%;" border=1> -f0(int i) { - int k,j; - k = 3+i; - j = g0(i+3); - return k+4+j; -} -g0(int i) { - return h0(i+4)+i; -} -h0(int i) { - return i+4; -}</pre> -<li>性能評価はこのプログラムを CbC へと書き換えて行なっている。</li> - ---- - - CbC-GCC のアップデート手法 ======== @@ -455,6 +453,31 @@ --- + +conv1 プログラム +======== +<li>性能評価で用いた conv1 プログラムの C 版</li> +<pre style="width:5%;" border=1> +f0(int i) { + int k,j; + k = 3+i; + j = g0(i+3); + return k+4+j; +} +g0(int i) { + return h0(i+4)+i; +} +h0(int i) { + return i+4; +}</pre> +<li>性能評価はこのプログラムを CbC へと書き換えて行なっている。</li> +<li>引数 1 のプログラムは上のプログラムをただ CbC へと書き換えたもの</li> +<li>引数 2 と 3 のプログラムは手動で最適化を行なって CbC へと書き換えたもの</li> + + +--- + + conv1 プログラム ======== - conv1 プログラムでは計算と継続を交互に繰り返し行なう。 @@ -484,11 +507,11 @@ - _CbC_return、 _CbC_environment キーワードを使うことで使える。 - 以下の使い方の場合、戻値 1 を返す。 <pre> -__code c1(__code ret(int,void *),void *env) { +\_\_code c1(\_\_code ret(int,void *),void *env) { goto ret(1,env); } int main() { - goto c1(__return, __environment); + goto c1(\_\_return, \_\_environment); } </pre> @@ -498,77 +521,6 @@ --- -CbC 引数渡し -======== -<li>CbC では引数渡しにできるだけレジスタを用いるようにしている.</li> -<table border=1 width=100%> - <caption><small>fastcall属性有・無の実行速度</small></caption> - <tr> - <td width=50% style="text-align:center;">fastcall無し</td> - </tr> - <tr> - <td style="margin:auto; text-align:center;"> - <img src="./pix/linux_conv_nofastcall.png" style="height:15em;"> - </td> - </tr> - <tr> - <td width=50% style="text-align:center;">fastcall有り</td> - <tr> - <td> - <img src="./pix/linux_conv_fastcall.png" style="height:15em;"> - </td> - </tr> -</table> - - ---- - - - -引数の並びに上書きコピー -======== -<li>以下の呼び出しを行うと、スタックの書き換えがおこる</li> -<pre> -void funcA(int a, int b) { - funcB(b, a); -} -</pre> - -<table width=100%> -<tr> -<td style="margin:auto; text-align:center;"> -<img src="./pix/cs_prog.png"> -</td> -</tr> -</table> - - ---- - -最適化の比較 -======== - -<table width=100% border=1> - <caption>各コンパイラにより生成されたコードの速度比較</caption> - <tr> - <td style="margin:auto; text-align:center;"> - <img src="./pix/O3_conv1_linux.png" style="height:15em"> - </td> - <td> - <img src="./pix/O3_conv1_mac.png" style="height:15em"> - </td> - </tr> - <tr> - <td style="text-align:center;">x86/Linux</td> - <td style="text-align:center;">x86/OS X (10.7)</td> - </tr> -</table> - - - ---- - - 最適化の比較 ======== @@ -636,6 +588,28 @@ --- +最適化の比較 +======== + +<table width=100% border=1> + <caption>各コンパイラにより生成されたコードの速度比較</caption> + <tr> + <td style="margin:auto; text-align:center;"> + <img src="./pix/O3_conv1_linux.png" style="height:15em"> + </td> + <td> + <img src="./pix/O3_conv1_mac.png" style="height:15em"> + </td> + </tr> + <tr> + <td style="text-align:center;">x86/Linux</td> + <td style="text-align:center;">x86/OS X (10.7)</td> + </tr> +</table> + + + +--- @@ -645,3 +619,6 @@ + + +
--- a/presen/presentation.html Tue Feb 28 22:47:04 2012 +0900 +++ b/presen/presentation.html Wed Feb 29 07:02:44 2012 +0900 @@ -70,7 +70,7 @@ </aside> <aside class="page_number"> - 1/25 + 1/23 </aside> </footer> </div> @@ -109,7 +109,7 @@ </aside> <aside class="page_number"> - 2/25 + 2/23 </aside> </footer> </div> @@ -124,7 +124,7 @@ <section><h2>コードセグメント単位での記述と継続を基本としたプログラミング言語</h2> -<li>コーセグメント:CbC におけるプログラムの基本単位</li> +<li><font size=5em>コーセグメント:CbC におけるプログラムの基本単位</font></li> <ul> <li>C の関数よりも細かな単位</li> @@ -163,7 +163,7 @@ </aside> <aside class="page_number"> - 3/25 + 3/23 </aside> </footer> </div> @@ -222,7 +222,7 @@ </aside> <aside class="page_number"> - 4/25 + 4/23 </aside> </footer> </div> @@ -240,34 +240,34 @@ <caption>階乗を求める CbC のプログラム</caption> <td width=50%> <pre style="margin-left:5%"> -__code print_factorial(int prod) +<font color="blue">__code</font> print_factorial(int prod) { printf("factorial = %d\n",prod); exit(0); } -__code factorial0(int prod, int x) +<font color="blue">__code</font> factorial0(int prod, int x) { if ( x >= 1) { - goto factorial0(prod*x, x-1); + <font color="red">goto</font> factorial0(prod*x, x-1); }else{ - goto print_factorial(prod); + <font color="red">goto</font> print_factorial(prod); } } -__code factorial(int x) +<font color="blue">__code</font> factorial(int x) { - goto factorial0(1, x); + <font color="red">goto</font> factorial0(1, x); } int main(int argc, char **argv) { int i; i = atoi(argv[1]); - goto factorial(i); + <font color="red">goto</font> factorial(i); } </pre> </td> <td> -<li>__code によるコードセグメントの宣言</li> -<li>引数付きの goto でコードセグメントを呼び出すことができる</li> +<li><font color="blue">__code</font> によるコードセグメントの宣言</li> +<li>引数付きの <font color="red">goto</font> でコードセグメントを呼び出すことができる</li> <li>内部では call ではなく jmp 命令でコードセグメントの処理が遷移している</li> </td> </table></p></section> @@ -286,7 +286,7 @@ </aside> <aside class="page_number"> - 5/25 + 5/23 </aside> </footer> </div> @@ -326,7 +326,7 @@ </aside> <aside class="page_number"> - 6/25 + 6/23 </aside> </footer> </div> @@ -384,7 +384,7 @@ </aside> <aside class="page_number"> - 7/25 + 7/23 </aside> </footer> </div> @@ -400,13 +400,13 @@ <section><h2>末尾除去の条件をチェックする関数</h2> <ul> -<li>関数が末尾除去にかかる為には幾つか条件があり、その条件はある関数によってチェックされる。</li> -<li>その関数を元に、『コードセグメントは末尾除去』にかける専用の関数を用意していた。</li> +<li>関数(コードセグメント)が末尾除去にかかる為には幾つか条件があり、その条件はある関数によってチェックされる。</li> +<li>その関数を元に、『コードセグメントを末尾除去にかける』専用の関数を用意していた。</li> <li>しかしこの方法は、元になった関数が修正に合わせて専用の関数も修正を行う必要があった。</li> </ul> <h2>実装の修正とその利点</h2> <ul> -<li>しかし, 今回の実装でその関数を無くし, 末尾除去のフラグを強制的に立たせる実装に変更。</li> +<li>しかし 今回の実装でその関数を無くし, 末尾除去のフラグを強制的に立たせる実装に変更</li> <li>専用関数がなくなったことで、今後より楽なアップデートを行なっていくことができるようになった。</li> <li>また、コードセグメントへの継続が jmp ではなく call 命令で行われるバグがあったが修正できた。</li> </ul></section> @@ -425,7 +425,7 @@ </aside> <aside class="page_number"> - 8/25 + 8/23 </aside> </footer> </div> @@ -441,7 +441,7 @@ <section><p><li><font color=red size=5em>本研究では GCC-4.5 から GCC-4.6 へのアップデートを行った。</font></li> <li>この 2 つのバージョンを用いて生成したプログラムの速度比較を行った。</li> -<li>conv1: 加算と継続を交互に繰り返すプログラム</li></p> +<li>conv1: 加算と継続を交互に繰り返すプログラム。指定した回数ループする。</li> <table width=100% border=1> <caption>各コンパイラにより生成されたプログラムの速度比較</caption> <tr> @@ -457,12 +457,9 @@ <td style="text-align:center;">x86/OS X (10.7)</td> </tr> </table> - <li>Mac の GCC-4.5 では動かなかった 32bit のプログラムが GCC-4.6 では問題なく動いている。</li> - <li>引数 2、3 は手動で最適化をかけている。</li> - -<li>引数 1 の結果では 32bit, 64bit 共に GCC-4.6 の方が 1.5倍以上早い</li></section> +<li>引数 1 の結果では 32bit, 64bit 共に GCC-4.6 の方が 1.5倍以上早い</li></p></section> </div> <div class="presenter_notes"> @@ -478,7 +475,7 @@ </aside> <aside class="page_number"> - 9/25 + 9/23 </aside> </footer> </div> @@ -505,8 +502,8 @@ <td width=50%> <pre style="margin-left:5%"> void func_b(){ - A; - B; + X; + Y; } void func_a() { @@ -518,10 +515,10 @@ <td> <pre style="margin-left:5%"> void func_a() { - A; - B; - A; - B; + X; + Y; + X; + Y; } </pre> </td> @@ -543,7 +540,7 @@ </aside> <aside class="page_number"> - 10/25 + 10/23 </aside> </footer> </div> @@ -554,7 +551,7 @@ <div class="slide"> <div class="inner"> - <header><h1>最適化の比較</h1></header> + <header><h1>最適化の比較(conv1)</h1></header> <section><table width=100% border=1> @@ -596,7 +593,7 @@ </aside> <aside class="page_number"> - 11/25 + 11/23 </aside> </footer> </div> @@ -630,7 +627,7 @@ </aside> <aside class="page_number"> - 12/25 + 12/23 </aside> </footer> </div> @@ -670,7 +667,7 @@ </aside> <aside class="page_number"> - 13/25 + 13/23 </aside> </footer> </div> @@ -684,15 +681,15 @@ <header><h1>CbC</h1></header> - <section><p><li><font color=red size=5em>状態遷移記述をベースとしたより細かい単位でのプログラミングを実現する</font></li> -<li>組込みソフト、Real-time処理、通信プロトコル記述、どれも状態遷移ベース</li> + <section><h2>状態遷移記述をベースとしたより細かい単位でのプログラミングを実現する</h2> +<p><li>組込みソフト、Real-time処理、通信プロトコル記述、どれも状態遷移ベース</li> <li>現存する記述言語は状態遷移の記述に向いていない</li> <li>スタックが状態を隠蔽するため、分割しにくい、検証が難しい</li> <li>以上の問題を解決する言語として CbC は提案されている。</li></p> <h2>具体的な CbC の利用予定</h2> <ul> -<li>モデル検査</li> <li>Cerium の実装</li> +<li>状態探索</li> </ul></section> </div> @@ -709,7 +706,7 @@ </aside> <aside class="page_number"> - 14/25 + 14/23 </aside> </footer> </div> @@ -752,7 +749,49 @@ </aside> <aside class="page_number"> - 15/25 + 15/23 + </aside> + </footer> + </div> + </div> + + <!-- slide source: cbc.md --> + <div class="slide-wrapper"> + <div class="slide"> + <div class="inner"> + + <header><h1>引数の並びに上書きコピー</h1></header> + + + <section><p><li>以下の呼び出しを行うと、スタックの書き換えがおこる</li> +<pre> +void funcA(int a, int b) { + funcB(b, a); +} +</pre></p> +<table width=100%> +<tr> +<td style="margin:auto; text-align:center;"> +<img src="./pix/cs_prog.png"> +</td> +</tr> +</table></section> + + </div> + <div class="presenter_notes"> + <header><h1>Presenter Notes</h1></header> + <section> + + </section> + </div> + <footer> + + <aside class="source"> + Source: <a href="cbc.md">cbc.md</a> + </aside> + + <aside class="page_number"> + 16/23 </aside> </footer> </div> @@ -787,51 +826,7 @@ </aside> <aside class="page_number"> - 16/25 - </aside> - </footer> - </div> - </div> - - <!-- slide source: cbc.md --> - <div class="slide-wrapper"> - <div class="slide"> - <div class="inner"> - - <header><h1>conv1 プログラム</h1></header> - - - <section><p><li>性能評価で用いた conv1 プログラムの C 版</li> -<pre style="width:5%;" border=1> -f0(int i) { - int k,j; - k = 3+i; - j = g0(i+3); - return k+4+j; -} -g0(int i) { - return h0(i+4)+i; -} -h0(int i) { - return i+4; -}</pre> -<li>性能評価はこのプログラムを CbC へと書き換えて行なっている。</li></p></section> - - </div> - <div class="presenter_notes"> - <header><h1>Presenter Notes</h1></header> - <section> - - </section> - </div> - <footer> - - <aside class="source"> - Source: <a href="cbc.md">cbc.md</a> - </aside> - - <aside class="page_number"> - 17/25 + 17/23 </aside> </footer> </div> @@ -873,7 +868,7 @@ </aside> <aside class="page_number"> - 18/25 + 18/23 </aside> </footer> </div> @@ -922,7 +917,53 @@ </aside> <aside class="page_number"> - 19/25 + 19/23 + </aside> + </footer> + </div> + </div> + + <!-- slide source: cbc.md --> + <div class="slide-wrapper"> + <div class="slide"> + <div class="inner"> + + <header><h1>conv1 プログラム</h1></header> + + + <section><p><li>性能評価で用いた conv1 プログラムの C 版</li> +<pre style="width:5%;" border=1> +f0(int i) { + int k,j; + k = 3+i; + j = g0(i+3); + return k+4+j; +} +g0(int i) { + return h0(i+4)+i; +} +h0(int i) { + return i+4; +}</pre> +<li>性能評価はこのプログラムを CbC へと書き換えて行なっている。</li> +<li>引数 1 のプログラムは上のプログラムをただ CbC へと書き換えたもの</li> +<li>引数 2 と 3 のプログラムは手動で最適化を行なって CbC へと書き換えたもの</li></p></section> + + </div> + <div class="presenter_notes"> + <header><h1>Presenter Notes</h1></header> + <section> + + </section> + </div> + <footer> + + <aside class="source"> + Source: <a href="cbc.md">cbc.md</a> + </aside> + + <aside class="page_number"> + 20/23 </aside> </footer> </div> @@ -973,7 +1014,7 @@ </aside> <aside class="page_number"> - 20/25 + 21/23 </aside> </footer> </div> @@ -993,11 +1034,11 @@ <li> <p>以下の使い方の場合、戻値 1 を返す。 <pre> -<strong>code c1(</strong>code ret(int,void <em>),void </em>env) { +__code c1(__code ret(int,void <em>),void </em>env) { goto ret(1,env); } int main() { - goto c1(<strong>return, </strong>environment); + goto c1(__return, __environment); } </pre></p> </li> @@ -1020,141 +1061,7 @@ </aside> <aside class="page_number"> - 21/25 - </aside> - </footer> - </div> - </div> - - <!-- slide source: cbc.md --> - <div class="slide-wrapper"> - <div class="slide"> - <div class="inner"> - - <header><h1>CbC 引数渡し</h1></header> - - - <section><p><li>CbC では引数渡しにできるだけレジスタを用いるようにしている.</li> -<table border=1 width=100%> - <caption><small>fastcall属性有・無の実行速度</small></caption> - <tr> - <td width=50% style="text-align:center;">fastcall無し</td> - </tr> - <tr> - <td style="margin:auto; text-align:center;"> - <img src="./pix/linux_conv_nofastcall.png" style="height:15em;"> - </td> - </tr> - <tr> - <td width=50% style="text-align:center;">fastcall有り</td> - <tr> - <td> - <img src="./pix/linux_conv_fastcall.png" style="height:15em;"> - </td> - </tr> -</table></p></section> - - </div> - <div class="presenter_notes"> - <header><h1>Presenter Notes</h1></header> - <section> - - </section> - </div> - <footer> - - <aside class="source"> - Source: <a href="cbc.md">cbc.md</a> - </aside> - - <aside class="page_number"> - 22/25 - </aside> - </footer> - </div> - </div> - - <!-- slide source: cbc.md --> - <div class="slide-wrapper"> - <div class="slide"> - <div class="inner"> - - <header><h1>引数の並びに上書きコピー</h1></header> - - - <section><p><li>以下の呼び出しを行うと、スタックの書き換えがおこる</li> -<pre> -void funcA(int a, int b) { - funcB(b, a); -} -</pre></p> -<table width=100%> -<tr> -<td style="margin:auto; text-align:center;"> -<img src="./pix/cs_prog.png"> -</td> -</tr> -</table></section> - - </div> - <div class="presenter_notes"> - <header><h1>Presenter Notes</h1></header> - <section> - - </section> - </div> - <footer> - - <aside class="source"> - Source: <a href="cbc.md">cbc.md</a> - </aside> - - <aside class="page_number"> - 23/25 - </aside> - </footer> - </div> - </div> - - <!-- slide source: cbc.md --> - <div class="slide-wrapper"> - <div class="slide"> - <div class="inner"> - - <header><h1>最適化の比較</h1></header> - - - <section><table width=100% border=1> - <caption>各コンパイラにより生成されたコードの速度比較</caption> - <tr> - <td style="margin:auto; text-align:center;"> - <img src="./pix/O3_conv1_linux.png" style="height:15em"> - </td> - <td> - <img src="./pix/O3_conv1_mac.png" style="height:15em"> - </td> - </tr> - <tr> - <td style="text-align:center;">x86/Linux</td> - <td style="text-align:center;">x86/OS X (10.7)</td> - </tr> -</table></section> - - </div> - <div class="presenter_notes"> - <header><h1>Presenter Notes</h1></header> - <section> - - </section> - </div> - <footer> - - <aside class="source"> - Source: <a href="cbc.md">cbc.md</a> - </aside> - - <aside class="page_number"> - 24/25 + 22/23 </aside> </footer> </div> @@ -1228,7 +1135,26 @@ <li>保存していた関数ポインタへの継続はインライン展開は行われない</li> --> ----</section> +--- + +最適化の比較 +======== + +<table width=100% border=1> + <caption>各コンパイラにより生成されたコードの速度比較</caption> + <tr> + <td style="margin:auto; text-align:center;"> + <img src="./pix/O3_conv1_linux.png" style="height:15em"> + </td> + <td> + <img src="./pix/O3_conv1_mac.png" style="height:15em"> + </td> + </tr> + <tr> + <td style="text-align:center;">x86/Linux</td> + <td style="text-align:center;">x86/OS X (10.7)</td> + </tr> +</table></section> </div> <div class="presenter_notes"> @@ -1244,7 +1170,29 @@ </aside> <aside class="page_number"> - 25/25 + 23/23 + </aside> + </footer> + </div> + </div> + + <!-- slide source: --> + <div class="slide-wrapper"> + <div class="slide"> + <div class="inner"> + + + </div> + <div class="presenter_notes"> + <header><h1>Presenter Notes</h1></header> + <section> + + </section> + </div> + <footer> + + <aside class="page_number"> + /23 </aside> </footer> </div> @@ -1320,7 +1268,7 @@ <tr id="toc-row-11"> - <th><a href="#slide11">最適化の比較</a></th> + <th><a href="#slide11">最適化の比較(conv1)</a></th> <td><a href="#slide11">11</a></td> </tr> @@ -1350,13 +1298,13 @@ <tr id="toc-row-16"> - <th><a href="#slide16">jmp と call</a></th> + <th><a href="#slide16">引数の並びに上書きコピー</a></th> <td><a href="#slide16">16</a></td> </tr> <tr id="toc-row-17"> - <th><a href="#slide17">conv1 プログラム</a></th> + <th><a href="#slide17">jmp と call</a></th> <td><a href="#slide17">17</a></td> </tr> @@ -1380,35 +1328,23 @@ <tr id="toc-row-21"> - <th><a href="#slide21">CbC の実装: 環境付き継続</a></th> + <th><a href="#slide21">conv1 プログラム</a></th> <td><a href="#slide21">21</a></td> </tr> <tr id="toc-row-22"> - <th><a href="#slide22">CbC 引数渡し</a></th> + <th><a href="#slide22">CbC の実装: 環境付き継続</a></th> <td><a href="#slide22">22</a></td> </tr> <tr id="toc-row-23"> - <th><a href="#slide23">引数の並びに上書きコピー</a></th> + <th><a href="#slide23">最適化の比較</a></th> <td><a href="#slide23">23</a></td> </tr> - <tr id="toc-row-24"> - <th><a href="#slide24">最適化の比較</a></th> - <td><a href="#slide24">24</a></td> - </tr> - - - <tr id="toc-row-25"> - <th><a href="#slide25">最適化の比較</a></th> - <td><a href="#slide25">25</a></td> - </tr> - - </table> </div>