# HG changeset patch # User kent # Date 1214964169 -32400 # Node ID 3436da54f678b56f6f1420216f3c1b28f6563bd5 # Parent a641d4977dfceaf35d5745c2a105e9b685e573cd *** empty log message *** diff -r a641d4977dfc -r 3436da54f678 slide.tex --- a/slide.tex Tue Jul 01 16:53:19 2008 +0900 +++ b/slide.tex Wed Jul 02 11:02:49 2008 +0900 @@ -5,6 +5,7 @@ \documentclass[mathserif]{beamer} \usepackage{graphicx} \usepackage{verbatim} +\usepackage{ulem} %\usepackage{beamerthemesplit} %manual% open /usr/local/ptetex/share/texmf-dist/doc/latex/beamer/beameruserguide.pdf @@ -74,7 +75,7 @@ \item OS、デバイスドライバ、ハードウェアの記述が可能 \end{itemize} \end{exampleblock} - \begin{exampleblock}{Recent work} + \begin{exampleblock}{Recent works} \begin{itemize} \item Micro-Cによる実装 (i386,PPC,mips,spu,arm) \item タブロー法によるCbCプログラムの検証 @@ -176,6 +177,7 @@ \begin{frame}[fragile] \frametitle{実装に必要な構文} + 構文は以下の二つが通れば良い。 \begin{itemize} \huge \item \verb|__code cs(int a, char *b)| @@ -211,12 +213,25 @@ \section{Tail call} + +\begin{frame} + \frametitle{Tail call elimination} + \begin{exampleblock}{Waht is it?} + \begin{itemize} + \item 関数呼び出しに関する最適化 + \item call命令じゃなく、jmp命令を使用する (i386) + \item スタックを拡張せず、現在のスタックフレームを書き潰す + \end{itemize} + \end{exampleblock} + GCCへの実装ではこの最適化を利用して行う +\end{frame} + \begin{frame} \frametitle{Tail call elimination} a%\includegraphics[width=.9\textwidth]{figures/GCC-TailCall.eps} \end{frame} -\begin{frame}[fragile] +\begin{comment}[fragile] \begin{columns}[t] \column{.5\textwidth} \begin{verbatim} @@ -246,7 +261,7 @@ jmp B \end{verbatim} \end{columns} -\end{frame} +\end{comment} \begin{frame} \frametitle{Tail callの条件} @@ -256,8 +271,8 @@ \item caller側の引数サイズがcallee側の引数サイズより大きいもしくは等しい \item 書き込んだ引数が、その後書き込む引数を上書きしてはならない \end{enumerate} - \center - \visible<2>{引数をすべて固定数とすることで対応} + %\center + %\visible<2>{引数をすべて固定数とすることで対応} \end{frame} \section{実装} @@ -273,7 +288,7 @@ \end{itemize} \end{frame} -\begin{frame} +\begin{comment} \frametitle{expand\_call} \begin{exampleblock}{What is the function?} \begin{itemize} @@ -284,9 +299,9 @@ \item そして読みづらい \end{itemize} \end{exampleblock} -\end{frame} +\end{comment} -\begin{frame} +\begin{comment} \frametitle{expand\_cbc\_goto} \begin{exampleblock}{What is it doing?} \begin{itemize} @@ -297,31 +312,7 @@ \item 500行程度 \end{itemize} \end{exampleblock} -\end{frame} - -\section{環境付き継続に関する考察} -\begin{frame}[fragile] - \frametitle{環境付き継続} - 未実装の構文 - \begin{verbatim} - env = malloc(STACKSIZE); - goto cs( 10 ), env; - \end{verbatim} - \begin{itemize} - \item envは現在とは違うメモリ空間を表す - \begin{itemize} - \item mallocで取得 - \item 中断した別スレッドのスッタクフレーム - \item 関数から継続した場合の元のスタックフレーム - \end{itemize} - \item そのenvで表される環境(スタック)へスタックフレームを変更したあと継続 \\ - 具体的には\verb|%ebp|を変更 - \end{itemize} -\end{frame} - -\begin{frame} - \frametitle{実装における問題} -\end{frame} +\end{comment} \section{評価} \begin{frame}[fragile] @@ -345,23 +336,65 @@ \end{description} \end{frame} -%\begin{frame} - %\frametitle{考察} -%\end{frame} +\renewcommand<>{\sout}[1]{\temporal#2{#1}{\beameroriginal{\sout}{#1}}{#1}} +\section{環境付き継続に関する考察} +\begin{frame}[fragile] + \frametitle{環境付き継続} + %\sout<2>{未実装の構文}\\ + 未実装の構文 + %\uncover<2>{新たに実装された構文} + \begin{verbatim} + goto cs( 10 ), env; + \end{verbatim} + %env = malloc(STACKSIZE); + \begin{itemize} + \item envは現在とは別のスタック空間を表す + \begin{itemize} + \item mallocで取得 + \item 中断した別スレッドのスッタクフレーム + \item 関数から継続した場合の元のスタックフレーム + \end{itemize} + \item そのenvで表される環境(スタック)へスタックフレームを変更したあと継続する \\ + 具体的には\verb|%ebp|を変更 + \end{itemize} +\end{frame} +\begin{frame}[fragile] + \frametitle{環境付き継続} + Micro-CでのCbCでは以下の使い方が主となっている + \begin{verbatim} + int func(void){ + /* something */ + goto cs( __environment, __return ); + } + __code cs(void *env, void *ret){ + /* something */ + goto ret(20), env; + } + \end{verbatim} + このように、\verb|__environment,__return|を使用して、呼び出し元関数の環境へ戻れる。 + この使用方法に限れば、GCCでも実装完了。 +\end{frame} + +\begin{frame} + \frametitle{実装方法} + +\end{frame} + +\section{まとめ} \begin{frame} \frametitle{まとめ} \begin{block}{Conclusion} \begin{itemize} \item GCCにCbCコンパイラを実装 \item そのベンチマークによる性能向上の確認 - \item 環境付き継続の実装方法の考察 + \item 環境付き継続の実装及び問題点の考察 \end{itemize} \end{block} \begin{block}{TO DO} \begin{itemize} - \item environment + \item environmentの強化 \item PPCのRTL変換不能 \item オプションの強制 \item SPU対応とGCCのversion @@ -377,10 +410,10 @@ %河野真治 , 日本ソフトウェア科学会第17回大会論文集, September, 2000 (in Japanese) %継続を基本とするプログラム単位を用いた組込みシステム開発 , 河野 真治 (琉球大学), 組み込みソフトウェア工学シンポジウム2003, Oct,2003 -\appendix -\begin{frame} - a%\includegraphics[width=.9\textwidth]{figures/stack-tailcall.eps} -\end{frame} +%\appendix +%\begin{frame} + %a%\includegraphics[width=.9\textwidth]{figures/stack-tailcall.eps} +%\end{frame} \end{document}