Mercurial > hg > Papers > 2012 > nobu-thesis
changeset 17:0f406370c241 draft
commit
author | Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 24 Feb 2012 18:54:13 +0900 |
parents | 9ec54b29df7c |
children | d276144b815c |
files | paper/figure/conv1_for_resume.pdf paper/resume.tex |
diffstat | 2 files changed, 9 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/paper/resume.tex Fri Feb 24 14:46:26 2012 +0900 +++ b/paper/resume.tex Fri Feb 24 18:54:13 2012 +0900 @@ -40,7 +40,7 @@ CbC のコンパイラとしては Micro-C 版と GCC ベースのコンパイラ(以下 CbC-GCC) が開発されている. しかし, CbC-GCC はいくつかバグがあり機能の修正の余地があった. また, GCC の最新の機能を使用する為にも CbC-GCC は GCC のアップデートに合わせていく必要がある. -本研究では, GCC-4.5 をベースとしていた CbC-GCC を GCC-4.6 へのアップデートをすると共に機能の修正 +本研究では, GCC-4.5 をベースとしていた CbC-GCC を GCC-4.6 へのアップデートをすると共に実装の修正 を行う. %本研究では, GCC-4.5 をベースとしていた CbC-GCC を GCC-4.6 へのアップデートを行い, Intel64 に対応するとともに, CbC の拡張を行う. @@ -60,8 +60,8 @@ \section{GCC-4.6 への実装} -CbC の環境を保持しない継続は軽量継続と呼ばれる. -GCC における軽量継続は Tail Call Ellimination (末尾除去)を強制することで実装する. +CbC の継続は, 環境を保持しない為軽量継続と呼ばれる. +GCC における軽量継続は Tail Call Ellimination (末尾除去)を強制することで実装されている. これにより, コードセグメント間の移動を, call ではなく jmp 命令で行う. この為コードセグメントからのは戻値は無くなる. 図\ref{fig:continue}は Tail Call Elimination によるプログラムの処理の流れを表す. @@ -78,7 +78,7 @@ 等といった幾つかの条件をクリアしなければならない. これまでの実装ではコードセグメントに条件をクリアさせる為, 専用の関数を用意していた. しかし今回の実装ではその関数を廃止し, 末尾除去にかかるフラグを落とさせない -コードを追加することで Tail Call Elimination の条件をクリアさせるようになった. +コードを追加することで Tail Call Elimination の条件をかわすようになった. これにより GCC のアップデート時に伴う専用関数の修正が不要となり, 楽な管理が行えるようになった. \subsection{環境付き継続} @@ -121,7 +121,7 @@ \subsubsection{``\_\_rectype'', ``selftype'' 構文} %\verb+__rectype+キーワードはリカーシブタイプを宣言する時に使われる. 通常, 関数定義において引数の中に自分自身を指す関数ポインタを入れることはできない. -そこで, \verb+__rectype+を使うことで以下の用な宣言が行うことができる. +そこで, \verb+__rectype+を使うことで以下の様な宣言が行うことができる. また, 構造体の宣言時に宣言中の構造体を指す``selftype'' 構文の追加も行った. 以下の様な宣言が行えるようになった. この時\verb+__rectype+は funcPtr を指し, selftype は struct node を指す. @@ -159,18 +159,17 @@ まず, Micro-C 版より GCC 版コンパイラの方が結果が良いことが確認できる. 次に GCC-4.5 と GCC-4.6 を比較してみる. 手動で最適化を行なっている引数 2 と 3 の時は余り差は無い. -だが, 引数 1 の時は GCC-4.6 版が GCC-4.5 に比べて 1.67 倍程早い. +だが, 引数 1 の時は GCC-4.6 版が 32 bit, 64 bit 共に GCC-4.5 に比べて 1.5 倍以上早い. アセンブラの比較も行なってみると, GCC-4.6 版の方では演算の結果が求められていて 必要最小限の継続だけを行なうプログラムとなっていた. -アセンブラとこの結果から GCC-4.5 に比べ GCC-4.6 の最適化が修正されよりよくなっているのが確認できた. +この結果から GCC-4.5 に比べ GCC-4.6 の最適化が修正されよりよくなっているのが確認できた. \section{今後の課題} 今回, CbC コンパイラを GCC-4.6 へとアップデートを行った. -アップデートに伴い実装の修正と Intel64 bit への対応を行った. -また, CbC の記述に便利な新たな構文の追加も行うことができた. +アップデートに伴い実装の修正を行い, また CbC の記述に便利な新たな構文の追加も行うことができた. GCC 版 CbC コンパイラは細かい実装の除けば, 以後 GCC のアップデートに合わせていくだけとなる. -CbC コンパイラの今後としては LLVM への実装, もしくは Google go 言語での実装の検討を行なっていく予定である. +CbC コンパイラの今後としては LLVM への実装, もしくは Google go 言語での実装の検討も行なっていく予定である. %今後は本稿で述べた CbC-GCC の問題点を改善していく必要がある. %また,CbC を GCC だけでなく LLVM での実装や,C 言語以外の言語への変更も検討していく.