Mercurial > hg > Papers > 2019 > anatofuz-thesis
comparison presen/slide.html @ 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 |
comparison
equal
deleted
inserted
replaced
94:19df48819b8d | 95:77fb6e9e3c08 |
---|---|
385 | 385 |
386 </div> | 386 </div> |
387 | 387 |
388 <div class='slide'> | 388 <div class='slide'> |
389 <!-- _S9SLIDE_ --> | 389 <!-- _S9SLIDE_ --> |
390 <h2 id="cbcmoarvmのバイトコードディスパッチ">CbCMoarVMのバイトコードディスパッチ</h2> | 390 <h2 id="cbcでの変換">CbCでの変換</h2> |
391 | 391 |
392 <ul> | 392 <ul> |
393 <li>CbCのCodeGearは関数よりも小さな単位である</li> | 393 <li>CbCのCodeGearは関数よりも小さな単位である</li> |
394 <li>その為、 従来は関数化出来なかった単位をCodeGearに変換する事が出来る</li> | 394 <li>その為、 従来は関数化出来なかった単位をCodeGearに変換する事が出来る</li> |
395 <li>CbCをMoarVMに適応すると, ラベルなどで制御していた命令に対応する処理をCodeGearで記述する事が可能である</li> | 395 <li>CbCをMoarVMに適応すると, ラベルなどで制御していた命令に対応する処理をCodeGearで記述する事が可能である</li> |
396 </ul> | |
397 | |
398 | |
399 | |
400 </div> | |
401 | |
402 <div class='slide'> | |
403 <!-- _S9SLIDE_ --> | |
404 <h2 id="cbcmoarvmのバイトコードディスパッチ">CbCMoarVMのバイトコードディスパッチ</h2> | |
405 | |
406 <ul> | |
396 <li>オリジナルでは, マクロ <code>NEXT</code> が担当していた, 次のバイトコードへの移動は, NEXT相当のCodeGear <code>cbc_next</code>で処理を行う</li> | 407 <li>オリジナルでは, マクロ <code>NEXT</code> が担当していた, 次のバイトコードへの移動は, NEXT相当のCodeGear <code>cbc_next</code>で処理を行う</li> |
397 <li>CodeGearの入出力として, MoarVMなどの情報をまとめた構造体を利用する</li> | 408 <li>CodeGearの入出力として, MoarVMなどの情報をまとめた構造体を利用する</li> |
398 </ul> | 409 </ul> |
399 | 410 |
400 <pre><code>__code cbc_next(INTERP i){ | 411 <pre><code>__code cbc_next(INTERP i){ |
448 <!-- _S9SLIDE_ --> | 459 <!-- _S9SLIDE_ --> |
449 <h2 id="cbcmoarvmのcodegearテーブル">CbCMoarVMのCodeGearテーブル</h2> | 460 <h2 id="cbcmoarvmのcodegearテーブル">CbCMoarVMのCodeGearテーブル</h2> |
450 | 461 |
451 <ul> | 462 <ul> |
452 <li>CodeGearテーブルは引数としてINTERを受け取るCodeGearの配列として定義する</li> | 463 <li>CodeGearテーブルは引数としてINTERを受け取るCodeGearの配列として定義する</li> |
453 <li>テーブルとして宣言することで、 バイトコードの数をそのままテーブルに反映させる事が可能である</li> | 464 <li>テーブルとして宣言することで、 バイトコードの値をそのままテーブルに反映させる事が可能である</li> |
454 </ul> | 465 </ul> |
455 | 466 |
456 <pre><code>__code (* CODES[])(INTERP) = { | 467 <pre><code>__code (* CODES[])(INTERP) = { |
457 cbc_no_op, | 468 cbc_no_op, |
458 cbc_const_i8, | 469 cbc_const_i8, |
471 | 482 |
472 </div> | 483 </div> |
473 | 484 |
474 <div class='slide'> | 485 <div class='slide'> |
475 <!-- _S9SLIDE_ --> | 486 <!-- _S9SLIDE_ --> |
476 <h2 id="cbcmoarvmの利点">CbCMoarVMの利点</h2> | |
477 | |
478 <ul> | |
479 <li>バイトコードインタプリタの箇所をモジュール化する事が可能となった | |
480 <ul> | |
481 <li>CodeGearの再利用性や記述生が高まる</li> | |
482 <li>CodeGearは関数の様に扱えるの為、 命令ディスパッチの最適化につながる実装が可能となった</li> | |
483 </ul> | |
484 </li> | |
485 <li>デバッグ時にラベルではなくCodeGearにbreakpointを設定可能となった | |
486 <ul> | |
487 <li>デバッグが安易となる</li> | |
488 </ul> | |
489 </li> | |
490 <li>CPUがキャッシュに収まる範囲の命令の場合、 通常のMoarVMよりも高速に動作する</li> | |
491 </ul> | |
492 | |
493 | |
494 | |
495 </div> | |
496 | |
497 <div class='slide'> | |
498 <!-- _S9SLIDE_ --> | |
499 <h2 id="cbcmoarvmの欠点">CbCMoarVMの欠点</h2> | |
500 | |
501 <ul> | |
502 <li>MoarVMのオリジナルの更新頻度が高い為, 追従していく必要がある</li> | |
503 <li>CodeGear側からCに戻る際に手順が複雑となる</li> | |
504 <li>CodeGearを単位として用いる事で複雑なプログラミングが要求される.</li> | |
505 </ul> | |
506 | |
507 | |
508 | |
509 </div> | |
510 | |
511 <div class='slide'> | |
512 <!-- _S9SLIDE_ --> | |
513 <h2 id="moarvmのトレース">MoarVMのトレース</h2> | 487 <h2 id="moarvmのトレース">MoarVMのトレース</h2> |
514 | 488 |
515 <ul> | 489 <ul> |
516 <li>トレース時には次の様なデバッグ情報の表示を利用する</li> | 490 <li>トレース時には次の様なデバッグ情報の表示を利用する</li> |
517 <li>デバッガに, breakpointで停止した際のcur_opの値を表示する様に設定する.</li> | 491 <li>デバッガに, breakpointで停止した際のcur_opの値を表示する様に設定する.</li> |
592 <div class='slide'> | 566 <div class='slide'> |
593 <!-- _S9SLIDE_ --> | 567 <!-- _S9SLIDE_ --> |
594 <h2 id="現在のcbcmoarvm">現在のCbCMoarVM</h2> | 568 <h2 id="現在のcbcmoarvm">現在のCbCMoarVM</h2> |
595 | 569 |
596 <ul> | 570 <ul> |
597 <li>現在はNQP, Rakudoのセルフビルドが達成でき, オリジナルと同等のテスト達成率を持っている</li> | 571 <li>現在はNQP, Rakudoのセルフビルドが達成でき, オリジナルと同等のテスト達成率を持っている |
598 <li>moarの起動時のオプションとして <code>--cbc</code> を与えることによりCbCで動き, そうでない場合は通常のCで記述された箇所で実行される</li> | 572 <ul> |
599 <li>Perl6の実行バイナリperl6, NQPの実行バイナリnqp は, それぞれmoarを起動するシェルスクリプトである為, <code>--cbc</code> オプションをシェルスクリプト内に書き加えることで, Perl6, NQPがそれぞれCbCで起動する</li> | 573 <li>その為、 NQP, Rakudoの実行コマンドであるnqp perl6が起動する様になった</li> |
574 </ul> | |
575 </li> | |
576 <li>moarの起動時のオプションとして <code>--cbc</code> を与えることによりCbCかオリジナルを選択可能である</li> | |
577 <li>Perl6の実行バイナリperl6, NQPの実行バイナリnqp は, それぞれmoarを起動するシェルスクリプトである</li> | |
578 <li><code>--cbc</code> オプションをシェルスクリプト内に書き加えることで, Perl6, NQPがそれぞれCbCで起動する</li> | |
600 </ul> | 579 </ul> |
601 | 580 |
602 <pre><code>#!/bin/sh | 581 <pre><code>#!/bin/sh |
603 exec /mnt/dalmore-home/one/src/Perl6/Optimize/llvm/build_perl6/bin/moar --cbc \ | 582 exec /mnt/dalmore-home/one/src/Perl6/Optimize/llvm/build_perl6/bin/moar --cbc \ |
604 --libpath=/mnt/dalmore-home/one/src/Perl6/Optimize/llvm/build_perl6/share/nqp/lib \ | 583 --libpath=/mnt/dalmore-home/one/src/Perl6/Optimize/llvm/build_perl6/share/nqp/lib \ |
744 | 723 |
745 </div> | 724 </div> |
746 | 725 |
747 <div class='slide'> | 726 <div class='slide'> |
748 <!-- _S9SLIDE_ --> | 727 <!-- _S9SLIDE_ --> |
728 <h2 id="cbcmoarvmの利点">CbCMoarVMの利点</h2> | |
729 <ul> | |
730 <li>バイトコードインタプリタの箇所をモジュール化する事が可能となった | |
731 <ul> | |
732 <li>CodeGearの再利用性や記述生が高まる</li> | |
733 <li>CodeGearは関数の様に扱える為、 命令ディスパッチの最適化につながる実装が可能となった</li> | |
734 </ul> | |
735 </li> | |
736 <li>デバッグ時にラベルではなくCodeGearにbreakpointを設定可能となった | |
737 <ul> | |
738 <li>デバッグが安易となる</li> | |
739 </ul> | |
740 </li> | |
741 <li>CPUがキャッシュに収まる範囲の命令の場合、 通常のMoarVMよりも高速に動作する</li> | |
742 </ul> | |
743 | |
744 | |
745 | |
746 </div> | |
747 | |
748 <div class='slide'> | |
749 <!-- _S9SLIDE_ --> | |
750 <h2 id="cbcmoarvmの欠点">CbCMoarVMの欠点</h2> | |
751 | |
752 <ul> | |
753 <li>MoarVMのオリジナルの更新頻度が高い為, 追従していく必要がある</li> | |
754 <li>CodeGear側からCに戻る際に手順が複雑となる</li> | |
755 <li>CodeGearを単位として用いる事で複雑なプログラミングが要求される.</li> | |
756 </ul> | |
757 | |
758 | |
759 | |
760 </div> | |
761 | |
762 <div class='slide'> | |
763 <!-- _S9SLIDE_ --> | |
749 <h2 id="まとめと今後の課題">まとめと今後の課題</h2> | 764 <h2 id="まとめと今後の課題">まとめと今後の課題</h2> |
750 <ul> | 765 <ul> |
751 <li>継続と基本としたC言語 Continuation Based Cを用いてPerl6の処理系の一部を書き直した</li> | 766 <li>継続と基本としたC言語 Continuation Based Cを用いてPerl6の処理系の一部を書き直した</li> |
752 <li>CbCの持つCodeGearによって, 本来はモジュール化出来ない箇所をモジュール化する事が出来た</li> | 767 <li>CbCの持つCodeGearによって, 本来はモジュール化出来ない箇所をモジュール化する事が出来た</li> |
753 <li>MoarVMの速度改善にはThreadedCodeが期待でき, CodeGearベースの命令ディスパッチとThreadedCodeは相性が良いと考えられる</li> | |
754 <li>今後は実行するバイトコードによりThreadedCode箇所と通常の配列を読み取り, 次のCodeGearを計算する処理を両立させていく</li> | |
755 </ul> | 768 </ul> |
756 | 769 |
757 | 770 |
758 </div> | 771 </div> |
759 | 772 |