Mercurial > hg > Papers > 2011 > nobu-prosym
changeset 77:2697e09f6ce9
modify
author | Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 03 Jan 2012 22:11:32 +0900 |
parents | a4d16779fd1e |
children | 6465e96ba272 |
files | presen/index.html |
diffstat | 1 files changed, 46 insertions(+), 56 deletions(-) [+] |
line wrap: on
line diff
--- a/presen/index.html Tue Jan 03 21:42:31 2012 +0900 +++ b/presen/index.html Tue Jan 03 22:11:32 2012 +0900 @@ -321,7 +321,7 @@ </div> <!-- PAGE --> <div class="slide"> - <h1>CbCの実装:シンタックスの追加</h1> + <h1>CbCの実装:__codeシンタックスの追加</h1> <ul> <li>__code キーワードでのコードセグメントの宣言</li> <ul> @@ -364,19 +364,14 @@ </div> <!-- PAGE --> <div class="slide"> - <h1>CbCの実装:シンタックスの追加</h1> + <h1>CbCの実装:gotoシンタックスの追加</h1> <li>goto によるコードセグメントへの継続</li> <ul> <li>通常の goto に加え、コードセグメントへ継続する処理を追加。</li> <li>コードセグメントへのgotoの後に、returnの処理を自動で追加。</li> </ul> - <li class="incremental">追加したgotoシンタックスの実際のソースは次のようになる。</li> - </div> - <!-- PAGE --> - <div class="slide"> - <h1>CbCの実装:シンタックスの追加</h1> - <h2>gotoシンタックスの追加</h2> - <pre class="srcbox" style="font-size:25px; height:17em;"> + <li><small>追加したgotoシンタックスの実際のソースは次のようになる。</small></li> + <pre class="srcbox" style="font-size:25px; height:16em;"> case RID_GOTO: c_parser_consume_token (parser); if ( c_parser_next_token_is (parser, CPP_NAME) @@ -408,29 +403,24 @@ stmt = c_finish_return(loc, NULL_TREE, NULL_TREE); } </pre> - <small> - <li>cbc_replace_arguments関数は引数のデータを一時的な変数へ避難させる。</li> - <li class="incremental">CALL_EXPR_TAILCALLマクロでtail callフラグを立てる。</li> - <li class="incremental">最後にc_finish_return関数によりreturn文を生成している。</li> - </small> </div> <!-- PAGE --> <div class="slide"> - <h1>CbCの実装:シンタックスの追加</h1> - <h2>gotoシンタックスの追加</h2> + <h1>CbCの実装:gotoシンタックスの追加</h1> <ul> - <li>tail callフラグを立てることで、関数呼び出しに末尾除去(末尾最適化)をかけることができる。</li> - <li>最後のリターン文生成も、末尾除去にかける為に必要な処理。</li> + <small> + <li>cbc_replace_arguments関数は引数のデータを一時的な変数へ避難させる。</li> + <li>CALL_EXPR_TAILCALLマクロでtail callフラグを立てる。</li> + <li>最後にc_finish_return関数によりreturn文を生成している。</li> + </small> </ul> <table border=1 width=100%> <!-- <caption><small>return 自動生成</small></caption> --> <tr class="center"> - <small> - <td>実際のコード </td> - <td>GCC 内で処理されるコード</td> - </small> + <td><small>実際のコード</small></td> + <td><small>GCC内で処理されるコード</small></td> </tr> <tr class="srctr"> <td> @@ -454,9 +444,10 @@ </td> </tr> </table> -<!-- - <li>末尾最適化(末尾除去)については後ほど詳しく説明する。</li> ---> + <ul> + <li><small>tail callフラグを立てることで、関数呼び出しに末尾除去(末尾最適化)をかけることができる。</small></li> + <li><small>最後のリターン文生成も、末尾除去にかける為に必要な処理。</small></li> + </ul> </div> <!-- PAGE --> <div class="slide"> @@ -729,6 +720,7 @@ </ul> </div> <!-- PAGE --> +<!-- <div class="slide"> <h1>CbCの実装</h1> <li>CbCの基本機能を実現する為の実装は以上の2つになる。</li> @@ -738,6 +730,7 @@ </ul> <li class="incremental">ここからはCbCの機能の拡張になる。</li> </div> +--> <!-- PAGE --> <!-- <div class="slide"> @@ -810,7 +803,7 @@ <td>0<br>(stackを使用)</td> </tr> <tr> - <td>x86_64</td> + <td>x64</td> <td>6</td> <td>8</td> <td>8</td> @@ -839,7 +832,7 @@ </small> </td> </table> - <p><small>__environmentキーワードは関数の環境を保持する。</small></p> + <p><small>__environmentキーワードは関数の環境を保持する(Micro-Cの場合)。</small></p> </div> <!-- PAGE --> <div class="slide"> @@ -850,7 +843,7 @@ <table border=1 width=100%> <tr> <td><small>生成しているコード</small></td> - <td><small>生成する為のコード</small></td> + <td><small>生成されるTree</small></td> </tr> <tr class="srctr"> <td width=50% class="srctd"> @@ -980,28 +973,24 @@ <!-- PAGE --> <div class="slide"> <h1>環境付き継続:実装の問題</h1> - <li>クロージャでの実装</li> <ul> - <li>クロージャにしてスタックに値を確保する。</li> - <li></li> - </ul> - <li>問題点</li> - <ul> - <li class="incremental">しかしCbCではスタックの値は破棄されていく。</li> - <li class="incremental">その為スタックに値を確保するのは好ましくない。</li> + <li>クロージャでの実装の問題点:</li> +<!-- + <ul><li>クロージャにしてスタックに値を確保する。</li></ul> +--> + <ul> + <li >CbCでは継続によりスタックの値は破棄されていく。</li> + <li >クロージャにしたコードが破棄される可能性がある。</li> </ul> - </div> - <!-- PAGE --> - <div class="slide"> - <h1>環境付き継続:実装の問題</h1> - <li>staticでの実装</li> + <br> + <li>staticでの実装の問題点:</li> +<!-- + <ul><li>静的に値を確保することでスタック破棄の影響を受けない。</li></ul> +--> <ul> - <li>静的に値を確保することでスタック破棄の影響を受けない。</li> + <li >マルチスレッドのプログラムに対応できない。</li> + <li >値を返し切る前に別スレッドによって値が書き換えられる可能性がある。</li> </ul> - <li>問題点</li> - <ul> - <li class="incremental">マルチスレッドのプログラムに対応できない。</li> - <li class="incremental">値を返し切る前に別スレッドによって値が書き換えられる可能性がある。</li> </ul> </div> <!-- PAGE --> @@ -1013,7 +1002,7 @@ </ul> <li>現在はこの方法で実装を行なっている。</li> <li>しかし、最適化にかけると正しい値が返ってこない。 - <br>(恐らくTreeの生成の部分が間違っている。)</li> + <br>(最適化によりコードが削除されている...?)</li> </div> <!-- PAGE --> <div class="slide"> @@ -1049,25 +1038,26 @@ <!-- PAGE --> <div class="slide"> <h1>まとめ</h1> - <ul> - <li>今回GCC版CbCコンパイラのアップデートを行った。</li> - <li>TCEにかかる判定の部分と環境付き継続の実装の修正を行った。 - <br>おかげで、以前より楽な管理ができる実装にすることができた。</li> - <li>後は環境付き継続の最適化の問題の修正とselftypeの実装を行う。</li> - <li>全ての実装を終えたらGCC版CbCコンパイラの実装はアップデートを行なっていくだけとなる。</li> - </ul> + <ul> + <li>今回GCC版CbCコンパイラのアップデートを行った。</li> + <li>TCEにかかる判定の部分と環境付き継続の実装の修正を行った。 + <br>おかげで、以前より楽な管理ができる実装にすることができた。</li> + <li>後は環境付き継続の最適化の問題の修正とselftypeの実装を行う。</li> + <li>全ての実装を終えたらGCC版CbCコンパイラの実装はアップデートを行なっていくだけとなる。</li> + </ul> </div> <!-- PAGE --> <div class="slide"> <h1>今後の予定</h1> <ul> - <li>CbCを用いたプログラムの作成</li> + <li>CbCを用いたプログラムの作成</li> <ul> <li>CbCによるタスクマネージャの作成</li> </ul> <li>llvmへのCbCの実装</li> </ul> - </div> + <li>ご清聴ありがとうございました。</li> + </div> <!-- PAGE --> <div class="slide"> <h1>CbCの機能の拡張:__rectype の実装</h1>