annotate slide.tex @ 6:3436da54f678

*** empty log message ***
author kent
date Wed, 02 Jul 2008 11:02:49 +0900
parents 448fb638bfa0
children 657e392afc09
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
1 % File: slide.tex
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
2 % Created: 火 6 24 12:51 PM 2008 J
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
3 % Last Change: 火 6 24 12:51 PM 2008 J
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
4 %
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
5 \documentclass[mathserif]{beamer}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
6 \usepackage{graphicx}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
7 \usepackage{verbatim}
6
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
8 \usepackage{ulem}
4
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
9 %\usepackage{beamerthemesplit}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
10 %manual% open /usr/local/ptetex/share/texmf-dist/doc/latex/beamer/beameruserguide.pdf
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
11
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
12 \title[CbC on GCC]{組み込み向け低レベル言語 CbC の GCC による実装}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
13 \author{与儀 健人 \and 河野真治}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
14 \institute[IE Ryukyu Univ]{琉球大学大学院理工学研究科情報工学専攻}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
15 \date{\today}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
16
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
17 \usetheme{Boadilla}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
18 %\usetheme{default}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
19 %\useoutertheme[subsection=false]{smoothbars}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
20 %\useoutertheme{infolines}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
21 \renewcommand{\kanjifamilydefault}{gt}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
22
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
23 %
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
24 %
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
25 % 研究内容
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
26 % CbC例
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
27 % GCC
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
28 % Tailcall
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
29 % 評価
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
30 % 環境付きgoto
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
31 % 今後の研究内容( 検証? REP マージャーの検証、タブロー法等 )
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
32 %
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
33 %
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
34
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
35 \begin{document}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
36
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
37 \begin{frame}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
38 \titlepage
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
39 \end{frame}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
40
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
41 \section{背景}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
42 \begin{frame}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
43 \frametitle{研究背景}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
44 \begin{exampleblock}{Background}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
45 \begin{itemize}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
46 \item 近年、情報技術の発展により、ソフトウェアは大規模
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
47 かつ複雑化する傾向にある。
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
48 \item また、日常にあふれる様々な家電にもコンピュータが使われるようになり、
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
49 組み込みソフトウェアの需要が拡大している。
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
50 % 近年、情報技術の発展により、
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
51 % ソフトウェアは大規模かつ複雑化する傾向にあります。
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
52 % おなじ理由で、市場に出回る家電には冷蔵庫や洗濯機、電子ジャーやコーヒーメーカーに
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
53 % いたるまで組み込み系のソフトおよびOSが使われるようになりました。
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
54 \end{itemize}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
55 \end{exampleblock}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
56 %\begin{exampleblock}{Problem}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
57 \begin{Problem}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
58 \begin{itemize}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
59 \item 複雑化したソフトウェアの正当性(Validity)を保証できるか?
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
60 \item 組み込みソフトやOSの記述に最適な言語とは?
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
61 %
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
62 %
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
63 %
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
64 \end{itemize}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
65 \end{Problem}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
66 %\end{exampleblock}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
67 \end{frame}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
68
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
69 \begin{frame}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
70 \frametitle{研究内容}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
71 \begin{exampleblock}{Continuation based C (CbC)}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
72 \begin{itemize}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
73 \item Cよりも下位、アセンブラより上位の言語
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
74 \item 入力、出力インターフェイスの組み合わせから、検証を自身で表現できる
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
75 \item OS、デバイスドライバ、ハードウェアの記述が可能
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
76 \end{itemize}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
77 \end{exampleblock}
6
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
78 \begin{exampleblock}{Recent works}
4
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
79 \begin{itemize}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
80 \item Micro-Cによる実装 (i386,PPC,mips,spu,arm)
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
81 \item タブロー法によるCbCプログラムの検証
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
82 %タブロー法を用いたContinuation based Cプログラムの検証, 下地 篤樹, 河野 真治(琉球大学) 日本ソフトウェア科学会第23回大会論文集, Sep, 2006
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
83 \item CbCによるハードウェア記述
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
84 %検証を自身で表現できるハードウェア、ソフトウェア記述言語 Continuation based C と、そのCell への応用 , 河野 真治 (琉球大学), 電子情報通信学会VLSI設計技術研究会, March, 2008
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
85 \item 組み込みソフトウェアへの適用
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
86 %継続を基本とするプログラム単位を用いた組込みシステム開発 , 河野 真治 (琉球大学), 組み込みソフトウェア工学シンポジウム2003, Oct,2003
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
87 \end{itemize}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
88 \end{exampleblock}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
89 \end{frame}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
90
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
91 \begin{frame}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
92 \frametitle{GCCによるCbCコンパイラの実装}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
93 \begin{exampleblock}{Why is it needed?}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
94 \begin{itemize}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
95 \item 十数種のアーキテクチャへの対応が可能
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
96 \item 構文木、RTLレベルでの高度な最適化
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
97 \item
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
98 \item Tailcallを使った実装方法が示されている
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
99 \end{itemize}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
100 \end{exampleblock}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
101 \end{frame}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
102
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
103 \begin{comment}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
104 \frametitle{目標}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
105 \begin{exampleblock}{Purposes}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
106 \begin{itemize}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
107 \item アセンブラとC言語の中間にあたる
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
108 \item 組み込み、OS、デバイスドライバの記述に適した、
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
109 \item 検証を自身で表現できる
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
110 \end{itemize}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
111 \end{exampleblock}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
112 \begin{exampleblock}{past Research}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
113 \begin{itemize}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
114 \item Micro-Cによる Continuation based C の開発 [Sep,2000]
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
115 \item C言語からContinuation based Cへの変換 [Jul,2001]
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
116 \item タブロー法を用いたContinuation based Cプログラムの検証 [Sep,2006]
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
117 \end{itemize}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
118 \end{exampleblock}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
119 \end{comment}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
120
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
121 \begin{comment}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
122 \frametitle{CbCの現状}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
123 \begin{exampleblock}{Recent work}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
124 \begin{itemize}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
125 \item Micro-Cによる実装 (i386,PPC,mips,spu,arm)
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
126 \item タブロー法によるCbCプログラムの検証
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
127 %タブロー法を用いたContinuation based Cプログラムの検証, 下地 篤樹, 河野 真治(琉球大学) 日本ソフトウェア科学会第23回大会論文集, Sep, 2006
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
128 \item CbCによるハードウェア記述
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
129 %検証を自身で表現できるハードウェア、ソフトウェア記述言語 Continuation based C と、そのCell への応用 , 河野 真治 (琉球大学), 電子情報通信学会VLSI設計技術研究会, March, 2008
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
130 \item 組み込みソフトウェアへの適用
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
131 %継続を基本とするプログラム単位を用いた組込みシステム開発 , 河野 真治 (琉球大学), 組み込みソフトウェア工学シンポジウム2003, Oct,2003
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
132 \end{itemize}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
133 \end{exampleblock}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
134 \end{comment}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
135
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
136 \section{CbC}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
137 \begin{frame}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
138 \frametitle{Continuation based Cについて}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
139 \begin{exampleblock}{What is it?}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
140 \begin{itemize}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
141 \item 琉球大学 並列信頼研究室で開発
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
142 \item 構文はC言語とほぼ同じ
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
143 \item 関数の撤廃、コードセグメントの導入
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
144 \item コードセグメントを繋ぐ``継続''
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
145 \end{itemize}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
146 \end{exampleblock}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
147 \end{frame}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
148
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
149 \begin{frame}[fragile]
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
150 \frametitle{CbCコード例}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
151 \begin{columns}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
152 \column{.4\textwidth}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
153 \flushleft \small
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
154 \begin{verbatim}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
155 __code while_process(int total,int count){
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
156 total += count;
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
157 count++;
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
158 goto while_cond(total, count);
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
159 }
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
160 __code while_cond(int total, int count){
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
161 if ( count <= 100 ){
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
162 goto while_process(total, count);
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
163 }else{
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
164 goto while_end(total);
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
165 }
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
166 }
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
167 __code while_end(int total){
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
168 goto cs_exit(0);
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
169 }
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
170 \end{verbatim}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
171 \column{.1\textwidth}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
172 \column{.3\textwidth}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
173 \flushright
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
174 a%\includegraphics[width=\textwidth]{figures/CbC-loop.eps}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
175 \end{columns}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
176 \end{frame}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
177
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
178 \begin{frame}[fragile]
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
179 \frametitle{実装に必要な構文}
6
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
180 構文は以下の二つが通れば良い。
4
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
181 \begin{itemize}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
182 \huge
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
183 \item \verb|__code cs(int a, char *b)|
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
184 \item \verb|goto cs(10, "abc");|
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
185 \end{itemize}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
186 \end{frame}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
187
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
188 \section{GCC}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
189 \begin{frame}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
190 \frametitle{GNU Compiler Collection}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
191 \begin{itemize}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
192 \item UNIXにおける標準的なコンパイラ
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
193 \item C, C++, java, FORTRAN, Ada ..
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
194 \item i386, PowerPC, MIPS, SPARC ..
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
195 \item 強力な最適化機構
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
196 \item コンパイルだけでなくas, ldなどの統合環境
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
197 \end{itemize}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
198 \end{frame}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
199
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
200 \begin{frame}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
201 \frametitle{GCCコンパイルパス}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
202 \begin{columns}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
203 \column{.5\textwidth}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
204 a%\includegraphics[width=\textwidth]{figures/GCC-pass-slide.eps}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
205 \column{.4\textwidth}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
206 \begin{description}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
207 \item[Generic Tree] 構文木
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
208 \item[GIMPLE] SSA
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
209 \item[RTL] 中間コード
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
210 \end{description}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
211 \end{columns}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
212 \end{frame}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
213
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
214
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
215 \section{Tail call}
6
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
216
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
217 \begin{frame}
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
218 \frametitle{Tail call elimination}
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
219 \begin{exampleblock}{Waht is it?}
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
220 \begin{itemize}
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
221 \item 関数呼び出しに関する最適化
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
222 \item call命令じゃなく、jmp命令を使用する (i386)
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
223 \item スタックを拡張せず、現在のスタックフレームを書き潰す
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
224 \end{itemize}
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
225 \end{exampleblock}
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
226 GCCへの実装ではこの最適化を利用して行う
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
227 \end{frame}
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
228
4
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
229 \begin{frame}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
230 \frametitle{Tail call elimination}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
231 a%\includegraphics[width=.9\textwidth]{figures/GCC-TailCall.eps}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
232 \end{frame}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
233
6
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
234 \begin{comment}[fragile]
4
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
235 \begin{columns}[t]
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
236 \column{.5\textwidth}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
237 \begin{verbatim}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
238 A:
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
239 pushl %ebp
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
240 movl %esp, %ebp
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
241 subl $24, %esp
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
242 movl 20(%ebp), %eax
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
243 addl 16(%ebp), %eax
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
244 movl %eax, 8(%esp)
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
245 movl 12(%ebp), %eax
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
246 movl %eax, 4(%esp)
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
247 movl 8(%ebp), %eax
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
248 movl %eax, (%esp)
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
249 call B
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
250 leave
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
251 ret
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
252 \end{verbatim}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
253 \column{.5\textwidth}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
254 \begin{verbatim}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
255 A:
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
256 pushl %ebp
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
257 movl %esp, %ebp
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
258 movl 20(%ebp), %eax
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
259 addl %eax, 16(%ebp)
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
260 popl %ebp
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
261 jmp B
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
262 \end{verbatim}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
263 \end{columns}
6
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
264 \end{comment}
4
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
265
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
266 \begin{frame}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
267 \frametitle{Tail callの条件}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
268 \begin{enumerate}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
269 \item 関数コールがreturnの直前にある
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
270 \item 関数の返す型がcallerとcalleeで一致している
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
271 \item caller側の引数サイズがcallee側の引数サイズより大きいもしくは等しい
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
272 \item 書き込んだ引数が、その後書き込む引数を上書きしてはならない
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
273 \end{enumerate}
6
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
274 %\center
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
275 %\visible<2>{引数をすべて固定数とすることで対応}
4
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
276 \end{frame}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
277
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
278 \section{実装}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
279 \begin{frame}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
280 \frametitle{実装}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
281 \begin{itemize}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
282 \item \_\_code トークンの追加
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
283 \item code segmentのパース \hfill Parser \hspace{5em}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
284 \item gotoのパース \hfill Parser \hspace{5em}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
285 \item code segment/goto を表すGeneric Tree
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
286 \item \alert<2>{tree/RTL変換 (expand\_call)} \hfill RTL Generator \hspace{5em}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
287 \item その他(エラー検出など)
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
288 \end{itemize}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
289 \end{frame}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
290
6
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
291 \begin{comment}
4
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
292 \frametitle{expand\_call}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
293 \begin{exampleblock}{What is the function?}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
294 \begin{itemize}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
295 \item 関数呼び出しのtreeからRTLへ変換する
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
296 \item Tail callが可能ならその最適化を行う
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
297 \item この関数のみで1200行もある
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
298 \item そのほとんどがTail call可否の判定
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
299 \item そして読みづらい
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
300 \end{itemize}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
301 \end{exampleblock}
6
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
302 \end{comment}
4
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
303
6
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
304 \begin{comment}
4
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
305 \frametitle{expand\_cbc\_goto}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
306 \begin{exampleblock}{What is it doing?}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
307 \begin{itemize}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
308 \item code segmentへのgotoを表したtreeをRTLに変換
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
309 \item 無駄なTail call可否判定を削除
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
310 \item Tail callの条件を強制
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
311 \item 確実にTail callを適用
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
312 \item 500行程度
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
313 \end{itemize}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
314 \end{exampleblock}
6
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
315 \end{comment}
4
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
316
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
317 \section{評価}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
318 \begin{frame}[fragile]
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
319 \frametitle{評価(ベンチマーク)}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
320 \begin{itemize}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
321 \item 環境 i386 fedora core
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
322 \item 使用したプログラム conv1
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
323 \end{itemize}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
324 \centering
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
325 \begin{tabular}{|l|r|r|r|r|} \hline
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
326 & ./conv1 0 & ./conv1 1 & ./conv1 2 & ./conv1 3 \\ \hline
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
327 Micro-C & 5.25 & 8.97 & 2.19 & 2.73 \\ \hline \hline
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
328 GCC & 3.69 & 4.87 & 3.08 & 3.65 \\ \hline
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
329 GCC (+omit) & 2.74 & 4.20 & 2.25 & 2.76 \\ \hline
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
330 GCC (+fastcall) & 2.70 & 3.44 & 1.76 & 2.34 \\ \hline \hline
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
331 TCC & 4.15 &122.28& 84.91&102.59\\ \hline
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
332 \end{tabular}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
333 \begin{description}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
334 \item[+omit] -fomit-frame-pointerオプションを付加
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
335 \item[+fastcall] \verb|__attribute__ ((fastcall))|を付加
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
336 \end{description}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
337 \end{frame}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
338
6
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
339 \renewcommand<>{\sout}[1]{\temporal#2{#1}{\beameroriginal{\sout}{#1}}{#1}}
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
340 \section{環境付き継続に関する考察}
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
341 \begin{frame}[fragile]
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
342 \frametitle{環境付き継続}
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
343 %\sout<2>{未実装の構文}\\
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
344 未実装の構文
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
345 %\uncover<2>{新たに実装された構文}
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
346 \begin{verbatim}
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
347 goto cs( 10 ), env;
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
348 \end{verbatim}
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
349 %env = malloc(STACKSIZE);
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
350 \begin{itemize}
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
351 \item envは現在とは別のスタック空間を表す
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
352 \begin{itemize}
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
353 \item mallocで取得
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
354 \item 中断した別スレッドのスッタクフレーム
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
355 \item 関数から継続した場合の元のスタックフレーム
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
356 \end{itemize}
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
357 \item そのenvで表される環境(スタック)へスタックフレームを変更したあと継続する \\
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
358 具体的には\verb|%ebp|を変更
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
359 \end{itemize}
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
360 \end{frame}
4
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
361
6
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
362 \begin{frame}[fragile]
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
363 \frametitle{環境付き継続}
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
364 Micro-CでのCbCでは以下の使い方が主となっている
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
365 \begin{verbatim}
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
366 int func(void){
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
367 /* something */
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
368 goto cs( __environment, __return );
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
369 }
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
370 __code cs(void *env, void *ret){
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
371 /* something */
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
372 goto ret(20), env;
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
373 }
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
374 \end{verbatim}
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
375 このように、\verb|__environment,__return|を使用して、呼び出し元関数の環境へ戻れる。
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
376 この使用方法に限れば、GCCでも実装完了。
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
377 \end{frame}
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
378
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
379 \begin{frame}
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
380 \frametitle{実装方法}
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
381
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
382 \end{frame}
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
383
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
384 \section{まとめ}
4
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
385 \begin{frame}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
386 \frametitle{まとめ}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
387 \begin{block}{Conclusion}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
388 \begin{itemize}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
389 \item GCCにCbCコンパイラを実装
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
390 \item そのベンチマークによる性能向上の確認
6
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
391 \item 環境付き継続の実装及び問題点の考察
4
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
392 \end{itemize}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
393 \end{block}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
394
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
395 \begin{block}{TO DO}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
396 \begin{itemize}
6
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
397 \item environmentの強化
4
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
398 \item PPCのRTL変換不能
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
399 \item オプションの強制
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
400 \item SPU対応とGCCのversion
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
401 \end{itemize}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
402 \end{block}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
403 \end{frame}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
404
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
405
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
406 %\begin{thebibliography}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
407 %\item[CbC]{} 河野真治 , 日本ソフトウェア科学会第17回大会論文集, September, 2000 (in Japanese)
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
408 %\end{thebibliography}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
409 %継続を持つCの下位言語によるシステム記述
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
410 %河野真治 , 日本ソフトウェア科学会第17回大会論文集, September, 2000 (in Japanese)
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
411 %継続を基本とするプログラム単位を用いた組込みシステム開発 , 河野 真治 (琉球大学), 組み込みソフトウェア工学シンポジウム2003, Oct,2003
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
412
6
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
413 %\appendix
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
414 %\begin{frame}
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
415 %a%\includegraphics[width=.9\textwidth]{figures/stack-tailcall.eps}
3436da54f678 *** empty log message ***
kent
parents: 4
diff changeset
416 %\end{frame}
4
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
417
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
418 \end{document}
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
419
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
420
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
421
448fb638bfa0 add tex for slide.
kent
parents:
diff changeset
422