annotate slide.tex @ 4:448fb638bfa0

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