Mercurial > hg > Papers > 2015 > kaito-lola
annotate presentation/presen.html @ 24:9d2adb662adb
fix title
author | Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 05 Jul 2015 10:33:02 +0900 |
parents | 5fa7d8240579 |
children | 8144b7f25874 |
rev | line source |
---|---|
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1 <!DOCTYPE html> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
2 <html> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
3 <head> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
4 <meta charset='utf-8'> |
24 | 5 <title>Implementing Continuation based language in Clang and LLVM</title> |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
6 <!-- style sheet links --> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
7 <link rel="stylesheet/less" href="themes/blank/projection.css.less" media="screen,projection"> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
8 <link rel="stylesheet/less" href="themes/blank/screen.css.less" media="screen"> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
9 <link rel="stylesheet/less" href="themes/blank/print.css.less" media="print"> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
10 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
11 <link rel="stylesheet/less" href="blank.css.less" media="screen,projection"> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
12 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
13 <!-- add js libs (less, jquery) --> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
14 <script src="js/less-1.1.4.min.js"></script> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
15 <script src="js/jquery-1.7.min.js"></script> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
16 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
17 <!-- S6 JS --> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
18 <script src="js/jquery.slideshow.js"></script> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
19 <script src="js/jquery.slideshow.counter.js"></script> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
20 <script src="js/jquery.slideshow.controls.js"></script> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
21 <script src="js/jquery.slideshow.footer.js"></script> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
22 <script src="js/jquery.slideshow.autoplay.js"></script> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
23 <script> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
24 $(document).ready( function() { |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
25 Slideshow.init(); |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
26 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
27 // Example 2: Start Off in Outline Mode |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
28 // Slideshow.init( { mode: 'outline' } ); |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
29 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
30 // Example 3: Use Custom Transition |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
31 // Slideshow.transition = transitionScrollUp; |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
32 // Slideshow.init(); |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
33 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
34 // Example 4: Start Off in Autoplay Mode with Custom Transition |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
35 // Slideshow.transition = transitionScrollUp; |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
36 // Slideshow.init( { mode: 'autoplay' } ); |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
37 } ); |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
38 </script> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
39 </head> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
40 <body> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
41 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
42 <div class="layout"> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
43 <div id="header"></div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
44 <div id="footer"> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
45 <div align="right"> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
46 <img src="images/concurrency.png" width="200"> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
47 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
48 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
49 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
50 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
51 <div class="presentation"> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
52 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
53 <div class='slide cover'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
54 <table width="90%" height="90%" border="0" align="center"> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
55 <tr> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
56 <td><div align="center"> |
17 | 57 <h1><font color="#808db5">Implementing Continuation based language in Clang and LLVM</font></h1> |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
58 </div></td> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
59 </tr> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
60 <tr> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
61 <td><div align="left"> |
13 | 62 Kaito Tokumori, Shinji Kono <br> |
15 | 63 University of the Ryukyus |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
64 <script> |
13 | 65 document.write("<br>July 5, 2015"); |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
66 </script> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
67 <hr style="color:#ffcc00;background-color:#ffcc00;text-align:left;border:none;width:300%;height:0.2em;"> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
68 </div></td> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
69 </tr> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
70 </table> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
71 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
72 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
73 <div class='slide'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
74 <h2>Objective</h2> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
75 <ul> |
14 | 76 <li>Achieve Reliable computation |
13 | 77 <li>Extract Concurrent Execution Automatically |
78 <li>Modify and Improve software in a Reliable way | |
79 <li>Get more Reusablity | |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
80 </ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
81 <h3>Introducing new units of programming</h3> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
82 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
83 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
84 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
85 <div class='slide'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
86 <h2>Traditional units of programming</h2> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
87 <ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
88 <li>Machine instruction |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
89 <li>Statements of programming language |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
90 <li>Function call / Method |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
91 <li>Module / Class / Interface |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
92 <li>Thread / Process |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
93 <li>Object |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
94 <li>Record / Table |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
95 </ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
96 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
97 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
98 <div class='slide'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
99 <h2>What we want to do with programming units?</h2> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
100 <ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
101 <li>Divide large functions into small parts. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
102 <li>Add hidden arguments without code modification. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
103 <li>Add meta computation. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
104 <li>Extract concurrency from programming units. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
105 </ul> |
13 | 106 <h3>It is not easy to do this in the traditional units.</h3> |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
107 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
108 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
109 <div class='slide'> |
14 | 110 <h2>New programming units</h2> |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
111 <ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
112 <li>Units of programming: code segments, data segments. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
113 <li>Code segments are units of calculation. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
114 <li>Data segments are sets of typed data. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
115 </ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
116 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
117 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
118 <div class='slide'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
119 <h2>Code segments</h2> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
120 <ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
121 <li>Function from input data segments to output data segments. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
122 <li>Code segments have no states. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
123 <li>Access in typed data in the data segments by name. |
14 | 124 <li>Specify code segments to be executed using goto. |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
125 </ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
126 <h3>It is easy to divide or combine.</h3> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
127 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
128 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
129 <div class='slide'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
130 <h2>Data segments</h2> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
131 <ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
132 <li>Set of typed data. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
133 <li>Type signatures are in meta data segments. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
134 <li>Variable and extendable data structure. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
135 <li>Data segments are dominated by connected code segments. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
136 <li>Code segments atomically access connected data segments. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
137 </ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
138 <h3>It is easy to divide or combine.</h3> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
139 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
140 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
141 <div class='slide'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
142 <h2>Meta code / data segments</h2> |
15 | 143 <p>A thread of code segments has a context as a meta data segment</p> |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
144 <ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
145 <li>Execution contexts: Thread |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
146 <li>Type signatures of data segments. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
147 <li>Data segment linkages: Pointer |
13 | 148 <li>Machine code of code segments |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
149 </ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
150 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
151 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
152 <div class='slide'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
153 <h2>Continuation based C (CbC)</h2> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
154 <ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
155 <li>An implementation of code segments. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
156 <li>CbC stands for Continuation based C. |
13 | 157 <li>Basic syntax is the same as the C, except __code and goto. |
158 <li>__code is a type of code segment | |
159 <li>Code segments end with parameterized goto. | |
14 | 160 <li>Data segments are implemented as C structures. |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
161 </ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
162 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
163 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
164 <div class='slide'> |
13 | 165 <h2>code segment syntax</h2> |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
166 <table border='1' align='center' width='80%'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
167 <tr><td width='50%'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
168 <pre class='small_code'> |
9 | 169 __code f() { |
170 goto g(); | |
171 } | |
172 | |
173 __code g() { | |
174 goto h(); | |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
175 } |
9 | 176 </pre> |
177 </td><td valign='top'> | |
178 <ul> | |
13 | 179 <li>code segment transition is goto. |
180 <li>Code segments have no return statement. | |
9 | 181 <li>There are no return values. |
182 </ul> | |
183 </td></tr> | |
184 </table> | |
185 </div> | |
186 | |
187 <div class='slide'> | |
13 | 188 <h2>code segment syntax with data segments</h2> |
22 | 189 <p>data segments are arguments of a code segment and a goto statement.</p> |
9 | 190 <table border='1' align='center' width='80%'> |
191 <tr><td width='50%'> | |
192 <pre class='small_code'> | |
23 | 193 __code code1(<font color='red'>struct Allocate* allocate, |
194 struct Element* element</font>) { | |
4
20257f618ddd
slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
195 element ->value = 10; |
13 | 196 struct List* list = (struct List *)malloc(sizeof( struct List)); |
23 | 197 goto append(<font color='red'>allocate,list, element</font>); |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
198 } |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
199 |
13 | 200 __code append(struct Allocate* allocate, struct List* list, struct Element* element) { |
4
20257f618ddd
slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
201 if(list->head) { |
20257f618ddd
slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
202 list->tail->next = element; |
20257f618ddd
slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
203 } else { |
20257f618ddd
slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
204 list->head = element; |
20257f618ddd
slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
205 } |
20257f618ddd
slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
206 list->tail = element; |
20257f618ddd
slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
207 list->tail->next = 0; |
13 | 208 goto code2(allocate,list, element); |
4
20257f618ddd
slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
209 } |
20257f618ddd
slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
210 </pre> |
23 | 211 </tr> |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
212 </table> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
213 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
214 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
215 <div class='slide'> |
22 | 216 <h2>CbC meta computation</h2> |
217 <p> add meta part to both code and data, keep object level computation</p> | |
218 <div align="center"><img src="fig/meta.svg" width="45%"></div> | |
219 </div> | |
220 | |
221 <div class='slide'> | |
222 <h2>meta computation example</h2> | |
223 <ul> | |
224 <li> pointer operation | |
225 <li> code/data segment interconnection | |
226 <li> memory management (malloc) | |
227 <li> thread management | |
228 <li> synchronization | |
229 <li> data segment signature | |
230 </ul> | |
231 </div> | |
232 | |
233 <div class='slide'> | |
234 <h2>list with meta data segment</h2> | |
235 <p> In cons cell, pointer part is visible to object level.</p> | |
236 <p> Hide pointer part in meta data segment.</p> | |
237 <p> Handle pointer operation in meta code segment.</p> | |
238 <div align="center"><img src="fig/list.svg" width="45%"></div> | |
239 </div> | |
240 | |
241 | |
242 <div class='slide'> | |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
243 <h2>CbC compilers</h2> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
244 <ul> |
13 | 245 <li>Micro-C(one pass standalone compiler) 2001 |
246 <li>on GCC(GNU Compiler Collection) 2008 | |
247 <li>on LLVM and Clang (Compiler framework) 2014 | |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
248 <ul> |
4
20257f618ddd
slide: llvm structure
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
249 <li><font color='red'>The latest!</font> |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
250 </ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
251 </ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
252 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
253 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
254 <div class='slide'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
255 <h2>LLVM and Clang's compilation flow</h2> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
256 <ul> |
13 | 257 <li>AST : Abstract Syntax Tree (C++ object) |
258 <li>LLVM IR is Intermediate Representation (bit code). | |
14 | 259 <li>SelectionDAG : Code generator internal |
13 | 260 <li>Machine Code : LLVM Machine code |
19 | 261 <li>Clang translate C/C++/Obj-C into LLVM IR. |
262 <li>LLVM translate LLVM IR into Assembly code. | |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
263 </ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
264 <div align="center"><img src="fig/clang_llvm_structure.svg" width="45%"></div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
265 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
266 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
267 <div class='slide'> |
13 | 268 <h2>Advantage of LLVM implementation</h2> |
9 | 269 <ul> |
13 | 270 <li>Apple supported (working on OS X). |
271 <li>OS X default compiler. | |
272 <li>LLVM IR is well documented. | |
273 <li>better than GCC | |
9 | 274 </ul> |
275 </div> | |
276 | |
277 <div class='slide'> | |
13 | 278 <h2>CbC implementation strategy</h2> |
9 | 279 <ul> |
14 | 280 <li>define special type __code for code segments |
281 <li>no code segment prototyping (otherwise it becomes quite messy ) | |
13 | 282 <li>code segments are implemented as tail call force functions |
14 | 283 <li>Do not modify IR (Intermediate representations ) |
284 <li>goto statement is actually a function call with following return statement <br> | |
13 | 285 goto f() --> { f() ; return; } |
286 <li>allow mixing code segments and normal function calls ( goto with environment ) | |
9 | 287 </ul> |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
288 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
289 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
290 <div class='slide'> |
9 | 291 <h2>LLVM IR</h2> |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
292 <ul> |
13 | 293 <li>Intermediate Representation (bit code). |
294 <li>Three forms: in-memory IR, bitcode stream, human readable language. | |
295 <li>it has precise type, data size, alignment | |
21 | 296 <li>function call flags : tail, fastcc, cc10(GHC), cc11(HiPE), ccc |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
297 </ul> |
9 | 298 <table width='100%'> |
299 <tr> | |
300 <td style="border: double;"> | |
301 <pre class='code'> | |
302 define fastcc void @factorial(i32 %x) #0 { | |
303 entry: | |
304 tail call fastcc void @factorial0(i32 1, i32 %x) | |
305 ret void | |
306 } | |
307 </pre> | |
308 </td> | |
309 </tr> | |
310 </table> | |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
311 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
312 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
313 <div class='slide'> |
13 | 314 <h2>CbC implementation strategy</h2> |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
315 <ul> |
13 | 316 <li>Code segments are implemented by C functions with return-type __code. |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
317 <li>Data segments are implemented by C structs. |
14 | 318 <li>Goto statement is implemented by setting tail call flag. |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
319 <li>Goto with environment is implemented by setjmp and longjmp. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
320 </ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
321 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
322 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
323 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
324 <div class='slide'> |
9 | 325 <h2>Prototype declaration generating</h2> |
326 <ul> | |
327 <li>In CbC, programmer write a lot of code segments. | |
12 | 328 <li>Automatically prototype declarator support it. |
329 <!-- <li>When parser meet a code segment call, it stop current parsing and search called code segment declaration.--> | |
14 | 330 <li>If the declaration was not found, search definition and generate declaration. |
9 | 331 <ul> |
332 <li>Of course you can write declaration yourself too. | |
333 </ul> | |
334 </ul> | |
335 <table border='1' width='80%' align='center'> | |
336 <tr> | |
337 <td>original input code | |
14 | 338 <td>Clang generates it internally |
9 | 339 </tr> |
340 <tr> | |
341 <td><pre class='small_code'> | |
342 __code code1(int a, int b) { | |
343 : | |
344 goto code2(a,b); | |
345 } | |
346 | |
347 __code code2(int a, int b){ | |
348 : | |
349 } | |
350 </pre> | |
351 <td><pre class='small_code'> | |
352 <font color='red'>__code code2(int a, int b);</font> | |
353 __code code1(int a, int b) { | |
354 : | |
355 goto code2(a,b); | |
356 } | |
357 | |
358 __code code2(int a, int b){ | |
359 : | |
360 } | |
361 </pre> | |
362 </tr> | |
363 </table> | |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
364 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
365 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
366 <div class='slide'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
367 <h2>goto syntax for transition</h2> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
368 <ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
369 <li>Add return statement after goto transition. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
370 <li>It is one the requirement force to tail call elimination. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
371 </ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
372 <table border='1' width='80%' align='center'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
373 <tr> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
374 <td>original input code |
14 | 375 <td>Clang generates it |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
376 </tr> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
377 <tr> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
378 <td><pre class='small_code'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
379 __code code1() { |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
380 : |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
381 goto code2(); |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
382 } |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
383 </pre> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
384 <td><pre class='small_code'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
385 void code1() { |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
386 : |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
387 code2(); |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
388 <font color='red'>return;</font> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
389 } |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
390 </pre> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
391 </tr> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
392 </table> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
393 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
394 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
395 <div class='slide'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
396 <h2>Forcing Tail Call Elimination</h2> |
20 | 397 <p>Tail call elimination pass is added in CodeGen.</p> |
13 | 398 <p>Ensure TCE in SelectionDAGISel.</p> |
11 | 399 <div align='center'><img src="fig/clang_llvm_slide_cg_DAG.svg" width="60%"></div> |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
400 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
401 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
402 <div class='slide'> |
11 | 403 <h2>What is tail call elimination?</h2> |
9 | 404 <ul> |
13 | 405 <li>Tail call is a function call immediately followed by return. |
406 <li>If stack frame have to be unchanged, | |
9 | 407 <li>Tail call elimination replace tail call's call instructions with jmp instructions. |
13 | 408 <li>that is tail call function should have the same arguments and the same return type |
9 | 409 </ul> |
410 <div align='center'><img src="fig/TCE.svg" width="40%"></div> | |
411 </div> | |
412 | |
413 | |
414 <div class='slide'> | |
5 | 415 <h2>Forcing Tail Call Elimination</h2> |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
416 <ul> |
9 | 417 <li>Always add tail call elimination pass. |
418 <li>Tailcallopt is enabled in CbC. | |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
419 <li>Fast cc is used consistently in code segments call. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
420 <li>All the code segments return value type is void. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
421 </ul> |
21 | 422 <p>These are the reason why we need __code type for code segments.</p> |
13 | 423 </div> |
424 | |
425 <div class='slide'> | |
426 <h2>goto a code segment from a normal C function</h2> | |
427 <ul> | |
14 | 428 <li>Assume we have code segment g and normal function f |
22 | 429 <li>simply goto g in C function f |
430 <li>code segment g never returns to function f | |
13 | 431 </ul> |
15 | 432 <p>How to return to C from a code segment?</p> |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
433 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
434 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
435 <div class='slide'> |
12 | 436 <h2>Goto with environment</h2> |
22 | 437 <ul> |
438 <li>We want provide continuation of function f. | |
439 <li>The continuation is not a simple code segment because code segment has no state. | |
440 <li>We represent the continuation with a code segment (__return) and a meta data segment (__environment). | |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
441 </ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
442 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
443 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
444 <div class='slide'> |
13 | 445 <h2>Syntax of Goto with environment</h2> |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
446 <table width='100%'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
447 <tr><td valign='top'> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
448 <ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
449 <li>Use new keywords __return and __environment. |
22 | 450 <li>__return is a code segment pointer for C functions caller. |
451 <li>__environment is a environment for C functions caller. | |
23 | 452 <li>G use a continuation with environments to return main function (f's caller). |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
453 </ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
454 <td style="border: double;"> |
22 | 455 <pre class='small_code'><div class='highlight'>__code g(int n,__code(*exit_code)(int,void *),void *exit_env){ |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
456 printf("code1 : code entry1\n"); |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
457 goto exit_code(n,exit_env); |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
458 } |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
459 |
22 | 460 int f(){ |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
461 printf("caller : main1 entry\n"); |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
462 __code (*__ret)(int, void *) = <font color='red'>__return</font>; |
24 | 463 void *__env = <font color='red'>__environment</font>; |
22 | 464 goto g(1, __ret, __env); |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
465 return 0; |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
466 } |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
467 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
468 int main(){ |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
469 int n; |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
470 n = caller(); |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
471 printf("return = %d\n",n); |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
472 return 0; |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
473 } </div></pre> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
474 </tr> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
475 </table> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
476 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
477 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
478 <div class='slide'> |
13 | 479 <h2>Implementation of goto with environment</h2> |
15 | 480 <p>Several ways to implementation</p> |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
481 <ul> |
14 | 482 <li>setjmp/longjmp (LLVM) |
13 | 483 <li>nested function closure with thread safe variable (GCC) |
484 <li>direct manipulation of frame pointer and return value (Micro-C) | |
485 </ul> | |
486 </div> | |
487 | |
488 <div class='slide'> | |
489 <h2>LLVM Implementation of goto with environment</h2> | |
490 <ul> | |
491 <li>Include setjmp.h internally. | |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
492 <li>Generate C struct for saving environment. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
493 <ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
494 <li>This struct is __environment. |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
495 </ul> |
16 | 496 <li>Insert setjmp in C function, when __return is used. |
497 <li>Generate longjmp code segment as __return. | |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
498 </ul> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
499 </div> |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
500 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
501 |
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
502 <div class='slide'> |
5 | 503 <h2>Compiling result</h2> |
504 <table width='100%' align='center' border='1'> | |
505 <tr> | |
506 <td valign='top'> | |
507 <pre class='small_code'> | |
508 | |
509 __code caller(int x) | |
510 { | |
511 goto code1(1, x); // should be jmp | |
512 } | |
513 </pre> | |
514 <td> | |
515 <pre class='small_code'> | |
516 _caller: ## @factorial | |
517 .cfi_startproc | |
518 ## BB#0: ## %entry | |
519 subq $24, %rsp | |
520 Ltmp5: | |
521 .cfi_def_cfa_offset 32 | |
522 movl $1, %eax | |
523 movl %edi, 20(%rsp) ## 4-byte Spill | |
524 movl %eax, %edi | |
525 movl 20(%rsp), %esi ## 4-byte Reload | |
526 addq $24, %rsp | |
527 <font color='red'>jmp</font> _code1 ## TAILCALL | |
528 .cfi_endproc | |
529 </pre> | |
530 </tr> | |
531 </table> | |
532 <ul> | |
533 <li>Code1 should called by jmp instruction. | |
534 <li>In assembly code, code1 called by jmp instruction. | |
535 <li>Tail call elimination was forced. | |
536 <li>If tail call elimination was failed, compiler output error messages. | |
537 </ul> | |
538 </div> | |
16 | 539 |
540 <div class='slide'> | |
541 <h2>Usage of CbC : as an instruction description</h2> | |
542 <p>CbC can be used as a hardware description language (RTL level)</p> | |
543 <ul> | |
544 <li>VU (Vector unit) in PS2 | |
23 | 545 <li>SPU (Synergistic Processing Unit) in PS3 |
16 | 546 </ul> |
547 </div> | |
548 | |
549 <div class='slide'> | |
550 <h2>Usage of CbC : Parallel Task representation</h2> | |
551 <p>CbC can be used as a parallel programming language</p> | |
552 <ul> | |
553 <li>run on GPU or Many Core | |
554 <li>a code segment is a kernel in Open CL | |
555 <li>a code segment execution is atomic | |
556 <li>during an execution of code, data segments are owned by the code | |
557 <li>task structure is a meta data segment | |
558 <li>task manager is a meta code segment | |
559 </ul> | |
560 </div> | |
561 | |
562 <div class='slide'> | |
563 <h2>Usage of CbC : OS API description</h2> | |
564 <ul> | |
565 <li>detailed description of open/read/write/select | |
566 <li>we can implement kernel in CbC | |
567 </ul> | |
568 </div> | |
569 | |
570 <div class='slide'> | |
571 <h2>Usage of CbC : meta computation</h2> | |
572 <ul> | |
573 <li>call meta code segment during goto | |
574 <li>thread context is a meta data segment | |
575 <li>it can be seen as a monadic meta computation | |
576 </ul> | |
577 </div> | |
578 | |
579 <div class='slide'> | |
580 <h2>Usage of CbC : Model checking</h2> | |
581 <ul> | |
582 <li>try all possible non deterministic computation | |
583 <li>keep track data segment state | |
584 <li>Do the model checking without modifying the code | |
585 <li>cf. Java Pathfinder (Model checking by replacing JVM) | |
586 </ul> | |
587 </div> | |
588 | |
589 <div class='slide'> | |
590 <h2>Conclusion</h2> | |
591 <ul> | |
592 <li>CbC compiler on LLVM and Clang is implemented. | |
593 <li>LLVM IR is not modified. | |
594 <li>goto with environment is implemented by setjmp and longjmp. | |
595 <li>Automatic prototype generating. | |
596 <li>Various application of CbC. | |
597 </ul> | |
598 </div> | |
599 | |
600 <div class='slide'> | |
601 <h2>Future works</h2> | |
602 <ul> | |
603 <li>Write operating system in CbC. | |
604 <ul> | |
605 <li>Gears OS | |
606 </ul> | |
607 <li>Meta computation syntax. | |
608 <li>More user friendly syntax. | |
609 <li>Automatic data segment generator. | |
610 <li>Signature for data segment. | |
611 <li>Dependent type and implicit parameter | |
612 </ul> | |
613 </div> | |
614 | |
615 <div class='slide'> | |
616 <h2>LLVM and Clang's intermediate representations</h2> | |
617 <table border='1' align='center' width='80%'> | |
618 <tr><td width='25%'> | |
619 Name | |
620 </td><td> | |
621 Description | |
622 </td></tr> | |
623 <tr><td> | |
624 clang AST | |
625 </td><td> | |
626 Abstract Syntax Tree. It is a representation of the structure source codes. | |
627 </td></tr> | |
628 <tr><td> | |
629 LLVM IR | |
630 </td><td> | |
631 The main intermediate representation of LLVM. It has three different forms: as an in-memory compiler IR, as an on-disk bitcode representation, and as a human readable assembly language representation. | |
632 </td></tr> | |
633 <tr><td> | |
634 SelectionDAG | |
635 </td><td> | |
636 Directed Acyclic Graph. Its nodes indicate what operation the node performs and the operands to the operation. | |
637 </td></tr> | |
638 <tr><td> | |
639 Machine Code | |
640 </td><td> | |
641 This representation is designed to support both an SSA representation for machine code, as well as register allocated, non-SSA form. | |
642 </td></tr> | |
643 <tr><td> | |
644 MC Layer | |
645 </td><td> | |
646 It is used to represent and process code at the raw machine code level. User can some kinds of file (.s, .o, .ll, a.out) by same API. | |
647 </td></tr> | |
648 </table> | |
649 </div> | |
24 | 650 |
651 <div class='slide'> | |
652 <h2>Calling Convention</h2> | |
653 <table border='1' align='center' width='80%'> | |
654 <tr><td width='25%'> | |
655 Name | |
656 </td><td> | |
657 Description | |
658 </td></tr> | |
659 <tr><td> | |
660 ccc | |
661 </td><td> | |
662 C calling conbentions.<br> | |
663 This calling convention supports varargs function calls and tolerates some mismatch in the declared prototype and implemented declaration of the function. | |
664 </td></tr> | |
665 <tr><td> | |
666 cc10 | |
667 </td><td> | |
668 This calling convention has been implemented specifically for use by the Glasgow Haskell Compiler (GHC). | |
669 </td></tr> | |
670 <tr><td> | |
671 cc11 | |
672 </td><td> | |
673 This calling convention has been implemented specifically for use by the High-Performance Erlang (HiPE) compiler. | |
674 </td></tr> | |
675 <tr><td> | |
676 fastcc | |
677 </td><td> | |
678 This calling convention attempts to make calls as fast as possible. | |
679 </td></tr> | |
680 </table> | |
681 </div> | |
682 | |
5 | 683 <div class='slide'> |
6 | 684 <h2>Execution Result</h2> |
685 <ul> | |
686 <li>Conv1 program. | |
687 <ul> | |
688 <li>Repeat calculation program. | |
689 <li>Stack is defined in the program. | |
690 </ul> | |
691 <li>Select execution code by arguments. | |
692 <ul> | |
693 <li>1: not optimized. | |
694 <li>2,3: optimized stack operation. | |
695 </ul> | |
696 <li>Inline optimization is omitted. | |
697 </ul> | |
698 <table width='80%' align='center' border='1'> | |
699 <tr> | |
700 <td width='30%'> | |
701 <td>Argument 1 | |
702 <td>Argument 2 | |
703 <td>Argument 3 | |
704 </tr> | |
705 <tr> | |
706 <td>Micro-C | |
707 <td>6.875 | |
708 <td>2.4562 | |
709 <td>3.105 | |
710 </tr> | |
711 <tr> | |
712 <td>GCC -O2 | |
713 <td>2.9438 | |
714 <td>0.955 | |
715 <td>1.265 | |
716 </tr> | |
717 <tr> | |
718 <td>LLVM and Clang -O0 | |
719 <td>5.835 | |
720 <td>4.1887 | |
721 <td>5.0625 | |
722 </tr> | |
723 <tr> | |
724 <td>LLVM and Clang -O2 | |
725 <td>3.3875 | |
726 <td>2.29 | |
727 <td>2.5087 | |
728 </tr> | |
729 </table> | |
730 <table width='80%' align='center' border='0'> | |
731 <tr><td align='right'>unit : seconds</tr> | |
732 </table> | |
733 <ul> | |
734 <li>LLVM and Clang compilers are faster than Micro-C when optimize is enabled. | |
735 <li>CbC gets benefits from LLVM optimizations. | |
736 <li>LLVM can compile CbC examples. | |
737 </ul> | |
738 </div> | |
24 | 739 |
740 </div> <!-- presentation --> | |
741 </body> | |
3
c50a033e6635
create presentation slide
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
742 </html> |