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