Mercurial > hg > Papers > 2019 > anatofuz-thesis
changeset 95:77fb6e9e3c08
update
author | anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 19 Feb 2019 15:09:55 +0900 |
parents | 19df48819b8d |
children | f12222e30043 |
files | presen/slide.html presen/slide.md presen/slide.pdf.html |
diffstat | 3 files changed, 137 insertions(+), 108 deletions(-) [+] |
line wrap: on
line diff
--- a/presen/slide.html Tue Feb 19 15:02:16 2019 +0900 +++ b/presen/slide.html Tue Feb 19 15:09:55 2019 +0900 @@ -387,12 +387,23 @@ <div class='slide'> <!-- _S9SLIDE_ --> -<h2 id="cbcmoarvmのバイトコードディスパッチ">CbCMoarVMのバイトコードディスパッチ</h2> +<h2 id="cbcでの変換">CbCでの変換</h2> <ul> <li>CbCのCodeGearは関数よりも小さな単位である</li> <li>その為、 従来は関数化出来なかった単位をCodeGearに変換する事が出来る</li> <li>CbCをMoarVMに適応すると, ラベルなどで制御していた命令に対応する処理をCodeGearで記述する事が可能である</li> +</ul> + + + +</div> + +<div class='slide'> + <!-- _S9SLIDE_ --> +<h2 id="cbcmoarvmのバイトコードディスパッチ">CbCMoarVMのバイトコードディスパッチ</h2> + +<ul> <li>オリジナルでは, マクロ <code>NEXT</code> が担当していた, 次のバイトコードへの移動は, NEXT相当のCodeGear <code>cbc_next</code>で処理を行う</li> <li>CodeGearの入出力として, MoarVMなどの情報をまとめた構造体を利用する</li> </ul> @@ -450,7 +461,7 @@ <ul> <li>CodeGearテーブルは引数としてINTERを受け取るCodeGearの配列として定義する</li> - <li>テーブルとして宣言することで、 バイトコードの数をそのままテーブルに反映させる事が可能である</li> + <li>テーブルとして宣言することで、 バイトコードの値をそのままテーブルに反映させる事が可能である</li> </ul> <pre><code>__code (* CODES[])(INTERP) = { @@ -473,43 +484,6 @@ <div class='slide'> <!-- _S9SLIDE_ --> -<h2 id="cbcmoarvmの利点">CbCMoarVMの利点</h2> - -<ul> - <li>バイトコードインタプリタの箇所をモジュール化する事が可能となった - <ul> - <li>CodeGearの再利用性や記述生が高まる</li> - <li>CodeGearは関数の様に扱えるの為、 命令ディスパッチの最適化につながる実装が可能となった</li> - </ul> - </li> - <li>デバッグ時にラベルではなくCodeGearにbreakpointを設定可能となった - <ul> - <li>デバッグが安易となる</li> - </ul> - </li> - <li>CPUがキャッシュに収まる範囲の命令の場合、 通常のMoarVMよりも高速に動作する</li> -</ul> - - - -</div> - -<div class='slide'> - <!-- _S9SLIDE_ --> -<h2 id="cbcmoarvmの欠点">CbCMoarVMの欠点</h2> - -<ul> - <li>MoarVMのオリジナルの更新頻度が高い為, 追従していく必要がある</li> - <li>CodeGear側からCに戻る際に手順が複雑となる</li> - <li>CodeGearを単位として用いる事で複雑なプログラミングが要求される.</li> -</ul> - - - -</div> - -<div class='slide'> - <!-- _S9SLIDE_ --> <h2 id="moarvmのトレース">MoarVMのトレース</h2> <ul> @@ -594,9 +568,14 @@ <h2 id="現在のcbcmoarvm">現在のCbCMoarVM</h2> <ul> - <li>現在はNQP, Rakudoのセルフビルドが達成でき, オリジナルと同等のテスト達成率を持っている</li> - <li>moarの起動時のオプションとして <code>--cbc</code> を与えることによりCbCで動き, そうでない場合は通常のCで記述された箇所で実行される</li> - <li>Perl6の実行バイナリperl6, NQPの実行バイナリnqp は, それぞれmoarを起動するシェルスクリプトである為, <code>--cbc</code> オプションをシェルスクリプト内に書き加えることで, Perl6, NQPがそれぞれCbCで起動する</li> + <li>現在はNQP, Rakudoのセルフビルドが達成でき, オリジナルと同等のテスト達成率を持っている + <ul> + <li>その為、 NQP, Rakudoの実行コマンドであるnqp perl6が起動する様になった</li> + </ul> + </li> + <li>moarの起動時のオプションとして <code>--cbc</code> を与えることによりCbCかオリジナルを選択可能である</li> + <li>Perl6の実行バイナリperl6, NQPの実行バイナリnqp は, それぞれmoarを起動するシェルスクリプトである</li> + <li><code>--cbc</code> オプションをシェルスクリプト内に書き加えることで, Perl6, NQPがそれぞれCbCで起動する</li> </ul> <pre><code>#!/bin/sh @@ -746,12 +725,46 @@ <div class='slide'> <!-- _S9SLIDE_ --> +<h2 id="cbcmoarvmの利点">CbCMoarVMの利点</h2> +<ul> + <li>バイトコードインタプリタの箇所をモジュール化する事が可能となった + <ul> + <li>CodeGearの再利用性や記述生が高まる</li> + <li>CodeGearは関数の様に扱える為、 命令ディスパッチの最適化につながる実装が可能となった</li> + </ul> + </li> + <li>デバッグ時にラベルではなくCodeGearにbreakpointを設定可能となった + <ul> + <li>デバッグが安易となる</li> + </ul> + </li> + <li>CPUがキャッシュに収まる範囲の命令の場合、 通常のMoarVMよりも高速に動作する</li> +</ul> + + + +</div> + +<div class='slide'> + <!-- _S9SLIDE_ --> +<h2 id="cbcmoarvmの欠点">CbCMoarVMの欠点</h2> + +<ul> + <li>MoarVMのオリジナルの更新頻度が高い為, 追従していく必要がある</li> + <li>CodeGear側からCに戻る際に手順が複雑となる</li> + <li>CodeGearを単位として用いる事で複雑なプログラミングが要求される.</li> +</ul> + + + +</div> + +<div class='slide'> + <!-- _S9SLIDE_ --> <h2 id="まとめと今後の課題">まとめと今後の課題</h2> <ul> <li>継続と基本としたC言語 Continuation Based Cを用いてPerl6の処理系の一部を書き直した</li> <li>CbCの持つCodeGearによって, 本来はモジュール化出来ない箇所をモジュール化する事が出来た</li> - <li>MoarVMの速度改善にはThreadedCodeが期待でき, CodeGearベースの命令ディスパッチとThreadedCodeは相性が良いと考えられる</li> - <li>今後は実行するバイトコードによりThreadedCode箇所と通常の配列を読み取り, 次のCodeGearを計算する処理を両立させていく</li> </ul>
--- a/presen/slide.md Tue Feb 19 15:02:16 2019 +0900 +++ b/presen/slide.md Tue Feb 19 15:09:55 2019 +0900 @@ -183,11 +183,14 @@ -## CbCMoarVMのバイトコードディスパッチ +## CbCでの変換 - CbCのCodeGearは関数よりも小さな単位である - その為、 従来は関数化出来なかった単位をCodeGearに変換する事が出来る - CbCをMoarVMに適応すると, ラベルなどで制御していた命令に対応する処理をCodeGearで記述する事が可能である + +## CbCMoarVMのバイトコードディスパッチ + - オリジナルでは, マクロ `NEXT` が担当していた, 次のバイトコードへの移動は, NEXT相当のCodeGear `cbc_next`で処理を行う - CodeGearの入出力として, MoarVMなどの情報をまとめた構造体を利用する @@ -232,7 +235,7 @@ ## CbCMoarVMのCodeGearテーブル - CodeGearテーブルは引数としてINTERを受け取るCodeGearの配列として定義する -- テーブルとして宣言することで、 バイトコードの数をそのままテーブルに反映させる事が可能である +- テーブルとして宣言することで、 バイトコードの値をそのままテーブルに反映させる事が可能である ``` __code (* CODES[])(INTERP) = { @@ -250,20 +253,6 @@ ``` -## CbCMoarVMの利点 - -- バイトコードインタプリタの箇所をモジュール化する事が可能となった - - CodeGearの再利用性や記述生が高まる - - CodeGearは関数の様に扱える為、 命令ディスパッチの最適化につながる実装が可能となった -- デバッグ時にラベルではなくCodeGearにbreakpointを設定可能となった - - デバッグが安易となる -- CPUがキャッシュに収まる範囲の命令の場合、 通常のMoarVMよりも高速に動作する - -## CbCMoarVMの欠点 - -- MoarVMのオリジナルの更新頻度が高い為, 追従していく必要がある -- CodeGear側からCに戻る際に手順が複雑となる -- CodeGearを単位として用いる事で複雑なプログラミングが要求される. @@ -332,8 +321,10 @@ ## 現在のCbCMoarVM - 現在はNQP, Rakudoのセルフビルドが達成でき, オリジナルと同等のテスト達成率を持っている -- moarの起動時のオプションとして `--cbc` を与えることによりCbCで動き, そうでない場合は通常のCで記述された箇所で実行される -- Perl6の実行バイナリperl6, NQPの実行バイナリnqp は, それぞれmoarを起動するシェルスクリプトである為, `--cbc` オプションをシェルスクリプト内に書き加えることで, Perl6, NQPがそれぞれCbCで起動する + - その為、 NQP, Rakudoの実行コマンドであるnqp perl6が起動する様になった +- moarの起動時のオプションとして `--cbc` を与えることによりCbCかオリジナルを選択可能である +- Perl6の実行バイナリperl6, NQPの実行バイナリnqp は, それぞれmoarを起動するシェルスクリプトである +- `--cbc` オプションをシェルスクリプト内に書き加えることで, Perl6, NQPがそれぞれCbCで起動する ``` #!/bin/sh @@ -432,10 +423,22 @@ } ``` +## CbCMoarVMの利点 +- バイトコードインタプリタの箇所をモジュール化する事が可能となった + - CodeGearの再利用性や記述生が高まる + - CodeGearは関数の様に扱える為、 命令ディスパッチの最適化につながる実装が可能となった +- デバッグ時にラベルではなくCodeGearにbreakpointを設定可能となった + - デバッグが安易となる +- CPUがキャッシュに収まる範囲の命令の場合、 通常のMoarVMよりも高速に動作する + +## CbCMoarVMの欠点 + +- MoarVMのオリジナルの更新頻度が高い為, 追従していく必要がある +- CodeGear側からCに戻る際に手順が複雑となる +- CodeGearを単位として用いる事で複雑なプログラミングが要求される. + ## まとめと今後の課題 - 継続と基本としたC言語 Continuation Based Cを用いてPerl6の処理系の一部を書き直した - CbCの持つCodeGearによって, 本来はモジュール化出来ない箇所をモジュール化する事が出来た -- MoarVMの速度改善にはThreadedCodeが期待でき, CodeGearベースの命令ディスパッチとThreadedCodeは相性が良いと考えられる -- 今後は実行するバイトコードによりThreadedCode箇所と通常の配列を読み取り, 次のCodeGearを計算する処理を両立させていく
--- a/presen/slide.pdf.html Tue Feb 19 15:02:16 2019 +0900 +++ b/presen/slide.pdf.html Tue Feb 19 15:09:55 2019 +0900 @@ -371,12 +371,23 @@ <div class='slide'> <!-- _S9SLIDE_ --> -<h2 id="cbcmoarvmのバイトコードディスパッチ">CbCMoarVMのバイトコードディスパッチ</h2> +<h2 id="cbcでの変換">CbCでの変換</h2> <ul> <li>CbCのCodeGearは関数よりも小さな単位である</li> <li>その為、 従来は関数化出来なかった単位をCodeGearに変換する事が出来る</li> <li>CbCをMoarVMに適応すると, ラベルなどで制御していた命令に対応する処理をCodeGearで記述する事が可能である</li> +</ul> + + + +</div> + +<div class='slide'> + <!-- _S9SLIDE_ --> +<h2 id="cbcmoarvmのバイトコードディスパッチ">CbCMoarVMのバイトコードディスパッチ</h2> + +<ul> <li>オリジナルでは, マクロ <code>NEXT</code> が担当していた, 次のバイトコードへの移動は, NEXT相当のCodeGear <code>cbc_next</code>で処理を行う</li> <li>CodeGearの入出力として, MoarVMなどの情報をまとめた構造体を利用する</li> </ul> @@ -434,7 +445,7 @@ <ul> <li>CodeGearテーブルは引数としてINTERを受け取るCodeGearの配列として定義する</li> - <li>テーブルとして宣言することで、 バイトコードの数をそのままテーブルに反映させる事が可能である</li> + <li>テーブルとして宣言することで、 バイトコードの値をそのままテーブルに反映させる事が可能である</li> </ul> <pre><code>__code (* CODES[])(INTERP) = { @@ -457,43 +468,6 @@ <div class='slide'> <!-- _S9SLIDE_ --> -<h2 id="cbcmoarvmの利点">CbCMoarVMの利点</h2> - -<ul> - <li>バイトコードインタプリタの箇所をモジュール化する事が可能となった - <ul> - <li>CodeGearの再利用性や記述生が高まる</li> - <li>CodeGearは関数の様に扱えるの為、 命令ディスパッチの最適化につながる実装が可能となった</li> - </ul> - </li> - <li>デバッグ時にラベルではなくCodeGearにbreakpointを設定可能となった - <ul> - <li>デバッグが安易となる</li> - </ul> - </li> - <li>CPUがキャッシュに収まる範囲の命令の場合、 通常のMoarVMよりも高速に動作する</li> -</ul> - - - -</div> - -<div class='slide'> - <!-- _S9SLIDE_ --> -<h2 id="cbcmoarvmの欠点">CbCMoarVMの欠点</h2> - -<ul> - <li>MoarVMのオリジナルの更新頻度が高い為, 追従していく必要がある</li> - <li>CodeGear側からCに戻る際に手順が複雑となる</li> - <li>CodeGearを単位として用いる事で複雑なプログラミングが要求される.</li> -</ul> - - - -</div> - -<div class='slide'> - <!-- _S9SLIDE_ --> <h2 id="moarvmのトレース">MoarVMのトレース</h2> <ul> @@ -578,9 +552,14 @@ <h2 id="現在のcbcmoarvm">現在のCbCMoarVM</h2> <ul> - <li>現在はNQP, Rakudoのセルフビルドが達成でき, オリジナルと同等のテスト達成率を持っている</li> - <li>moarの起動時のオプションとして <code>--cbc</code> を与えることによりCbCで動き, そうでない場合は通常のCで記述された箇所で実行される</li> - <li>Perl6の実行バイナリperl6, NQPの実行バイナリnqp は, それぞれmoarを起動するシェルスクリプトである為, <code>--cbc</code> オプションをシェルスクリプト内に書き加えることで, Perl6, NQPがそれぞれCbCで起動する</li> + <li>現在はNQP, Rakudoのセルフビルドが達成でき, オリジナルと同等のテスト達成率を持っている + <ul> + <li>その為、 NQP, Rakudoの実行コマンドであるnqp perl6が起動する様になった</li> + </ul> + </li> + <li>moarの起動時のオプションとして <code>--cbc</code> を与えることによりCbCかオリジナルを選択可能である</li> + <li>Perl6の実行バイナリperl6, NQPの実行バイナリnqp は, それぞれmoarを起動するシェルスクリプトである</li> + <li><code>--cbc</code> オプションをシェルスクリプト内に書き加えることで, Perl6, NQPがそれぞれCbCで起動する</li> </ul> <pre><code>#!/bin/sh @@ -730,12 +709,46 @@ <div class='slide'> <!-- _S9SLIDE_ --> +<h2 id="cbcmoarvmの利点">CbCMoarVMの利点</h2> +<ul> + <li>バイトコードインタプリタの箇所をモジュール化する事が可能となった + <ul> + <li>CodeGearの再利用性や記述生が高まる</li> + <li>CodeGearは関数の様に扱える為、 命令ディスパッチの最適化につながる実装が可能となった</li> + </ul> + </li> + <li>デバッグ時にラベルではなくCodeGearにbreakpointを設定可能となった + <ul> + <li>デバッグが安易となる</li> + </ul> + </li> + <li>CPUがキャッシュに収まる範囲の命令の場合、 通常のMoarVMよりも高速に動作する</li> +</ul> + + + +</div> + +<div class='slide'> + <!-- _S9SLIDE_ --> +<h2 id="cbcmoarvmの欠点">CbCMoarVMの欠点</h2> + +<ul> + <li>MoarVMのオリジナルの更新頻度が高い為, 追従していく必要がある</li> + <li>CodeGear側からCに戻る際に手順が複雑となる</li> + <li>CodeGearを単位として用いる事で複雑なプログラミングが要求される.</li> +</ul> + + + +</div> + +<div class='slide'> + <!-- _S9SLIDE_ --> <h2 id="まとめと今後の課題">まとめと今後の課題</h2> <ul> <li>継続と基本としたC言語 Continuation Based Cを用いてPerl6の処理系の一部を書き直した</li> <li>CbCの持つCodeGearによって, 本来はモジュール化出来ない箇所をモジュール化する事が出来た</li> - <li>MoarVMの速度改善にはThreadedCodeが期待でき, CodeGearベースの命令ディスパッチとThreadedCodeは相性が良いと考えられる</li> - <li>今後は実行するバイトコードによりThreadedCode箇所と通常の配列を読み取り, 次のCodeGearを計算する処理を両立させていく</li> </ul>