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
Binary file prepaper/finalpre.pdf has changed
--- 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}