# HG changeset patch # User anatofuz # Date 1550478279 -32400 # Node ID e6e2f606c68d1146c767d00ff58d01843e22d4a0 # Parent 47bfecf6ae6b021a9eb67c3ffad9d84fb2de1c2a update diff -r 47bfecf6ae6b -r e6e2f606c68d paper/chapter5.tex --- a/paper/chapter5.tex Mon Feb 18 17:15:36 2019 +0900 +++ b/paper/chapter5.tex Mon Feb 18 17:24:39 2019 +0900 @@ -40,7 +40,7 @@ \lstinputlisting[frame=lrbt, label=incre_nqp, caption=インクリメントを繰り返すNQPのサンプルコード]{./codes/incre.nqp} -複数回計測を行った結果を表に示す。 +複数回計測を行った結果を、 それぞれ表\ref{table:cbc}と表\ref{table:cbc_loop}に示す。 \begin{table}[tbp] \caption{フィボナッチ数列を求める例題} @@ -66,8 +66,11 @@ \end{tabular} \end{table} +結果から、 再帰呼び出しを多用しているフィボナッチ数列を求める例題では、 オリジナルのVMより低速なパフォーマンスが得られた。 CbCMoarVMでは現在モジュール化は行っているが、 具体的な速度上昇に対する実装は行っていない。 - +その為、 通常のMoarVMより低速になる事を想定していたが、 表\ref{table:cbc_loop}に示すように、 単純ループを求める場合は高速化した。 +これはループ文を利用する際に実行される処理が、 CPUのキャッシュに収まったために高速化したと考えられる。 +この事から、CbCMoarVMでは、 CPUキャッシュに命令を乗せる事が可能であれば、 現在の状況でもMoarVMよりパフォーマンスが向上する利点がある。 \section{Threaded Code} @@ -86,10 +89,7 @@ \lstinputlisting[frame=lrbt, label=cbc_sync, caption=CbCMoarVMのデータ同期]{./codes/sync.c} -また、 CbCコンパイラが一般的に使われておらず、 CbCコンパイラのバグ修正や、 gcc、 llvm/clang のバージョン追従を行っていく必要がある。 -CbCコンパイラは、 末尾再帰(tail call)の強制を行っているが、 MoarVMなどの巨大なプロジェクト上では、 コンパイル時に強制させる際の処理の実装が困難でもある。 -これに伴って、 CodeGearでの不要なスタック操作命令を完全に排除できていない為、 CbCの利点が損なわれている箇所が存在する。 - +現在CbCコンパイラでは、 CodeGearでの不要なスタック操作命令を完全に排除できていない為、 CbCの利点が損なわれている箇所が存在する。 CbCからC言語レベルの処理に戻る際は環境付き継続を行う必要があるケースが有り、 この実装を行うためにコードの量や複雑さが高まってしまうとも考えられる。 CbCMoarVMそのものも、 MoarVMの実装に手を加えている為、 MoarVMのアップデートに追従する必要がある。 diff -r 47bfecf6ae6b -r e6e2f606c68d paper/main.pdf Binary file paper/main.pdf has changed