view paper/conclusion.tex @ 11:2d9b3ad3e524

result
author Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
date Sun, 14 Feb 2016 05:01:15 +0900
parents 68928e796ed8
children 3afb4bfe1100
line wrap: on
line source

\chapter{結論} \label{chapter:conclusion}
本研究では Continuation based C (CbC) の LLVM clang ベースのコンパイラの改良を行った.

CbC は code segment を基本単位として用いる言語であり, 並列フレームワーク Gears OS の実装にも用いている.

LLVM clang ベースの CbC コンパイラは 2014 年の研究によって開発された. 今回の研究では LLVM builtin の setjmp, longjmp を用いることによる環境付き継続の改善, omit leaf frame pointer を強制することによるさらなる最適化の付加, プロトタイプ宣言の自動化を行った.

また, Gears OS をサポートするためのスクリプトも作成し, data segment, meta code segment を利用する CbC の記述量を減らすことが出来た.

環境付き継続の速度計測では, 元のものの 7 倍近い速度を出すことに成功し, アセンブリコードを直接生成する高速な Micro-C のものと比較しても殆ど差がなくなった.

C との比較でも良好な結果が得られ, スタックポインタ, フレームポインタの操作の最適化, 除去が速度向上に繋がることが確認できた.

\section{今後の課題}
今回の改良により環境付き継続を大幅に高速化することが出来たが, アセンブリコードを直接生成できる builtin 関数を実装し, それを利用することでさらなる高速化を行えることがわかった. ただしこの場合各アーキテクチャ毎に対応しなければならない, 最適化が適切にかかるようにする必要があるという難点がある. しかし今回実装した環境付き継続でも十分な速度は出せているので, 未対応のものに対しては builtin setjmp, longjmp を用いるという対応でも良いだろう. 

また, 今回は提案した構文に柔軟に対応するために Gears OS 向けの構文を python スクリプトを用いてサポートしたが, これらの機能をコンパイラ内部に実装し, Gears OS のコードを直接コンパイルできるようにする必要がある. この時 data segment の signature を利用できるようにする構文も実装するのがよいだろう.

前述したとおり CbC では code segment に tail call elimination を強制することで軽量継続を実現しているが, 最適化レベルによっては強制に失敗する例があることが判明している. 最適化と軽量継続を両立する改善が必要である. 

その他, 現在 CbC は C 言語を基に作られているため C コンパイラを利用できるという利点はあるものの, C の構文に縛られているという欠点もある. そのため C に依存しない code segment, data segment を用いる新しいプログラミング言語の開発の検討も課題の一つである.