Mercurial > hg > Papers > 2019 > anatofuz-thesis
changeset 97:28030986f575
update
author | anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 19 Feb 2019 15:34:54 +0900 |
parents | f12222e30043 |
children | 43ef9f088e45 |
files | prepaper/finalpre.pdf prepaper/finalpre.tex |
diffstat | 2 files changed, 12 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/prepaper/finalpre.tex Tue Feb 19 15:18:18 2019 +0900 +++ b/prepaper/finalpre.tex Tue Feb 19 15:34:54 2019 +0900 @@ -65,23 +65,27 @@ MoarVM is going to implemented in C language, it can be rewritten in CbC. In this thesis, consider rewriting the instruction dispatch part of MoarVM with CbC. -We successfully MoarVM writtern in CbClang. -CbC is faster than Original MoarVM has CPU cash. +We successfully writtern MoarVM in CbC. +When an instruction executed by CbC enters the CPU cache, it runs faster than the original MoarVM. \end{onecolabstract}] \thispagestyle{fancy} \section{Perl6の現在の実装} -現在開発が進んでいるプログラミング言語 Perl6 は、 入力されたソースコードを複数の仮想機械で実行可能なバイトコードにコンパイルする。 -仮想機械はPerl6専用のVMである、 MoarVMと、 JVMが選択可能である。 -MoarVMで動作する主流なPerl6の実装に、 Rakudoがある。 +現在開発が進んでいるプログラミング言語にPerl6がある。 +Perl6は、 入力されたソースコードを複数の仮想機械で実行可能なバイトコードにコンパイルする。 +コンパイルされたバイトコードは、 Perl6専用のVMであるMoarVMやJavaVMが評価する。 +MoarVMで動作する主流なPerl6の実装に、Rakudoがある。 -Rakudo実装のPerl6は、 他スクリプト言語と比較すると、 実行速度が低速である。 -また、 MoarVMの実装が巨大なcase文が使用されており、 モジュール化が行われていない。 +RakudoそのものはPerl6のサブセットであるNQPで実装されている。 +RakudoやNQPが動作するMoarVMはC言語で実装されている。 バイトコードから仮想機械を動作させる際、 バイトコード中のバイト列から、 実行する命令の処理を取得する必要がある。 +この部分の実装が巨大なcase文やラベルgotoが使用されており、 モジュール化が行われていない。 +モジュール化を行うことで、 それぞれに対して最適化を行うことが可能となる。 +このモジュール化では、 Cの関数より小さな単位であるCbCが適していると考えられる。 +その為、 本研究では、 MoarVMの命令対応部分のモジュール化の検討を行う。 %今後この部分を改善し、 速度向上をめに、 命令そのものを巨大なcase文から分離し、 モジュール化するのが望ましい。 -%その為、 本研究では、 MoarVMの命令対応部分のモジュール化の検討を行う。 \section{CbC} Perl6処理系の改良には、 gccとLLVM/Clang上に実装した、 Continuation based C(CbC)を用いる。 @@ -125,7 +129,6 @@ この一連の処理を命令コードのディスパッチと呼ぶ。 命令コードの実行の中では、 現在のMoarVMのレジスタであるreg\_baseやスレッドごとの環境である構造体tcなどを参照する。 この方法の問題点として、 巨大なcase文に変換されてしまう事から、 命令に対応する処理のモジュール化が出来ない。 -ディスパッチ部分の処理が都度走る為に、 低速になる。 ラベルにbreak pointを設定できない為に、 デバッグし辛いなどが挙げられる。 \lstinputlisting[label=origdis, caption=MoarVM内のインタプリタのディスパッチ]{src/dispatch.c}