Mercurial > hg > Papers > 2012 > nobu-thesis
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> |