annotate recital-slide/slide.html @ 15:67544736317e

add slides for recital.
author kent <kent@cr.ie.u-ryukyu.ac.jp>
date Tue, 16 Feb 2010 17:25:21 +0900
parents
children d9b85f041908
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 <?xml version="1.0" encoding="utf-8"?>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 <head>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 <title>Continuation based C</title>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 <meta name="copyright" content="Copyright &#169; 2009 KSL: Yogi KENT" />
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 <meta name="font-size-adjustment" content="1" />
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 <link rel="stylesheet" href="slidy.css"
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 type="text/css" media="screen, projection, print" />
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 <link rel="stylesheet" href="slide.css"
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 type="text/css" media="screen" />
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 <!--link rel="stylesheet" href="../Slidy/w3c-blue2.css"
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 type="text/css" media="screen, projection, print" /-->
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 <style type="text/css">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 .right {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 float: right;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 width: 40%;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 }
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 .left {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 float: left;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 width: 40%;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 }
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 div.slide {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 vertical-align: middle;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 }
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 div.top h1 {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 width: 70%;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 padding: 0 1em 0;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 text-align: center;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 }
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 #frame {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 position: fixed;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 left: -1px;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 top: -1px;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 width: 800px;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 height: 600px;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 border: solid 1px red;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 visibility: visible;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 }
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 .speak {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
43
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 visibility: hidden;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
45
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 font-size: 80%;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 line-height: 1.0;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 position: fixed;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 right: 0.5em;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 bottom: 1.5em;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 max-width: 60%;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 background-color: green;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 opacity: 0.90;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 color: black;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 -moz-border-radius: 8px;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 -webkit-border-radius: 8px;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 }
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 ul.narrow li {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 margin-right: 0;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 }
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 table {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 border-collapse: collapse;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 border: solid 1px black;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 }
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 table td {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 border: solid 1px black;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 }
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 table th {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
69 text-align: center;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 border: solid 1px black;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 }
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
72 </style>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
73 <script src="slidy.js"
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 charset="utf-8" type="text/javascript">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
75 </script>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
76 <script type="text/javascript">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
77 sizes = new Array("14pt", "15pt", "16pt", "17pt", "18pt", "19pt", "20pt", "21pt", "22pt","23pt", "24pt", "26pt", "28pt", "30pt", "32pt");
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
78 sizeIndex = 1;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 mouseClickEnabled = false;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 </script>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
81 </head>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 <body>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
83 <!-- this defines the slide background -->
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
84 <div id="frame"></div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
85
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
86 <div class="background">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
87 <div class="header">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
88 <!-- sized and colored via CSS -->
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
89 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
90
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
91 <!--img id="head-icon" alt="graphic with four colored squares"
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
92 src="../Slidy/icon-blue.png" /-->
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
93
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
94 <div class="footer">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
95 <object id="w3c-logo" data="kent-logo2.svg" type="image/svg+xml" title="KENT logo">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
96 <a href="http://www.w3.org/">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
97 <img alt="W3C logo" id="w3c-logo-fallback" src="kent-logo2.png" />
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
98 </a>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
99 </object>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
100
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
101 <!-- modify the following text as appropriate -->
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
102 組み込み向け言語CbCのGCC上の実装 <span style="font-size:70%;">http://www.cr.ie.u-ryukyu.ac.jp/~kent/slide/final.html</span><br />
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
103 <!--Event, Location, Month Year-->
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
104 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
105 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
106
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
107 <div class="slide top">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
108 <h1>組み込み向け言語Continuation based CのGCC上の実装</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
109 <p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
110 与儀健人 (並列信頼研究室)
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
111 &lt;<a href="mailto:">kent@cr.ie.u-ryukyu.ac.jp</a>&gt;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
112 </p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
113 <!--img src="../Slidy/keys.jpg" class="cover"
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
114 alt="W3C as letters on 3 plastic buttons from a keyboard" /-->
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
115 <!--h2>ゼミ, 河野研, Sep, 2009</h2-->
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
116 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
117
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
118 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
119 <h1>研究の背景</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
120 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
121 <li>ソフトウェアは今も大規模・複雑化が続いている</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
122 <li>しかし、ソフトウェアのバグを発見するのは難しい</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
123 <li style="marker:none;"/>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
124 <li>組込みやReal-time処理の需要も増大してる</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
125 <li>高速な応答が要求される組込み処理にはハードウェアに近い言語が適している</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
126 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
127 <p class="subtitle">なにが問題になるのか?</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
128 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
129 <li>組込みソフト、Real-time処理、通信プロトコル記述、どれも状態遷移ベース</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
130 <li>現存する記述言語は状態遷移の記述に向いていない</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
131 <li>スタックが状態を隠蔽するため、分割しにくい、検証が難しい</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
132 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
133 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
134
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
135 <div class="slide" style="font-size:95%">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
136 <h1>研究目的</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
137 <p class="subtitle">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
138 状態遷移記述をベースとした、より細かい単位でのプログラミングを実現する
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
139 </p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
140 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
141 <li>組込み、通信プロトコル、Real-time処理などの記述に向いている</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
142 <li>状態遷移を直接記述するため、タブロー法での検証に有利</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
143 <li>関数より細かく、ステートメントより大きい処理単位</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
144 <li>細かい単位でソースコードレベルの最適化を可能にする</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
145 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
146 <p class="subtitle">条件</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
147 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
148 <li>既存のソフトウェアは膨大であり、無駄にはできない</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
149 <li>互換性が必須条件</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
150 <li>Cからの変換、Cへの変換ができる事が望ましい</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
151 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
152 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
153
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
154 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
155 <h1>Continuation based Cの提案</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
156 <p class="subtitle">継続を基本とする記述言語CbC</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
157 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
158 <li>環境を保持しない継続、<dfn>軽量継続</dfn>を導入</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
159 <li>軽量継続で<em class="weak">状態遷移が明確</em>になる</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
160 <li>関数の代わりとなる処理単位<dfn>コードセグメント</dfn></li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
161 <li>関数 &gt; コードセグメント &gt; ステートメント</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
162 <li>for, whileなどのループも軽量継続で実現できる</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
163 <li>Cとの相互利用のための構文<dfn>環境付き継続</dfn>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
164 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
165 <li>このCとの相互利用可能なCbCは<em>C with Continuation</em>と呼ばれる</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
166 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
167 </li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
168 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
169 <p class="subtitle"></p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
170 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
171
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
172 <div class="slide" style="font-size:95%;">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
173 <h1>コードセグメントと軽量継続の記述</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
174 <pre style="float:right; width-max:45%">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
175 <code>typedef code (*NEXT)(int);
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
176 int main(int argc, char **argv) {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
177 int i;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
178 i = atoi(argv[1]);
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
179 goto factor(i, print_fact);
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
180 }
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
181 <em>code factor(int x, NEXT next)</em> {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
182 goto factor0(1, x, next);
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
183 }
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
184 code factor0(int prod,int x,NEXT next) {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
185 if (x &gt;= 1) {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
186 goto factor0(prod*x, x-1, next);
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
187 } else {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
188 <em>goto (*next)(prod);</em>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
189 }
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
190 }
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
191 code print_fact(int value) {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
192 printf("factorial = %d\n", value);
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
193 exit(0);
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
194 } </code></pre>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
195 <p class="subtitle">実際のプログラム記述は?</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
196 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
197 <li>コードセグメント定義
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
198 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
199 <li><code>codeキーワードで宣言</code></li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
200 <li>書式は関数と同じ</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
201 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
202 </li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
203 <li>軽量継続制御
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
204 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
205 <li><code>goto</code>キーワードと引数</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
206 <li>コードセグメントの最初に飛ぶ</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
207 <li>コードセグメントポインタによる間接継続も可能</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
208 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
209 </li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
210 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
211 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
212
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
213 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
214 <h1>これまでのCbC</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
215 <p class="subtitle"></p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
216 <dl>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
217 <dt>2000</dt>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
218 <dd>micro-cをベースとしたコンパイラの完成<br/>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
219 x86, PowerPC, ARM, MIPS.
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
220 </dd>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
221 <dt>2002</dt>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
222 <dd>CbCを用いた分散計算</dd>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
223 <dt>2005</dt>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
224 <dd>CbCを用いたプログラム分割手法</dd>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
225 <dt>2006</dt>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
226 <dd>CbCによるSPUマシンのシミュレータ</dd>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
227 <dt>2007</dt>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
228 <dd>時相論理をベースとしたCbCプログラムの検証</dd>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
229 <dt>2008</dt>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
230 <dd>GCCをベースとしたコンパイラが開発される</dd>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
231 <dt>2010</dt>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
232 <dd>GCCベースコンパイラを実用レベルに拡張</dd>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
233 </dl>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
234 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
235
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
236 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
237 <h1>本研究での取り組み</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
238 <p class="subtitle">取り組み</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
239 <dl>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
240 <dt>First</dt>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
241 <dd>GCCにて実用レベルのCbCプログラムを動作可能にする
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
242 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
243 <li>軽量継続の実装、これまでの制限の除去</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
244 <li>x86アーキテクチャにて高速化を行った</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
245 <li>PowerPCアーキテクチャでの間接継続の追加</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
246 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
247 </dd>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
248 <dt>Second</dt>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
249 <dd>C言語との相互利用を可能にした</dd>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
250 <dt>Third</dt>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
251 <dd>ソースコードメンテナンス性の向上</dd>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
252 </dl>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
253 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
254
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
255
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
256
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
257 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
258 <h1>GNU コンパイラコレクション (GCC)</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
259 <div style="width:50%;float:right;">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
260 <p class="subtitle">GCCでのコンパイルの流れ</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
261 <ul style="padding-left:3em">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
262 <li>フロントエンド</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
263 <li>ミドルエンド</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
264 <li>バックエンド</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
265 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
266 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
267 <img style="width:80%;position:relative;top:-15%;" src="figures/gcc-flow.png" />
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
268 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
269
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
270 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
271 <h1>GNU コンパイラコレクション (GCC)</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
272 <div style="width:50%;float:right;">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
273 <p class="subtitle">GCCでのコンパイルの流れ</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
274 <ul style="padding-left:3em">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
275 <li>フロントエンド</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
276 <li>ミドルエンド</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
277 <li>バックエンド</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
278 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
279 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
280 <img style="width:80%;position:relative;top:-15%;" src="figures/gcc-flow2.png" />
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
281 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
282
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
283
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
284 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
285 <h1>First: 軽量継続の実装</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
286 <p class="subtitle">軽量継続を実装するには?</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
287 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
288 <li>河野先生の作ったmicro-cは元より軽量継続を考慮して良く設計されている</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
289 <li>micro-Cと同じ命令列を出力させるのは難しい</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
290 <li>関数コール(call命令)ではもちろんダメ</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
291 <li>必ず<em>jmp命令</em>を出力しないといけない</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
292 <li>スタックを拡張してはいけない</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
293 <li>しかしGCCでは<em>関数をベース</em>にしなければならない</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
294 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
295 <p class="subtitle"><dfn>末尾呼出</dfn>をGCCに<em>強制</em>させる必要がある</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
296 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
297
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
298 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
299 <h1>First: 軽量継続の実装</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
300 <p class="subtitle">末尾呼出ってなに?</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
301 <img style="float:right; width:50%; margin:1em; " src="figures/tailcall.png" />
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
302 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
303 <li>リターンの直前の関数呼び出しのこと</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
304 <li>GCCが最適化してくれる (<em>TCE</em>)</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
305 <li>元の関数に戻らないため少し高速に</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
306 <li>スタックも積まなくてよいため、大幅なメモリ節約、アクセス軽減</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
307 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
308 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
309
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
310 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
311 <h1>First: 軽量継続の実装</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
312 <p class="subtitle">末尾呼出ってなに?</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
313 <img style="float:right; width:50%; margin:1em; " src="figures/tailcallstack.png" />
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
314 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
315 <li>リターンの直前の関数呼び出しのこと</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
316 <li>GCCが最適化してくれる (<em>TCE</em>)</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
317 <li>元の関数に戻らないため少し高速に</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
318 <li>スタックも積まなくてよいため、大幅なメモリ節約、アクセス軽減</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
319 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
320 <p class="subtitle incremental">この末尾呼出(TCE)を強制して軽量継続を実装!</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
321 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
322
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
323 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
324 <h1>First: x86における高速化</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
325 <p class="subtitle">軽量継続は実装されたが、やはりmicro-cに比べると遅い</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
326 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
327 <li>特にx86アーキテクチャ</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
328 <li><em class="weak">あくまで関数がベース</em>なので</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
329 <li>関数呼出規約に従い全ての引数をスタックに格納してしまう</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
330 <li>これをレジスタにすれば高速化が可能</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
331 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
332 <p class="subtitle">fastcallの導入</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
333 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
334 <li>GCCの独自拡張機能</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
335 <li>引数の最初の<em>2つのみレジスタに</em>保持するようになる</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
336 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
337 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
338
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
339 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
340 <h1>First: x86における高速化</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
341 <p class="subtitle">fastcallの強制</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
342 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
343 <li>通常は以下の様に定義される
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
344 <pre><code>__code current(int a, int b, int c) __attribute__((fastcall));
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
345 </code></pre></li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
346 <li>しかしこれを毎回ユーザが書くのは変</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
347 <li>やはりフロントエンドにて、強制するべき</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
348 <li>型の構文木を生成した際にfastcall属性を付加</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
349 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
350 <p class="subtitle incremental">これで軽量継続制御が高速化される!</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
351 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
352
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
353 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
354 <h1>First: CbCコンパイラ実装の評価</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
355 <p class="subtitle">CbCGCCとmicro-cで性能の比較</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
356 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
357 <li>CbCGCCが実用的になったことで、micro-cとの比較が可能に</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
358 <li>コンパイラの出力した実行ファイルを比較</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
359 <li>CbCでのquicksort例題を用意</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
360 <li>実行速度、ファイルサイズ</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
361 <li>比較対象はまずは旧CbCGCC、それとmicro-c</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
362 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
363 <p class="subtitle">実行環境</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
364 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
365 <li>CbCGCC、micro-cでともに実行可能な環境を選択</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
366 <li>アーキテクチャは x86, PowerPC(Cell含む)</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
367 <li>OSはLinuxとOS Xを使用する</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
368 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
369 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
370
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
371 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
372 <h1>First: 性能評価(速度比較) vs.旧ver</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
373 <p class="subtitle">速度測定結果(単位:秒)</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
374 <table>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
375 <tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
376 <th></th>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
377 <th colspan="2">新CbCGCC</th>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
378 <th colspan="2">旧CbCGCC</th>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
379 </tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
380 <tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
381 <td></td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
382 <th>最適化無し</th>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
383 <th>最適化有り</th>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
384 <th>最適化無し</th>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
385 <th>最適化有り</th>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
386 </tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
387 <tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
388 <td>x86/OS X</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
389 <td>5.907</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
390 <td>2.434</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
391 <td>4.668</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
392 <td>3.048</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
393 </tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
394 <tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
395 <td>x86/Linux</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
396 <td>5.715</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
397 <td>2.401</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
398 <td>4.525</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
399 <td>2.851</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
400 </tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
401 </table>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
402 <p class="subtitle">評価</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
403 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
404 <li>最適化無の場合は遅くなった </li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
405 <li>最適化を行うと、<em>約20%の高速化に成功</em></li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
406 <li>fastcallの効果が十分に出ている</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
407 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
408 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
409
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
410
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
411 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
412 <h1>First: 性能評価(速度比較)</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
413 <p class="subtitle">速度測定結果(単位:秒)</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
414 <table>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
415 <tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
416 <td></td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
417 <td>最適化なしのGCC</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
418 <td>最適化付きのGCC</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
419 <td>micro-c</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
420 </tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
421 <tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
422 <td>x86/OS X</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
423 <td>5.901</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
424 <td>2.434</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
425 <td>2.857</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
426 </tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
427 <tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
428 <td>x86/Linux</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
429 <td>5.732</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
430 <td>2.401</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
431 <td>2.254</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
432 </tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
433 <tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
434 <td>ppc/OS X</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
435 <td>14.875</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
436 <td>2.146</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
437 <td>4.811</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
438 </tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
439 <tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
440 <td>ppc/Linux</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
441 <td>19.793</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
442 <td>3.955</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
443 <td>6.454</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
444 </tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
445 <tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
446 <td>ppc/PS3</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
447 <td>39.176</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
448 <td>5.874</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
449 <td>11.121</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
450 </tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
451 </table>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
452 <p class="subtitle">結果(micro-cとの比較)</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
453 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
454 <li>x86では速度にあまり差が出なかった</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
455 <li>x86に特化しているmicro-cと差がないのは<em>とても良い結果</em></li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
456 <li>PowerPCではCbCGCCが<em>2倍ほど早い</em></li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
457 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
458 <p class="subtitle">この違いはどこから?</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
459 <ul style="font-size:95%;">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
460 <li>実際にアセンブラを出力して比較、その結果</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
461 <li>x86は自由に使えるレジスタが少ないため、CbCGCCの最適化が効きにくい</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
462 <li>演算の度にメモリ読み込み、演算、書き込みが発生する</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
463 <li><em>レジスタの多いアーキテクチャではCbCGCCが断然有利になる</em></li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
464 <li>またCbC言語そのものもレジスタが多いアーキテクチャで有利</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
465 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
466 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
467
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
468
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
469 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
470 <h1>Second: Cとの相互利用</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
471 <p class="subtitle">なぜそれが必要か</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
472 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
473 <li>既存のソフトウェアを無駄にはできない</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
474 <li></li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
475 <li>ソースコード上での互換性がある事が望ましい</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
476 <li>CbCからCの関数を呼び出すのは問題ない</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
477 <li>CからCbCのコードセグメントに継続するとスタックが保持されない</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
478 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
479 <p class="subtitle"><dfn>環境付き継続</dfn>の導入</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
480 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
481 <li>軽量継続に、スタックの情報を加える</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
482 <li>関数からのみ使用可能</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
483 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
484 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
485
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
486 <div class="slide" style="font-size:95%;">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
487 <h1>Second: Cとの相互利用</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
488 <pre style="float:right; width-max:45%">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
489 <code>typedef code (*NEXT)(int);
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
490 int main(int argc, char **argv) {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
491 int i,a;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
492 i = atoi(argv[1]);
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
493 <em>a = factor(i);</em>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
494 printf("%d! = %d\n", a);
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
495 }
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
496 int factor(int x) {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
497 NEXT ret = <em>__return</em>;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
498 goto factor0(1, x, ret);
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
499 }
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
500 code
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
501 factor0(int prod,int x,NEXT next) {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
502 if (x &gt;= 1) {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
503 goto factor0(prod*x, x-1, next);
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
504 } else {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
505 <em>goto (*next)(prod);</em>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
506 }
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
507 }
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
508 </code></pre>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
509 <p class="subtitle">環境付き継続の使用例</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
510 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
511 <li><code><em>__retunr</em></code>で表される特殊なコードセグメント</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
512 <li>コードセグメントからは通常のコードセグメントポインタに見える</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
513 <li>この<code>__return</code>に継続すると、元の関数の環境にリターン</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
514 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
515 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
516
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
517 <div class="slide" style="font-size:95%;">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
518 <h1>Second: Cとの相互利用</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
519 <p class="subtitle">内部関数を用いた実装</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
520 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
521 <li><code>__return</code>が参照された場合にGCCが自動で内部関数を定義する</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
522 <li>内部関数の中からは外の関数にgotoして脱出</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
523 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
524 <pre><code>int factor(int x) {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
525 int retval;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
526
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
527 <em class="weak">code __return(int val) {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
528 retval = val;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
529 goto label;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
530 }
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
531 if (0) {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
532 label:
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
533 return retval;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
534 }</em>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
535
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
536 NEXT ret = <em>__return</em>;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
537 goto factor0(1, x, ret);
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
538 } </code></pre>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
539 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
540
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
541
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
542 <div class="slide" style="font-size:95%;">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
543 <h1>Second: Cとの相互利用・評価</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
544 <p class="subtitle">この取り組みにより</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
545 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
546 <li>これにより、<dfn>C with Continuation</dfn> の仕様を満たした</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
547 <li>ソースコードレベルで、Cと相互に利用することが可能になった</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
548 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
549 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
550
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
551
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
552
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
553 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
554 <h1>まとめ</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
555 <p class="subtitle">本研究での取り組み</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
556 <dl>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
557 <dt>First</dt>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
558 <dd>CbCGCCにて実用レベルのCbCプログラムが動作可能となった
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
559 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
560 <li><em>軽量継続における引数順序の制限を取り除いた</em></li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
561 <li>PowerPCでの間接継続の制限を取り除いた</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
562 <li><em>x86アーキテクチャにて高速化を行った</em></li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
563 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
564 </dd>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
565 <dt>Second</dt>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
566 <dd><em>Cとの相互利用性の向上</em></dd>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
567 <dt>Third</dt>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
568 <dd>ソースコードメンテナンス性の向上</dd>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
569 </dl>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
570 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
571
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
572 <div class="slide" style="font-size:95%;">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
573 <h1>まとめ</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
574 <p class="subtitle">本研究での成果</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
575 <dl>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
576 <dt>成果1</dt>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
577 <dd>CbCGCCがCとの相互利用も含むCbCのフルセットとして利用可能になった
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
578 <dt>成果2</dt>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
579 <dd>CbCが多数のアーキテクチャに対応
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
580 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
581 <li>20以上のアーキテクチャ</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
582 <li>特に64bitのx86, SPUがうれしい</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
583 </ul> </dd>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
584 <dt>成果3</dt>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
585 <dd>CbCの高速化
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
586 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
587 <li>x86においてmicro-cと互角の速度を達成</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
588 <li>PowerPCでは2倍の速度</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
589 </ul></dd>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
590 </dl>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
591 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
592
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
593 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
594 <h1>今後の課題</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
595 <p class="subtitle"></p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
596 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
597 <li>Real-time、組込み向けに実用的なCbCプログラムの例題が欲しい</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
598 <li>タブロー方を用いた検証</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
599 <li>TaskManagerのCbC実装</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
600 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
601 <p class="subtitle">CbC言語の今後</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
602 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
603 <li>オブジェクティブなCbCの設計</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
604 <li>データセグメントの導入</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
605 <li>スケジューラのためのリフレクション</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
606 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
607 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
608
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
609
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
610 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
611 <h1>おわり</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
612 <p class="subtitle">ありがとうございました</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
613 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
614
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
615
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
616
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
617
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
618
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
619
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
620
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
621
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
622
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
623
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
624
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
625
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
626
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
627
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
628
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
629
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
630
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
631
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
632
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
633
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
634 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
635 <h1>Continuation based C</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
636 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
637 <li>言語仕様</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
638 <li>return-callから軽量継続へ</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
639 <li>コードセグメント</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
640 <li>状態遷移に適した言語</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
641 <li>Cとの互換性</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
642 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
643 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
644
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
645
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
646 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
647 <h1></h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
648 <p class="subtitle"></p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
649 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
650 <li></li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
651 <li></li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
652 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
653 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
654 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
655 <h1></h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
656 <p class="subtitle"></p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
657 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
658 <li></li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
659 <li></li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
660 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
661 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
662
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
663 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
664 <h1></h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
665 <p class="subtitle"></p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
666 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
667 <li></li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
668 <li></li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
669 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
670 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
671
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
672
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
673 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
674 <h1>First: PowerPCでの間接継続</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
675 <p class="subtitle"></p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
676 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
677 <li></li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
678 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
679 <p class="subtitle"></p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
680 <div style="width:70%;margin:1em auto 0;">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
681 <pre><code>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
682 </code></pre>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
683 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
684 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
685
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
686 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
687 <h1>継続制御での並列代入</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
688 <p class="subtitle" style="margin:0 1em 0.1em;">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
689 本当に最適化で余分なコードが消えるのか?
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
690 </p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
691 <div style="width:45%;float:left;margin-left:1em;">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
692 最適化しない場合
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
693 <pre style="margin-top:0"><code> _test:
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
694 stwu r1,-64(r1)
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
695 mr r30,r1
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
696 stw r3,88(r30)
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
697 stw r4,92(r30)
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
698 stw r5,96(r30)
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
699 lwz r0,92(r30)
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
700 stw r0,32(r30)
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
701 lwz r0,96(r30)
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
702 addic r0,r0,1
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
703 stw r0,28(r30)
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
704 lwz r0,88(r30)
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
705 stw r0,24(r30)
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
706 lwz r3,32(r30)
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
707 lwz r4,28(r30)
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
708 lwz r5,24(r30)
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
709 addi r1,r30,64
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
710 lwz r30,-8(r1)
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
711 lwz r31,-4(r1)
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
712 b L_next$stub
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
713 </code></pre>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
714 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
715 <div style="width:45%;float:right;margin-right:1em;">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
716 最適化した場合
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
717 <pre><code>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
718 _test:
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
719 mr r0,r3
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
720 mr r3,r4
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
721 mr r4,r5
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
722 mr r5,r0
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
723 b L_next$stub
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
724 </code></pre>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
725 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
726 <div style="width:50%;float:right">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
727 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
728 <li>r3:=a, r4:=b, r5:=c</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
729 <li>最適化しないとload, storeが満載</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
730 <li>最適化すると無駄なload, store命令が消えている</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
731 <li>実際はr0を使って4命令で入れ替えられる!</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
732 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
733 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
734 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
735
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
736
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
737 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
738 <h1>継続とはなんなのか?</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
739 <p class="subtitle">継続</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
740 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
741 <li>現在の処理を続行するための情報
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
742 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
743 <li>Cならば続く命令のアドレスや</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
744 <li>命令に必要な値、</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
745 <li>スタックなど、その環境全てを含む</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
746 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
747 </li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
748 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
749 <p class="subtitle">CbCでの軽量継続</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
750 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
751 <li>継続からスタックに関する情報を落とす</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
752 <li>続く命令とデータのみのシンプルな継続</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
753 <li>命令は<em>コードセグメント</em>、引数は<em>インタフェイス</em>と呼ばれる</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
754 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
755 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
756
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
757 <div class="slide" style="font-size:95%;">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
758 <h1>コードセグメントと軽量継続の記述</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
759 <pre style="float:right; width-max:45%">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
760 <code>typedef code (*NEXT)(int);
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
761 int main(int argc, char **argv) {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
762 int i;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
763 i = atoi(argv[1]);
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
764 goto factor(i, print_fact);
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
765 }
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
766 <em>code factor(int x, NEXT next)</em> {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
767 goto factor0(1, x, next);
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
768 }
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
769 code factor0(int prod,int x,NEXT next) {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
770 if (x &gt;= 1) {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
771 goto factor0(prod*x, x-1, next);
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
772 } else {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
773 <em>goto (*next)(prod);</em>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
774 }
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
775 }
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
776 code print_fact(int value) {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
777 printf("factorial = %d\n", value);
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
778 exit(0);
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
779 } </code></pre>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
780 <p class="subtitle">実際のプログラム記述は?</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
781 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
782 <li>コードセグメント定義
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
783 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
784 <li><code>codeキーワードで宣言</code></li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
785 <li>書式は関数と同じ</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
786 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
787 </li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
788 <li>軽量継続制御
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
789 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
790 <li><code>goto</code>キーワードと引数</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
791 <li>コードセグメントの最初に飛ぶ</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
792 <li>コードセグメントポインタによる間接継続も可能</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
793 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
794 </li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
795 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
796 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
797
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
798 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
799 <h1>Cとの比較について</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
800 <p class="subtitle">quicksort例題をCと比較すると</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
801 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
802 <li>現在のところ、遅くなる</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
803 <li>問題はquicksortという例題では必ずスタックが必要だということ</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
804 <li>例題ではスタックを自前の構造体で用意している</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
805 <li>そのため、ハードウェアで考慮されたスタックよりは遅い</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
806 <li>状態遷移ベースの例題を作りたい</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
807 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
808 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
809
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
810
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
811 <div class="slide" style="font-size:95%;">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
812 <h1>fastcall</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
813 <p class="subtitle">実際の出力アセンブラ</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
814 <div style="width:50%;float:left;margin-left:auto;">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
815 <p style="margin:0;text-align:center">fastcallにした場合</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
816 <pre><code>current:
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
817 subl $12, %esp
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
818 movl $30, 16(%esp)
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
819 movl $20, %edx
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
820 movl $10, %ecx
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
821 addl $12, %esp
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
822 jmp next
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
823 </code></pre>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
824 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
825 <div style="width:50%;float:right;margin-right:auto;">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
826 <p style="margin:0;text-align:center">normalcallの場合</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
827 <pre><code>current:
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
828 pushl %ebp
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
829 movl %esp, %ebp
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
830 movl $30, 16(%ebp)
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
831 movl $20, 12(%ebp)
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
832 movl $10, 8(%ebp)
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
833 leave
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
834 jmp next
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
835 </code></pre>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
836 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
837 <br clear="all" />
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
838 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
839 <li>命令数ではほとんど変化はない</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
840 <li>引数2つがレジスタecxとedxに格納されるようになった</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
841 <li>そのためメモリアクセスが減る</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
842 <li>これで高速化されるはず</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
843 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
844 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
845
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
846 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
847 <h1>First: 性能評価(サイズ比較)</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
848 <p class="subtitle">ファイルサイズの比較</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
849 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
850 <li>組み込み系ではメモリ使用量が肝心</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
851 <li>CbCGCCのサイズ最適化、速度最適化も対象とする</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
852 <li>デバグ情報を付加しない、strip後のファイルサイズを比較</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
853 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
854 <p class="subtitle">結果</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
855 <table>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
856 <tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
857 <td></td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
858 <th>CbCGCC<br/>速度最適化</th>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
859 <th>CbCGCC<br/>サイズ最適化</th>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
860 <th>micro-c</th>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
861 </tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
862 <tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
863 <td>x86/OS X</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
864 <td>9176</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
865 <td>9176</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
866 <td>9172</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
867 </tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
868 <tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
869 <td>x86/Linux</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
870 <td>5752</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
871 <td>5752</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
872 <td>5796</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
873 </tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
874 <tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
875 <td>ppc/OS X</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
876 <td>8576</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
877 <td>8576</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
878 <td>12664</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
879 </tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
880 <tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
881 <td>ppc/Linux</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
882 <td>10068</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
883 <td>10068</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
884 <td>9876</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
885 </tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
886 <tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
887 <td>ppc/PS3</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
888 <td>6960</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
889 <td>6728</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
890 <td>8636</td>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
891 </tr>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
892 </table>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
893 <p class="subtitle">結果考察</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
894 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
895 <li>x86ではファイルサイズの差がない</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
896 <li>ppcではOSによって違うが、OS Xでは3分の2に抑えることができている</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
897 <li>サイズ最適化は必要ない、<em>速度最適化で充分</em></li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
898 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
899 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
900
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
901 <div class="slide">
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
902 <h1>並列代入</h1>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
903 <p class="subtitle">ある条件で末尾呼出が行われなくなる</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
904 <ol>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
905 <li><del>呼出先関数の全引数が占めるスタックサイズが、呼出元関数のそれより大きい場合</del> <em class="weak">解決済み</em></li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
906 <li><em>引数を順にスタックに格納すると、書き込み前のデータが上が着されてしまう場合</em></li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
907 </ol>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
908 <p class="subtitle">問題となる例</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
909 <pre><code>code somesegment(int a, int b, int c) {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
910 /∗ do something ∗/
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
911 goto nextsegment(b, c, a);
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
912 }
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
913 </code></pre>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
914 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
915 <li><code>(a,b,c) = (b,c,a)</code>と本質的に同じ。これが<dfn>並列代入</dfn></li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
916 <li><code>a=b,b=c,c=a</code>ではだめ。aの値が失われる</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
917 <li>必ず一つ(1ワード)以上の一時変数が必要になる</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
918 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
919 <p class="subtitle">次の様に構文木を変更する</p>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
920 <pre><code>code somesegment(int a, int b, int c) {
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
921 int a1, b1, c1;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
922 /∗ do something ∗/
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
923 a1=a; b1=b; c1=c;
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
924 goto nextsegment(b1, c1, a1);
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
925 }
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
926 </code></pre>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
927 <ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
928 <li>これにより、引数順序を考える必要はなくなる</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
929 <li>代わりに、メモリアクセスが大量に発生</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
930 <li>しかし、これはGCCの最適化で除去される</li>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
931 </ul>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
932 </div>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
933
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
934
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
935
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
936 </body>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
937 </html>
67544736317e add slides for recital.
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
938