Mercurial > hg > Papers > 2011 > nobu-prosym
diff presen/index.html @ 58:97457764428f
modify
author | Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 26 Dec 2011 07:55:41 +0900 |
parents | ce844f6c504d |
children | 6ef99d3e66b2 |
line wrap: on
line diff
--- a/presen/index.html Sun Dec 25 04:28:23 2011 +0900 +++ b/presen/index.html Mon Dec 26 07:55:41 2011 +0900 @@ -87,14 +87,14 @@ <h1>目的と背景(1)</h1> <li>当研究室ではコードセグメント単位で記述するプログラミング言語Continuation based C (以下CbC)という言語を開発している。</li> <li>コードセグメントは並列実行の単位として使うことができ、プログラムの正しさを示す単位としても使用することができる。</li> - <li class="incremental">コードセグメントにより Many Core での並列実行を高い性能と高い信頼性で実現することができると考える。</li> + <li>Many Core での並列実行を高い性能と高い信頼性で実現することができると考える。</li> </div> <!-- PAGE --> <div class="slide"> <h1>目的と背景(2)</h1> - <li>CbC のコンパイラは2008年に GCC 4.4 をベースとしたコンパイラが開発された。</li> + <li>CbC のコンパイラは2001年に Micro-C 版、2008年には GCC 4.4 をベースとしたコンパイラが開発された。</li> <li>GCC をベースとした CbC コンパイラは、修正・追加された最適化の機能を使用する為に、 GCC のアップデートに合わせ変更する必要がある。</li> - <li class="incremental">本研究ではCbC コンパイラを GCC-4.6 へとアップデートを行い、Intel64 への対応するとともに CbC の拡張を行う。 </li> + <li>本研究ではCbC コンパイラを GCC-4.6 へとアップデートを行った。 </li> </div> <!-- PAGE --> <div class="slide"> @@ -102,7 +102,9 @@ <ol> <li>CbC の紹介</li> <li>GCC でのコンパイルの流れ</li> - <li>CbC の実装</li> + <font color="red"> + <li>CbC の実装</li> + </font> <!-- <ul> <li>Tail Call Elimination</li> @@ -128,6 +130,25 @@ </div> <!-- PAGE --> <div class="slide"> + <h1>Continuation Based C</h1> + <h2>継続:現在の処理を実行していく為の情報</h2> + <!-- + <li>Cでは関数呼び出しの後、呼び出し元の環境に復帰する必要がある。</li> + --> + <li>Cにおいての継続</li> + <ul> + <li>続く命令のアドレス</li> + <li>命令に必要なデータ</li> + <li>スタックに積まれている値(環境)</li> + </ul> + <li>CbC継続(軽量継続)</li> + <ul> + <li>続く命令とその命令に必要なデータ</li> + <li></li> + </ul> + </div> + <!-- PAGE --> + <div class="slide"> <h1>Continuation based C </h1> <small> <table width=100% > @@ -139,6 +160,7 @@ printf("factorial = %d\n",prod); exit(0); } + __code factorial0(int prod, int x) { if ( x >= 1) { goto factorial0(prod*x, x-1); @@ -153,6 +175,7 @@ __code factorial(int x) { goto factorial0(1, x); } + int main(int argc, char **argv) { int i; i = atoi(argv[1]); @@ -174,7 +197,6 @@ <p style=" margin-right:auto; margin-left:auto;"> <img class="scale" src="./pix/cs_stack.png" style="height: 7em;"> </p> - <li class="incremental">より高度に最適化されたプログラミングが可能になる。</li> </div> <!-- PAGE --> <div class="slide"> @@ -239,7 +261,7 @@ </td> <td> <pre> -goto factorial0(1, x); +factorial0(1, x); return; </pre> </td> @@ -248,16 +270,32 @@ </div> <!-- PAGE --> <div class="slide"> - <h1>fastcall属性の付与</h1> + <h1>引数渡し</h1> + <li>当初、GCCを使ってコンパイルしたCbCのプログラムはMicro-C版に速度面で勝てなかった。</li> + <ul> + <li>Micro-Cでは関数呼び出しの際にできるだけレジスタを使うようにしていたため。</li> + </ul> + <li class="incremental">そこで、GCC版CbCコンパイラの引数渡しもできるだけレジスタで行うことに</li> + </div> + <!-- PAGE --> + <div class="slide"> + <h1>引数渡し(fastcall属性の付与)</h1> <li>i386 において関数呼び出しの際、引数渡しをできるだけレジスタを用いるGCCの拡張機能。</li> - <li>コードセグメントは処理が細かい為、継続の回数が多くなる。引数をレジスタ渡しにすることで速度向上を狙う。</li> + <li>__code で宣言された関数は自動でfastcall属性が付与される。</li> + <small> <pre> if(!TARGET_64BIT) { attrs = build_tree_list (get_identifier("fastcall"), NULL_TREE); declspecs_add_attrs(specs, attrs); } </pre> - <li>Intel64 に対してはfastcallは標準でつくようになっている。</li> + </small> + <p><small>Intel64 ではレジスタが増えている為、fastcallは標準でつくようになっている。</small></p> + </div> + <!-- PAGE --> + <div class="slide"> + <h1></h1> + <li></li> </div> <!-- PAGE --> <div class="slide">