Mercurial > hg > Papers > 2008 > kent-dsw
comparison slide.tex @ 6:3436da54f678
*** empty log message ***
author | kent |
---|---|
date | Wed, 02 Jul 2008 11:02:49 +0900 |
parents | 448fb638bfa0 |
children | 657e392afc09 |
comparison
equal
deleted
inserted
replaced
5:a641d4977dfc | 6:3436da54f678 |
---|---|
3 % Last Change: 火 6 24 12:51 PM 2008 J | 3 % Last Change: 火 6 24 12:51 PM 2008 J |
4 % | 4 % |
5 \documentclass[mathserif]{beamer} | 5 \documentclass[mathserif]{beamer} |
6 \usepackage{graphicx} | 6 \usepackage{graphicx} |
7 \usepackage{verbatim} | 7 \usepackage{verbatim} |
8 \usepackage{ulem} | |
8 %\usepackage{beamerthemesplit} | 9 %\usepackage{beamerthemesplit} |
9 %manual% open /usr/local/ptetex/share/texmf-dist/doc/latex/beamer/beameruserguide.pdf | 10 %manual% open /usr/local/ptetex/share/texmf-dist/doc/latex/beamer/beameruserguide.pdf |
10 | 11 |
11 \title[CbC on GCC]{組み込み向け低レベル言語 CbC の GCC による実装} | 12 \title[CbC on GCC]{組み込み向け低レベル言語 CbC の GCC による実装} |
12 \author{与儀 健人 \and 河野真治} | 13 \author{与儀 健人 \and 河野真治} |
72 \item Cよりも下位、アセンブラより上位の言語 | 73 \item Cよりも下位、アセンブラより上位の言語 |
73 \item 入力、出力インターフェイスの組み合わせから、検証を自身で表現できる | 74 \item 入力、出力インターフェイスの組み合わせから、検証を自身で表現できる |
74 \item OS、デバイスドライバ、ハードウェアの記述が可能 | 75 \item OS、デバイスドライバ、ハードウェアの記述が可能 |
75 \end{itemize} | 76 \end{itemize} |
76 \end{exampleblock} | 77 \end{exampleblock} |
77 \begin{exampleblock}{Recent work} | 78 \begin{exampleblock}{Recent works} |
78 \begin{itemize} | 79 \begin{itemize} |
79 \item Micro-Cによる実装 (i386,PPC,mips,spu,arm) | 80 \item Micro-Cによる実装 (i386,PPC,mips,spu,arm) |
80 \item タブロー法によるCbCプログラムの検証 | 81 \item タブロー法によるCbCプログラムの検証 |
81 %タブロー法を用いたContinuation based Cプログラムの検証, 下地 篤樹, 河野 真治(琉球大学) 日本ソフトウェア科学会第23回大会論文集, Sep, 2006 | 82 %タブロー法を用いたContinuation based Cプログラムの検証, 下地 篤樹, 河野 真治(琉球大学) 日本ソフトウェア科学会第23回大会論文集, Sep, 2006 |
82 \item CbCによるハードウェア記述 | 83 \item CbCによるハードウェア記述 |
174 \end{columns} | 175 \end{columns} |
175 \end{frame} | 176 \end{frame} |
176 | 177 |
177 \begin{frame}[fragile] | 178 \begin{frame}[fragile] |
178 \frametitle{実装に必要な構文} | 179 \frametitle{実装に必要な構文} |
180 構文は以下の二つが通れば良い。 | |
179 \begin{itemize} | 181 \begin{itemize} |
180 \huge | 182 \huge |
181 \item \verb|__code cs(int a, char *b)| | 183 \item \verb|__code cs(int a, char *b)| |
182 \item \verb|goto cs(10, "abc");| | 184 \item \verb|goto cs(10, "abc");| |
183 \end{itemize} | 185 \end{itemize} |
209 \end{columns} | 211 \end{columns} |
210 \end{frame} | 212 \end{frame} |
211 | 213 |
212 | 214 |
213 \section{Tail call} | 215 \section{Tail call} |
216 | |
217 \begin{frame} | |
218 \frametitle{Tail call elimination} | |
219 \begin{exampleblock}{Waht is it?} | |
220 \begin{itemize} | |
221 \item 関数呼び出しに関する最適化 | |
222 \item call命令じゃなく、jmp命令を使用する (i386) | |
223 \item スタックを拡張せず、現在のスタックフレームを書き潰す | |
224 \end{itemize} | |
225 \end{exampleblock} | |
226 GCCへの実装ではこの最適化を利用して行う | |
227 \end{frame} | |
228 | |
214 \begin{frame} | 229 \begin{frame} |
215 \frametitle{Tail call elimination} | 230 \frametitle{Tail call elimination} |
216 a%\includegraphics[width=.9\textwidth]{figures/GCC-TailCall.eps} | 231 a%\includegraphics[width=.9\textwidth]{figures/GCC-TailCall.eps} |
217 \end{frame} | 232 \end{frame} |
218 | 233 |
219 \begin{frame}[fragile] | 234 \begin{comment}[fragile] |
220 \begin{columns}[t] | 235 \begin{columns}[t] |
221 \column{.5\textwidth} | 236 \column{.5\textwidth} |
222 \begin{verbatim} | 237 \begin{verbatim} |
223 A: | 238 A: |
224 pushl %ebp | 239 pushl %ebp |
244 addl %eax, 16(%ebp) | 259 addl %eax, 16(%ebp) |
245 popl %ebp | 260 popl %ebp |
246 jmp B | 261 jmp B |
247 \end{verbatim} | 262 \end{verbatim} |
248 \end{columns} | 263 \end{columns} |
249 \end{frame} | 264 \end{comment} |
250 | 265 |
251 \begin{frame} | 266 \begin{frame} |
252 \frametitle{Tail callの条件} | 267 \frametitle{Tail callの条件} |
253 \begin{enumerate} | 268 \begin{enumerate} |
254 \item 関数コールがreturnの直前にある | 269 \item 関数コールがreturnの直前にある |
255 \item 関数の返す型がcallerとcalleeで一致している | 270 \item 関数の返す型がcallerとcalleeで一致している |
256 \item caller側の引数サイズがcallee側の引数サイズより大きいもしくは等しい | 271 \item caller側の引数サイズがcallee側の引数サイズより大きいもしくは等しい |
257 \item 書き込んだ引数が、その後書き込む引数を上書きしてはならない | 272 \item 書き込んだ引数が、その後書き込む引数を上書きしてはならない |
258 \end{enumerate} | 273 \end{enumerate} |
259 \center | 274 %\center |
260 \visible<2>{引数をすべて固定数とすることで対応} | 275 %\visible<2>{引数をすべて固定数とすることで対応} |
261 \end{frame} | 276 \end{frame} |
262 | 277 |
263 \section{実装} | 278 \section{実装} |
264 \begin{frame} | 279 \begin{frame} |
265 \frametitle{実装} | 280 \frametitle{実装} |
271 \item \alert<2>{tree/RTL変換 (expand\_call)} \hfill RTL Generator \hspace{5em} | 286 \item \alert<2>{tree/RTL変換 (expand\_call)} \hfill RTL Generator \hspace{5em} |
272 \item その他(エラー検出など) | 287 \item その他(エラー検出など) |
273 \end{itemize} | 288 \end{itemize} |
274 \end{frame} | 289 \end{frame} |
275 | 290 |
276 \begin{frame} | 291 \begin{comment} |
277 \frametitle{expand\_call} | 292 \frametitle{expand\_call} |
278 \begin{exampleblock}{What is the function?} | 293 \begin{exampleblock}{What is the function?} |
279 \begin{itemize} | 294 \begin{itemize} |
280 \item 関数呼び出しのtreeからRTLへ変換する | 295 \item 関数呼び出しのtreeからRTLへ変換する |
281 \item Tail callが可能ならその最適化を行う | 296 \item Tail callが可能ならその最適化を行う |
282 \item この関数のみで1200行もある | 297 \item この関数のみで1200行もある |
283 \item そのほとんどがTail call可否の判定 | 298 \item そのほとんどがTail call可否の判定 |
284 \item そして読みづらい | 299 \item そして読みづらい |
285 \end{itemize} | 300 \end{itemize} |
286 \end{exampleblock} | 301 \end{exampleblock} |
287 \end{frame} | 302 \end{comment} |
288 | 303 |
289 \begin{frame} | 304 \begin{comment} |
290 \frametitle{expand\_cbc\_goto} | 305 \frametitle{expand\_cbc\_goto} |
291 \begin{exampleblock}{What is it doing?} | 306 \begin{exampleblock}{What is it doing?} |
292 \begin{itemize} | 307 \begin{itemize} |
293 \item code segmentへのgotoを表したtreeをRTLに変換 | 308 \item code segmentへのgotoを表したtreeをRTLに変換 |
294 \item 無駄なTail call可否判定を削除 | 309 \item 無駄なTail call可否判定を削除 |
295 \item Tail callの条件を強制 | 310 \item Tail callの条件を強制 |
296 \item 確実にTail callを適用 | 311 \item 確実にTail callを適用 |
297 \item 500行程度 | 312 \item 500行程度 |
298 \end{itemize} | 313 \end{itemize} |
299 \end{exampleblock} | 314 \end{exampleblock} |
300 \end{frame} | 315 \end{comment} |
301 | |
302 \section{環境付き継続に関する考察} | |
303 \begin{frame}[fragile] | |
304 \frametitle{環境付き継続} | |
305 未実装の構文 | |
306 \begin{verbatim} | |
307 env = malloc(STACKSIZE); | |
308 goto cs( 10 ), env; | |
309 \end{verbatim} | |
310 \begin{itemize} | |
311 \item envは現在とは違うメモリ空間を表す | |
312 \begin{itemize} | |
313 \item mallocで取得 | |
314 \item 中断した別スレッドのスッタクフレーム | |
315 \item 関数から継続した場合の元のスタックフレーム | |
316 \end{itemize} | |
317 \item そのenvで表される環境(スタック)へスタックフレームを変更したあと継続 \\ | |
318 具体的には\verb|%ebp|を変更 | |
319 \end{itemize} | |
320 \end{frame} | |
321 | |
322 \begin{frame} | |
323 \frametitle{実装における問題} | |
324 \end{frame} | |
325 | 316 |
326 \section{評価} | 317 \section{評価} |
327 \begin{frame}[fragile] | 318 \begin{frame}[fragile] |
328 \frametitle{評価(ベンチマーク)} | 319 \frametitle{評価(ベンチマーク)} |
329 \begin{itemize} | 320 \begin{itemize} |
343 \item[+omit] -fomit-frame-pointerオプションを付加 | 334 \item[+omit] -fomit-frame-pointerオプションを付加 |
344 \item[+fastcall] \verb|__attribute__ ((fastcall))|を付加 | 335 \item[+fastcall] \verb|__attribute__ ((fastcall))|を付加 |
345 \end{description} | 336 \end{description} |
346 \end{frame} | 337 \end{frame} |
347 | 338 |
348 %\begin{frame} | 339 \renewcommand<>{\sout}[1]{\temporal#2{#1}{\beameroriginal{\sout}{#1}}{#1}} |
349 %\frametitle{考察} | 340 \section{環境付き継続に関する考察} |
350 %\end{frame} | 341 \begin{frame}[fragile] |
351 | 342 \frametitle{環境付き継続} |
343 %\sout<2>{未実装の構文}\\ | |
344 未実装の構文 | |
345 %\uncover<2>{新たに実装された構文} | |
346 \begin{verbatim} | |
347 goto cs( 10 ), env; | |
348 \end{verbatim} | |
349 %env = malloc(STACKSIZE); | |
350 \begin{itemize} | |
351 \item envは現在とは別のスタック空間を表す | |
352 \begin{itemize} | |
353 \item mallocで取得 | |
354 \item 中断した別スレッドのスッタクフレーム | |
355 \item 関数から継続した場合の元のスタックフレーム | |
356 \end{itemize} | |
357 \item そのenvで表される環境(スタック)へスタックフレームを変更したあと継続する \\ | |
358 具体的には\verb|%ebp|を変更 | |
359 \end{itemize} | |
360 \end{frame} | |
361 | |
362 \begin{frame}[fragile] | |
363 \frametitle{環境付き継続} | |
364 Micro-CでのCbCでは以下の使い方が主となっている | |
365 \begin{verbatim} | |
366 int func(void){ | |
367 /* something */ | |
368 goto cs( __environment, __return ); | |
369 } | |
370 __code cs(void *env, void *ret){ | |
371 /* something */ | |
372 goto ret(20), env; | |
373 } | |
374 \end{verbatim} | |
375 このように、\verb|__environment,__return|を使用して、呼び出し元関数の環境へ戻れる。 | |
376 この使用方法に限れば、GCCでも実装完了。 | |
377 \end{frame} | |
378 | |
379 \begin{frame} | |
380 \frametitle{実装方法} | |
381 | |
382 \end{frame} | |
383 | |
384 \section{まとめ} | |
352 \begin{frame} | 385 \begin{frame} |
353 \frametitle{まとめ} | 386 \frametitle{まとめ} |
354 \begin{block}{Conclusion} | 387 \begin{block}{Conclusion} |
355 \begin{itemize} | 388 \begin{itemize} |
356 \item GCCにCbCコンパイラを実装 | 389 \item GCCにCbCコンパイラを実装 |
357 \item そのベンチマークによる性能向上の確認 | 390 \item そのベンチマークによる性能向上の確認 |
358 \item 環境付き継続の実装方法の考察 | 391 \item 環境付き継続の実装及び問題点の考察 |
359 \end{itemize} | 392 \end{itemize} |
360 \end{block} | 393 \end{block} |
361 | 394 |
362 \begin{block}{TO DO} | 395 \begin{block}{TO DO} |
363 \begin{itemize} | 396 \begin{itemize} |
364 \item environment | 397 \item environmentの強化 |
365 \item PPCのRTL変換不能 | 398 \item PPCのRTL変換不能 |
366 \item オプションの強制 | 399 \item オプションの強制 |
367 \item SPU対応とGCCのversion | 400 \item SPU対応とGCCのversion |
368 \end{itemize} | 401 \end{itemize} |
369 \end{block} | 402 \end{block} |
375 %\end{thebibliography} | 408 %\end{thebibliography} |
376 %継続を持つCの下位言語によるシステム記述 | 409 %継続を持つCの下位言語によるシステム記述 |
377 %河野真治 , 日本ソフトウェア科学会第17回大会論文集, September, 2000 (in Japanese) | 410 %河野真治 , 日本ソフトウェア科学会第17回大会論文集, September, 2000 (in Japanese) |
378 %継続を基本とするプログラム単位を用いた組込みシステム開発 , 河野 真治 (琉球大学), 組み込みソフトウェア工学シンポジウム2003, Oct,2003 | 411 %継続を基本とするプログラム単位を用いた組込みシステム開発 , 河野 真治 (琉球大学), 組み込みソフトウェア工学シンポジウム2003, Oct,2003 |
379 | 412 |
380 \appendix | 413 %\appendix |
381 \begin{frame} | 414 %\begin{frame} |
382 a%\includegraphics[width=.9\textwidth]{figures/stack-tailcall.eps} | 415 %a%\includegraphics[width=.9\textwidth]{figures/stack-tailcall.eps} |
383 \end{frame} | 416 %\end{frame} |
384 | 417 |
385 \end{document} | 418 \end{document} |
386 | 419 |
387 | 420 |
388 | 421 |