comparison presen/presentation.html @ 35:01238ec569ea draft

commit
author Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
date Tue, 28 Feb 2012 03:55:29 +0900
parents 3922a95e99a8
children cee254f6af59
comparison
equal deleted inserted replaced
34:3922a95e99a8 35:01238ec569ea
72 <aside class="source"> 72 <aside class="source">
73 Source: <a href="./cbc.md">./cbc.md</a> 73 Source: <a href="./cbc.md">./cbc.md</a>
74 </aside> 74 </aside>
75 75
76 <aside class="page_number"> 76 <aside class="page_number">
77 1/21 77 1/22
78 </aside> 78 </aside>
79 </footer> 79 </footer>
80 </div> 80 </div>
81 </div> 81 </div>
82 82
109 <aside class="source"> 109 <aside class="source">
110 Source: <a href="./cbc.md">./cbc.md</a> 110 Source: <a href="./cbc.md">./cbc.md</a>
111 </aside> 111 </aside>
112 112
113 <aside class="page_number"> 113 <aside class="page_number">
114 2/21 114 2/22
115 </aside> 115 </aside>
116 </footer> 116 </footer>
117 </div> 117 </div>
118 </div> 118 </div>
119 119
128 <section><h2>コードセグメント単位での記述と継続を基本としたプログラミング言語</h2> 128 <section><h2>コードセグメント単位での記述と継続を基本としたプログラミング言語</h2>
129 <li>コーセグメント:CbC におけるプログラムの基本単位</li> 129 <li>コーセグメント:CbC におけるプログラムの基本単位</li>
130 130
131 <ul> 131 <ul>
132 <li>C の関数よりも細かな単位</li> 132 <li>C の関数よりも細かな単位</li>
133 <li>C から関数コールとループ制御が取り除かれた形</li> 133 <li>構文は C と同じだが、C から関数コールとループ制御が取り除かれた形</li>
134 <li>コードセグメントの末尾処理で別のコードセグメントへ継続(goto)することで CbC のプログラムは続いていく。</li> 134 <li>コードセグメントの末尾処理で別のコードセグメントへ継続(goto)することで CbC のプログラムは続いていく。</li>
135 </ul> 135 </ul>
136 136
137 <table width=100% > 137 <table width=100% >
138 <td style="margin-left:auto; margin-right: auto; text-align: center;"> 138 <td style="margin-left:auto; margin-right: auto; text-align: center;">
152 <aside class="source"> 152 <aside class="source">
153 Source: <a href="./cbc.md">./cbc.md</a> 153 Source: <a href="./cbc.md">./cbc.md</a>
154 </aside> 154 </aside>
155 155
156 <aside class="page_number"> 156 <aside class="page_number">
157 3/21 157 3/22
158 </aside> 158 </aside>
159 </footer> 159 </footer>
160 </div> 160 </div>
161 </div> 161 </div>
162 162
211 <aside class="source"> 211 <aside class="source">
212 Source: <a href="./cbc.md">./cbc.md</a> 212 Source: <a href="./cbc.md">./cbc.md</a>
213 </aside> 213 </aside>
214 214
215 <aside class="page_number"> 215 <aside class="page_number">
216 4/21 216 4/22
217 </aside> 217 </aside>
218 </footer> 218 </footer>
219 </div> 219 </div>
220 </div> 220 </div>
221 221
275 <aside class="source"> 275 <aside class="source">
276 Source: <a href="./cbc.md">./cbc.md</a> 276 Source: <a href="./cbc.md">./cbc.md</a>
277 </aside> 277 </aside>
278 278
279 <aside class="page_number"> 279 <aside class="page_number">
280 5/21 280 5/22
281 </aside> 281 </aside>
282 </footer> 282 </footer>
283 </div> 283 </div>
284 </div> 284 </div>
285 285
286 <!-- slide source: ./cbc.md --> 286 <!-- slide source: ./cbc.md -->
287 <div class="slide-wrapper"> 287 <div class="slide-wrapper">
288 <div class="slide"> 288 <div class="slide">
289 <div class="inner"> 289 <div class="inner">
290 290
291 <header><h1>CbC の実装 : Tail Call Elimination</h1></header> 291 <header><h1>Gnu Compiler Collection (GCC)</h1></header>
292
293
294 <section><p><li>GCC: オープンソースのコンパイル群</li>
295 <li>ここで扱う GCC はソースコードをアセンブラに変換する『cc1』のことを指す。</li>
296 <li>GCC がソースコードを読み込みアセンブラ言語を出力するまでの流れは以下の図のようになる。</li>
297 <table width=100%>
298 <caption>GCC のアセンブラ言語出力までの流れ</caption>
299 <td style="margin:auto; text-align:center;">
300 <img src="file:///Users/aotokage/hg/Papers/2012/nobu-thesis/presen/./pix/ir.png" style="height:15em">
301 </td>
302 </table>
303 <li>ソースコードはアセンブラに変換される間に 4 つのデータ構造に変換される。</li>
304 <li>この中でも CbC の実装では Parser と RTL の生成部分に手が加えられている。</li></p></section>
305
306 </div>
307 <div class="presenter_notes">
308 <header><h1>Presenter Notes</h1></header>
309 <section>
310
311 </section>
312 </div>
313 <footer>
314
315 <aside class="source">
316 Source: <a href="./cbc.md">./cbc.md</a>
317 </aside>
318
319 <aside class="page_number">
320 6/22
321 </aside>
322 </footer>
323 </div>
324 </div>
325
326 <!-- slide source: ./cbc.md -->
327 <div class="slide-wrapper">
328 <div class="slide">
329 <div class="inner">
330
331 <header><h1>CbC の実装 : 軽量継続</h1></header>
292 332
293 333
294 <section><p><li>CbC-GCC の軽量継続は最適化の1つ, <font color=red>Tail Call Celimination(末尾除去)</font>により実装されている.</li></p> 334 <section><p><li>CbC-GCC の軽量継続は最適化の1つ, <font color=red>Tail Call Celimination(末尾除去)</font>により実装されている.</li></p>
295 <h2>Tail Call Elimination</h2> 335 <h2>Tail Call Elimination</h2>
296 <p><li>関数呼び出しを call ではなく jmp 命令で行う最適化</li> 336 <p><li>関数呼び出しを call ではなく jmp 命令で行う最適化</li>
334 <aside class="source"> 374 <aside class="source">
335 Source: <a href="./cbc.md">./cbc.md</a> 375 Source: <a href="./cbc.md">./cbc.md</a>
336 </aside> 376 </aside>
337 377
338 <aside class="page_number"> 378 <aside class="page_number">
339 6/21 379 7/22
340 </aside> 380 </aside>
341 </footer> 381 </footer>
342 </div> 382 </div>
343 </div> 383 </div>
344 384
377 <aside class="source"> 417 <aside class="source">
378 Source: <a href="./cbc.md">./cbc.md</a> 418 Source: <a href="./cbc.md">./cbc.md</a>
379 </aside> 419 </aside>
380 420
381 <aside class="page_number"> 421 <aside class="page_number">
382 7/21 422 8/22
383 </aside> 423 </aside>
384 </footer> 424 </footer>
385 </div> 425 </div>
386 </div> 426 </div>
387 427
396 <section><h2>Tail Call Elimination の条件をチェックする関数</h2> 436 <section><h2>Tail Call Elimination の条件をチェックする関数</h2>
397 <ul> 437 <ul>
398 <li>今までの実装では Tail Call Elimination の条件をクリアする為に専用の関数を用意していた。</li> 438 <li>今までの実装では Tail Call Elimination の条件をクリアする為に専用の関数を用意していた。</li>
399 <li>この専用関数は元々ある GCC コードを元に作成している為, アップデートに合わせて修正していく 439 <li>この専用関数は元々ある GCC コードを元に作成している為, アップデートに合わせて修正していく
400 必要があった。</li> 440 必要があった。</li>
441 </ul>
442 <h2>実装の修正と修正による利点</h2>
443 <ul>
401 <li>しかし, 今回の実装でその関数を無くし, Tail Call Elimination のフラグを強制的に立たせる実装に変更。</li> 444 <li>しかし, 今回の実装でその関数を無くし, Tail Call Elimination のフラグを強制的に立たせる実装に変更。</li>
402 <li>専用関数がなくなったことで今後より楽なアップデートを行なっていくことができるようになった。</li> 445 <li>専用関数がなくなったことで、今後より楽なアップデートを行なっていくことができるようになった。</li>
446 <li>また、コードセグメントへの継続が jmp ではなく call 命令で行われる場合があったが</li>
403 </ul></section> 447 </ul></section>
404 448
405 </div> 449 </div>
406 <div class="presenter_notes"> 450 <div class="presenter_notes">
407 <header><h1>Presenter Notes</h1></header> 451 <header><h1>Presenter Notes</h1></header>
414 <aside class="source"> 458 <aside class="source">
415 Source: <a href="./cbc.md">./cbc.md</a> 459 Source: <a href="./cbc.md">./cbc.md</a>
416 </aside> 460 </aside>
417 461
418 <aside class="page_number"> 462 <aside class="page_number">
419 8/21 463 9/22
420 </aside> 464 </aside>
421 </footer> 465 </footer>
422 </div> 466 </div>
423 </div> 467 </div>
424 468
428 <div class="inner"> 472 <div class="inner">
429 473
430 <header><h1>性能評価</h1></header> 474 <header><h1>性能評価</h1></header>
431 475
432 476
433 <section><li>conv1: 演算と継続を交互に繰り返すプログラム</li> 477 <section><p><li><font color=red size=5em>本研究では GCC-4.5 から GCC-4.6 へのアップデートを行った。</font></li>
434 478 <li>この 2 つのバージョンを用いて生成したプログラムの速度比較を行った。</li>
435 <table width=100%> 479 <li>conv1: 加算と継続を交互に繰り返すプログラム</li></p>
436 <caption>各コンパイラにより生成されたコードの速度比較</caption> 480 <table width=100% border=1>
481 <caption>各コンパイラにより生成されたプログラムの速度比較</caption>
482 <tr>
437 <td style="margin:auto; text-align:center;"> 483 <td style="margin:auto; text-align:center;">
438 <img src="file:///Users/aotokage/hg/Papers/2012/nobu-thesis/presen/./pix/conv1_for_resume.png" style="height:15em"> 484 <img src="file:///Users/aotokage/hg/Papers/2012/nobu-thesis/presen/./pix/conv1_for_resume.png" style="height:15em">
439 </td> 485 </td>
440 <td> 486 <td>
441 <img src="./pix/conv1_mac_for_presen.png" style="height:15em"> 487 <img src="./pix/conv1_mac_for_presen.png" style="height:15em">
442 </td> 488 </td>
489 </tr>
490 <tr>
491 <td style="text-align:center;">x86/Linux</td>
492 <td style="text-align:center;">x86/OS X (10.7)</td>
493 </tr>
443 </table> 494 </table>
444 495
445 <li>GCC-4.5 では動かなかったプログラムが GCC-4.6 では問題なく動いている。</li> 496 <li>Mac の GCC-4.5 では動かなかった 32bit のプログラムが GCC-4.6 では問題なく動いている。</li>
446 497
447 <li>引数 2、3 の結果はほぼ同じ</li> 498 <li>引数 2、3 の結果はほぼ同じ</li>
448 499
449 <li>引数 1 の結果では 32bit, 64bit 共に GCC-4.6 の方が 1.5倍以上早い</li></section> 500 <li>引数 1 の結果では 32bit, 64bit 共に GCC-4.6 の方が 1.5倍以上早い</li></section>
450 501
460 <aside class="source"> 511 <aside class="source">
461 Source: <a href="./cbc.md">./cbc.md</a> 512 Source: <a href="./cbc.md">./cbc.md</a>
462 </aside> 513 </aside>
463 514
464 <aside class="page_number"> 515 <aside class="page_number">
465 9/21 516 10/22
517 </aside>
518 </footer>
519 </div>
520 </div>
521
522 <!-- slide source: ./cbc.md -->
523 <div class="slide-wrapper">
524 <div class="slide">
525 <div class="inner">
526
527 <header><h1>GCC-4.6 の最適化</h1></header>
528
529
530 <section><ul>
531 <li>GCC-4.6 では最適化の 1つ『インライン展開』が強化されている。</li>
532 </ul>
533 <h2>インライン展開</h2>
534 <ul>
535 <li>関数の処理をそのまま関数呼び出し部に展開することで call を省略できる最適化</li>
536 </ul>
537 <table width=100% border=1>
538 <caption><h3>インライン展開の例</h3></caption>
539 <tr>
540 <td width=50%>
541 <pre>
542 void func(){
543 A;
544 B;
545 }
546
547 int main() {
548 func();
549 func();
550 }
551 </pre>
552 </td>
553 <td>
554 <pre>
555 int main() {
556 A;
557 B;
558 A;
559 B;
560 }
561 </pre>
562 </td>
563 </tr>
564 </table>
565 <li>func の呼び出しがなくなっている。</li></section>
566
567 </div>
568 <div class="presenter_notes">
569 <header><h1>Presenter Notes</h1></header>
570 <section>
571
572 </section>
573 </div>
574 <footer>
575
576 <aside class="source">
577 Source: <a href="./cbc.md">./cbc.md</a>
578 </aside>
579
580 <aside class="page_number">
581 11/22
466 </aside> 582 </aside>
467 </footer> 583 </footer>
468 </div> 584 </div>
469 </div> 585 </div>
470 586
474 <div class="inner"> 590 <div class="inner">
475 591
476 <header><h1>最適化の比較</h1></header> 592 <header><h1>最適化の比較</h1></header>
477 593
478 594
479 <section><p><table width=100% border=1> 595 <section><table width=100% border=1>
480 <caption>それぞれの最適化にかかった conv1プログラムの挙動(引数 1)</caption> 596 <caption><h3>それぞれの最適化にかかった conv1プログラムの挙動(引数 1)</h3></caption>
481 <tr> 597 <tr>
482 <td>最適化</td> 598 <td width=30%>最適化なし</td>
483 <td style="text-align:center;">状態遷移</td> 599 <td width=30%>GCC-4.5の最適化(-O2)</td>
484 </tr> 600 <td width=30%>GCC-4.6の最適化(-O2)</td>
485 <tr> 601 </tr>
486 <td>最適化無し</td> 602 <tr>
487 <td style="margin:auto; text-align:center;"> 603 <td style="margin:auto; text-align:center;">
488 <img src="file:///Users/aotokage/hg/Papers/2012/nobu-thesis/presen/./pix/state_conv1_noopt.png"> 604 <img src="file:///Users/aotokage/hg/Papers/2012/nobu-thesis/presen/./pix/state_conv1_noopt.png" style="width:65%;">
489 </td> 605 </td>
490 <tr>
491 <td>GCC-4.5<br>の最適化<br>(-O2)</td>
492 <td style="margin:auto; text-align:center;"> 606 <td style="margin:auto; text-align:center;">
493 <img src="./pix/state_conv1_45.png"> 607 <img src="./pix/state_conv1_45.png" style="width:65%;">
494 </td> 608 </td>
495 </tr>
496 <tr>
497 <td>GCC-4.6<br>の最適化<br>(-O2)</td>
498 <td style="margin:auto; text-align:center;"> 609 <td style="margin:auto; text-align:center;">
499 <img src="./pix/state_conv1_46.png"> 610 <img src="./pix/state_conv1_46.png" style="width:65%;">
500 </td> 611 </td>
501 </tr> 612 </tr>
502 </table></p></section> 613 </table>
503 614
504 </div> 615 <ul>
505 <div class="presenter_notes"> 616 <li>最適化無しに比べると GCC-4.5、 GGC-4.6 共にコードセグメントの数が減っている。</li>
506 <header><h1>Presenter Notes</h1></header> 617 <li>GCC-4.5 でもインライン展開はされているが、GCC-4.6 はより良い最適化がかけられている。</li>
507 <section> 618 </ul></section>
508 619
509 </section> 620 </div>
510 </div> 621 <div class="presenter_notes">
511 <footer> 622 <header><h1>Presenter Notes</h1></header>
512 623 <section>
513 <aside class="source"> 624
514 Source: <a href="./cbc.md">./cbc.md</a> 625 </section>
515 </aside> 626 </div>
516 627 <footer>
517 <aside class="page_number"> 628
518 10/21 629 <aside class="source">
519 </aside> 630 Source: <a href="./cbc.md">./cbc.md</a>
520 </footer> 631 </aside>
521 </div> 632
522 </div> 633 <aside class="page_number">
523 634 12/22
524 <!-- slide source: ./cbc.md --> 635 </aside>
525 <div class="slide-wrapper"> 636 </footer>
526 <div class="slide"> 637 </div>
527 <div class="inner"> 638 </div>
528 639
529 <header><h1>GCC の最適化</h1></header> 640 <!-- slide source: ./cbc.md -->
641 <div class="slide-wrapper">
642 <div class="slide">
643 <div class="inner">
644
645 <header><h1>最新版のアップデートに合わせる有用性</h1></header>
530 646
531 647
532 <section><ul> 648 <section><ul>
533 <li>最適化無しに比べると GCC-4.5、 GGC-4.6 共にコードセグメントの数が減っている。</l></li> 649 <li>今回の『インライン展開』のように GCC の最適化は日々改良されている。</li>
534 <li>これは、最適化の 1 つ『インライン展開』により各コードセグメントの計算がまとめて行われ、
535 継続する数を減らされている為。</li>
536 <li>GCC-4.5 でもインライン展開はされていたが、GCC-4.6 はより良い最適化がかけられている。</li>
537 </ul></section>
538
539 </div>
540 <div class="presenter_notes">
541 <header><h1>Presenter Notes</h1></header>
542 <section>
543
544 </section>
545 </div>
546 <footer>
547
548 <aside class="source">
549 Source: <a href="./cbc.md">./cbc.md</a>
550 </aside>
551
552 <aside class="page_number">
553 11/21
554 </aside>
555 </footer>
556 </div>
557 </div>
558
559 <!-- slide source: ./cbc.md -->
560 <div class="slide-wrapper">
561 <div class="slide">
562 <div class="inner">
563
564 <header><h1>アップデートに合わせる有用性</h1></header>
565
566
567 <section><ul>
568 <li>今回の『インライン展開』のように GCC の最適化は日々改良されていく。</li>
569 <li>また、既存の最適化の改良だけでなく新たな最適化の追加等も行われていく。</li> 650 <li>また、既存の最適化の改良だけでなく新たな最適化の追加等も行われていく。</li>
570 <li>それらの恩恵を受ける為にも GCC のアップデートに合わせていく事は今後も重要である。</li> 651 <li>それらの恩恵を受ける為にも GCC のアップデートに合わせていく事は今後も重要である。</li>
571 </ul></section> 652 </ul></section>
572 653
573 </div> 654 </div>
582 <aside class="source"> 663 <aside class="source">
583 Source: <a href="./cbc.md">./cbc.md</a> 664 Source: <a href="./cbc.md">./cbc.md</a>
584 </aside> 665 </aside>
585 666
586 <aside class="page_number"> 667 <aside class="page_number">
587 12/21 668 13/22
588 </aside> 669 </aside>
589 </footer> 670 </footer>
590 </div> 671 </div>
591 </div> 672 </div>
592 673
598 <header><h1>まとめ</h1></header> 679 <header><h1>まとめ</h1></header>
599 680
600 681
601 <section><ul> 682 <section><ul>
602 <li>今回 CbC-GCC を GCC-4.6 へとアップデートを行った。</li> 683 <li>今回 CbC-GCC を GCC-4.6 へとアップデートを行った。</li>
603 <li>アップデートに伴い最適化の強制付与や環境付き継続の部分の実装の修正を行った。</li> 684 <li>アップデートにより、よりよいコードを生成する CbC のコンパイラを用意することができた。</li>
604 <li>アップデートにかけたことで, より良い最適化がかかることを確認できた。</li> 685 <li>また、最適化の強制付与や環境付き継続の部分といった実装の修正も行えた。</li>
605 <li>GCC ベースの CbC コンパイラは今後 GCC のアップデートに合わせていくだけとなる。</li> 686 <li>細かな実装を除けば, CbC-GCC は今後 GCC のアップデートに合わせていくだけとなる。</li>
606 </ul> 687 </ul>
607 <h2>今後の課題</h2> 688 <h2>今後の課題</h2>
608 <ul> 689 <ul>
609 <li>LLVM ベースの CbC コンパイラの開発</li> 690 <li>LLVM ベースの CbC コンパイラの開発</li>
610 <li>google Go 言語への実装の検討</li> 691 <li>google Go 言語への実装の検討</li>
622 <aside class="source"> 703 <aside class="source">
623 Source: <a href="./cbc.md">./cbc.md</a> 704 Source: <a href="./cbc.md">./cbc.md</a>
624 </aside> 705 </aside>
625 706
626 <aside class="page_number"> 707 <aside class="page_number">
627 13/21 708 14/22
628 </aside> 709 </aside>
629 </footer> 710 </footer>
630 </div> 711 </div>
631 </div> 712 </div>
632 713
660 <aside class="source"> 741 <aside class="source">
661 Source: <a href="./cbc.md">./cbc.md</a> 742 Source: <a href="./cbc.md">./cbc.md</a>
662 </aside> 743 </aside>
663 744
664 <aside class="page_number"> 745 <aside class="page_number">
665 14/21 746 15/22
666 </aside> 747 </aside>
667 </footer> 748 </footer>
668 </div> 749 </div>
669 </div> 750 </div>
670 751
709 <aside class="source"> 790 <aside class="source">
710 Source: <a href="./cbc.md">./cbc.md</a> 791 Source: <a href="./cbc.md">./cbc.md</a>
711 </aside> 792 </aside>
712 793
713 <aside class="page_number"> 794 <aside class="page_number">
714 15/21 795 16/22
715 </aside> 796 </aside>
716 </footer> 797 </footer>
717 </div> 798 </div>
718 </div> 799 </div>
719 800
760 <aside class="source"> 841 <aside class="source">
761 Source: <a href="./cbc.md">./cbc.md</a> 842 Source: <a href="./cbc.md">./cbc.md</a>
762 </aside> 843 </aside>
763 844
764 <aside class="page_number"> 845 <aside class="page_number">
765 16/21 846 17/22
766 </aside> 847 </aside>
767 </footer> 848 </footer>
768 </div> 849 </div>
769 </div> 850 </div>
770 851
807 <aside class="source"> 888 <aside class="source">
808 Source: <a href="./cbc.md">./cbc.md</a> 889 Source: <a href="./cbc.md">./cbc.md</a>
809 </aside> 890 </aside>
810 891
811 <aside class="page_number"> 892 <aside class="page_number">
812 17/21 893 18/22
813 </aside> 894 </aside>
814 </footer> 895 </footer>
815 </div> 896 </div>
816 </div> 897 </div>
817 898
855 <aside class="source"> 936 <aside class="source">
856 Source: <a href="./cbc.md">./cbc.md</a> 937 Source: <a href="./cbc.md">./cbc.md</a>
857 </aside> 938 </aside>
858 939
859 <aside class="page_number"> 940 <aside class="page_number">
860 18/21 941 19/22
861 </aside>
862 </footer>
863 </div>
864 </div>
865
866 <!-- slide source: ./cbc.md -->
867 <div class="slide-wrapper">
868 <div class="slide">
869 <div class="inner">
870
871 <header><h1>GCC でのコンパイルの仕組み</h1></header>
872
873
874 <section><table width=100%>
875 <td style="margin:auto; text-align:center;">
876 <img src="file:///Users/aotokage/hg/Papers/2012/nobu-thesis/presen/./pix/ir.png" style="height:15em">
877 </td>
878 </table>
879
880 <li>CbC の実装では Parser と RTL の生成部分に手が加えられている。</li></section>
881
882 </div>
883 <div class="presenter_notes">
884 <header><h1>Presenter Notes</h1></header>
885 <section>
886
887 </section>
888 </div>
889 <footer>
890
891 <aside class="source">
892 Source: <a href="./cbc.md">./cbc.md</a>
893 </aside>
894
895 <aside class="page_number">
896 19/21
897 </aside> 942 </aside>
898 </footer> 943 </footer>
899 </div> 944 </div>
900 </div> 945 </div>
901 946
933 <aside class="source"> 978 <aside class="source">
934 Source: <a href="./cbc.md">./cbc.md</a> 979 Source: <a href="./cbc.md">./cbc.md</a>
935 </aside> 980 </aside>
936 981
937 <aside class="page_number"> 982 <aside class="page_number">
938 20/21 983 20/22
984 </aside>
985 </footer>
986 </div>
987 </div>
988
989 <!-- slide source: ./cbc.md -->
990 <div class="slide-wrapper">
991 <div class="slide">
992 <div class="inner">
993
994 <header><h1>最適化の比較</h1></header>
995
996
997 <section><table width=100% border=1>
998 <caption>各コンパイラにより生成されたコードの速度比較</caption>
999 <tr>
1000 <td style="margin:auto; text-align:center;">
1001 <img src="file:///Users/aotokage/hg/Papers/2012/nobu-thesis/presen/./pix/O3_conv1_linux.png" style="height:15em">
1002 </td>
1003 <td>
1004 <img src="./pix/O3_conv1_mac.png" style="height:15em">
1005 </td>
1006 </tr>
1007 <tr>
1008 <td style="text-align:center;">x86/Linux</td>
1009 <td style="text-align:center;">x86/OS X (10.7)</td>
1010 </tr>
1011 </table></section>
1012
1013 </div>
1014 <div class="presenter_notes">
1015 <header><h1>Presenter Notes</h1></header>
1016 <section>
1017
1018 </section>
1019 </div>
1020 <footer>
1021
1022 <aside class="source">
1023 Source: <a href="./cbc.md">./cbc.md</a>
1024 </aside>
1025
1026 <aside class="page_number">
1027 21/22
939 </aside> 1028 </aside>
940 </footer> 1029 </footer>
941 </div> 1030 </div>
942 </div> 1031 </div>
943 1032
1023 <aside class="source"> 1112 <aside class="source">
1024 Source: <a href="./cbc.md">./cbc.md</a> 1113 Source: <a href="./cbc.md">./cbc.md</a>
1025 </aside> 1114 </aside>
1026 1115
1027 <aside class="page_number"> 1116 <aside class="page_number">
1028 21/21 1117 22/22
1029 </aside> 1118 </aside>
1030 </footer> 1119 </footer>
1031 </div> 1120 </div>
1032 </div> 1121 </div>
1033 1122
1069 <td><a href="#slide5">5</a></td> 1158 <td><a href="#slide5">5</a></td>
1070 </tr> 1159 </tr>
1071 1160
1072 1161
1073 <tr id="toc-row-6"> 1162 <tr id="toc-row-6">
1074 <th><a href="#slide6">CbC の実装 : Tail Call Elimination</a></th> 1163 <th><a href="#slide6">Gnu Compiler Collection (GCC)</a></th>
1075 <td><a href="#slide6">6</a></td> 1164 <td><a href="#slide6">6</a></td>
1076 </tr> 1165 </tr>
1077 1166
1078 1167
1079 <tr id="toc-row-7"> 1168 <tr id="toc-row-7">
1080 <th><a href="#slide7">CbC の実装: Tail Call Elimination</a></th> 1169 <th><a href="#slide7">CbC の実装 : 軽量継続</a></th>
1081 <td><a href="#slide7">7</a></td> 1170 <td><a href="#slide7">7</a></td>
1082 </tr> 1171 </tr>
1083 1172
1084 1173
1085 <tr id="toc-row-8"> 1174 <tr id="toc-row-8">
1087 <td><a href="#slide8">8</a></td> 1176 <td><a href="#slide8">8</a></td>
1088 </tr> 1177 </tr>
1089 1178
1090 1179
1091 <tr id="toc-row-9"> 1180 <tr id="toc-row-9">
1092 <th><a href="#slide9">性能評価</a></th> 1181 <th><a href="#slide9">CbC の実装: Tail Call Elimination</a></th>
1093 <td><a href="#slide9">9</a></td> 1182 <td><a href="#slide9">9</a></td>
1094 </tr> 1183 </tr>
1095 1184
1096 1185
1097 <tr id="toc-row-10"> 1186 <tr id="toc-row-10">
1098 <th><a href="#slide10">最適化の比較</a></th> 1187 <th><a href="#slide10">性能評価</a></th>
1099 <td><a href="#slide10">10</a></td> 1188 <td><a href="#slide10">10</a></td>
1100 </tr> 1189 </tr>
1101 1190
1102 1191
1103 <tr id="toc-row-11"> 1192 <tr id="toc-row-11">
1104 <th><a href="#slide11">GCC の最適化</a></th> 1193 <th><a href="#slide11">GCC-4.6 の最適化</a></th>
1105 <td><a href="#slide11">11</a></td> 1194 <td><a href="#slide11">11</a></td>
1106 </tr> 1195 </tr>
1107 1196
1108 1197
1109 <tr id="toc-row-12"> 1198 <tr id="toc-row-12">
1110 <th><a href="#slide12">アップデートに合わせる有用性</a></th> 1199 <th><a href="#slide12">最適化の比較</a></th>
1111 <td><a href="#slide12">12</a></td> 1200 <td><a href="#slide12">12</a></td>
1112 </tr> 1201 </tr>
1113 1202
1114 1203
1115 <tr id="toc-row-13"> 1204 <tr id="toc-row-13">
1116 <th><a href="#slide13">まとめ</a></th> 1205 <th><a href="#slide13">最新版のアップデートに合わせる有用性</a></th>
1117 <td><a href="#slide13">13</a></td> 1206 <td><a href="#slide13">13</a></td>
1118 </tr> 1207 </tr>
1119 1208
1120 1209
1121 <tr id="toc-row-14"> 1210 <tr id="toc-row-14">
1122 <th><a href="#slide14">jmp と call</a></th> 1211 <th><a href="#slide14">まとめ</a></th>
1123 <td><a href="#slide14">14</a></td> 1212 <td><a href="#slide14">14</a></td>
1124 </tr> 1213 </tr>
1125 1214
1126 1215
1127 <tr id="toc-row-15"> 1216 <tr id="toc-row-15">
1128 <th><a href="#slide15">構文の追加</a></th> 1217 <th><a href="#slide15">jmp と call</a></th>
1129 <td><a href="#slide15">15</a></td> 1218 <td><a href="#slide15">15</a></td>
1130 </tr> 1219 </tr>
1131 1220
1132 1221
1133 <tr id="toc-row-16"> 1222 <tr id="toc-row-16">
1134 <th><a href="#slide16">conv1 プログラム</a></th> 1223 <th><a href="#slide16">構文の追加</a></th>
1135 <td><a href="#slide16">16</a></td> 1224 <td><a href="#slide16">16</a></td>
1136 </tr> 1225 </tr>
1137 1226
1138 1227
1139 <tr id="toc-row-17"> 1228 <tr id="toc-row-17">
1140 <th><a href="#slide17">CbC の実装: 環境付き継続</a></th> 1229 <th><a href="#slide17">conv1 プログラム</a></th>
1141 <td><a href="#slide17">17</a></td> 1230 <td><a href="#slide17">17</a></td>
1142 </tr> 1231 </tr>
1143 1232
1144 1233
1145 <tr id="toc-row-18"> 1234 <tr id="toc-row-18">
1146 <th><a href="#slide18">CbC 引数渡し</a></th> 1235 <th><a href="#slide18">CbC の実装: 環境付き継続</a></th>
1147 <td><a href="#slide18">18</a></td> 1236 <td><a href="#slide18">18</a></td>
1148 </tr> 1237 </tr>
1149 1238
1150 1239
1151 <tr id="toc-row-19"> 1240 <tr id="toc-row-19">
1152 <th><a href="#slide19">GCC でのコンパイルの仕組み</a></th> 1241 <th><a href="#slide19">CbC 引数渡し</a></th>
1153 <td><a href="#slide19">19</a></td> 1242 <td><a href="#slide19">19</a></td>
1154 </tr> 1243 </tr>
1155 1244
1156 1245
1157 <tr id="toc-row-20"> 1246 <tr id="toc-row-20">
1161 1250
1162 1251
1163 <tr id="toc-row-21"> 1252 <tr id="toc-row-21">
1164 <th><a href="#slide21">最適化の比較</a></th> 1253 <th><a href="#slide21">最適化の比較</a></th>
1165 <td><a href="#slide21">21</a></td> 1254 <td><a href="#slide21">21</a></td>
1255 </tr>
1256
1257
1258 <tr id="toc-row-22">
1259 <th><a href="#slide22">最適化の比較</a></th>
1260 <td><a href="#slide22">22</a></td>
1166 </tr> 1261 </tr>
1167 1262
1168 1263
1169 </table> 1264 </table>
1170 </div> 1265 </div>