comparison nobu-prosym.tex~ @ 0:9fc7603e8e8b

add nobu-prosym
author Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
date Thu, 17 Nov 2011 08:38:35 +0900
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:9fc7603e8e8b
1 \documentclass[private]{ipsjpapers}
2 %\documentstyle{ipsjpapers}
3 \usepackage[dvipdfmx]{graphicx}
4 \usepackage{url}
5
6 % 巻数,号数などの設定
7 \setcounter{巻数}{41}
8 \setcounter{号数}{6}
9 \setcounter{volpageoffset}{1234}
10 \受付{12}{2}{4}
11 \採録{12}{5}{11}
12
13 % ユーザが定義したマクロなど.
14 \makeatletter
15 \let\@ARRAY\@array \def\@array{\def\<{\inhibitglue}\@ARRAY}
16 \def\<{\(\langle\)}
17 \def\>{\(\rangle\)}
18 \def\|{\verb|}
19 \def\Underline{\setbox0\hbox\bgroup\let\\\endUnderline}
20 \def\endUnderline{\vphantom{y}\egroup\smash{\underline{\box0}}\\}
21 \def\LATEX{\iLATEX\Large}
22 \def\LATEx{\iLATEX\normalsize}
23 \def\LATex{\iLATEX\small}
24 \def\iLATEX#1{L\kern-.36em\raise.3ex\hbox{#1\bf A}\kern-.15em
25 T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}
26 \def\LATEXe{\ifx\LaTeXe\undefined \LaTeX 2e\else\LaTeXe\fi}
27 \def\LATExe{\ifx\LaTeXe\undefined \iLATEX\scriptsize 2e\else\LaTeXe\fi}
28 \def\Quote{\list{}{}\item[]}
29 \let\endQuote\endlist
30 \def\TT{\if@LaTeX@e\tt\fi}
31 \def\CS#1{\if@LaTeX@e\tt\expandafter\string\csname#1\endcsname\else
32 $\backslash$#1\fi}
33
34 %\checklines % 行送りを確認する時に使用
35
36 \begin{document}%{
37 % 和文表題
38 \title[Continuation based C の GCC 4.6 上の実装について]%
39 {Continuation based C の GCC 4.6 上の実装について}
40 % 英文表題
41 \etitle{The implementation of Continuation based C Compiler on GCC 4.6}
42
43 % 所属ラベルの定義
44 \affilabel{URYUKYU}{琉球大学\\University of the Ryukyu}
45
46 % 和文著者名
47 \author{大城 信康\affiref{URYUKYU}\nomember\and
48 河野 真治\affiref{URYUKYU}\member{19841765}}
49
50
51 % 英文著者名
52 \eauthor{Nobuyasu Oshiro\affiref{URYUKYU}\and
53 Shinji Kono\affiref{URYUKYU}}
54
55 % 連絡先(投稿時に必要.製版用では無視される.)
56 \contact{大城 信康\\
57 〒903-0213 沖縄県中頭郡西原町字千原1番地\\
58 琉球大学 情報工学科\\
59 TEL: (098)895-8723\qquad FAX: (098)895-8727\\
60 email: dimolto@cr.ie.u-ryukyu.ac.jp}
61
62 % 和文概要
63 \begin{abstract}
64 GCC-4.6 をベースとした CbC コンパイラの実装を行った.
65 CbC のコンパイラは GCC-4.2 ベースのコンパイラが2008年に開発されており,
66 以来 GCC のアップデートにあわせて CbC のコンパイラもアップデートが行われてきた.
67 今回は GCC-4.6 への実装を行った.
68 本論文では GCC-4.6 への CbC の具体的な実装について述べる。
69
70
71 %当研究室では継続を基本としたプログラミング言語 Continuation basede C (以下CbC) を開発している.
72 %また,CbC 自体の開発と共に CbC のコンパイラの開発も行っている.
73 %お陰で GCC の最適化やデバッグの機能を CbC のプログラミングで扱うことができるようになった.
74
75
76 \end{abstract}
77
78
79 % 英文概要
80 \begin{eabstract}
81 We implemented Continuation based C Compiler on GCC-4.6.
82 CbC Compiler on GCC-4.2 was developed on 2008.
83 Since then we kept to update it.
84 In this paper, we introduce implemented Continuation based C Compiler on GCC-4.6.
85
86 %Continuation based C is programming language. It is developing our laboratory.
87
88 \end{eabstract}
89
90 % 表題などの出力
91 \maketitle
92
93 % }{
94
95 % 本文はここから始まる
96 \section{歴史的経緯}
97 当研究室では,継続により処理を行うプログラミング言語 Continuation based C (以下CbC) を開発している.
98 CbC の構文は C と同じであるが,継続によりループ制御や関数コールを取り除かれる.
99
100 2008年の研究において GCC-4.2 ベースの CbC コンパイラが開発された.
101 以来,GCC のアップデートに合わせて GCC ベースの CbC コンパイラのアップデートを行って来ている.
102 お陰で,GCC の最適化やデバッガの機能を使うことができより実用的な CbC プログラミングが行えるようになった.
103
104 しかし,未だに GCC ベースのコンパイラには幾つかのバグがある.
105 今回,GCC-4.6 への実装も兼ねながら問題の部分の改善を行った.
106 本論文では, CbC,GCC の簡単な説明と,GCC-4.6 への実装を具体的に述べる.
107
108
109 % }{
110
111 \section{Continuation based C (CbC)}
112 Continuation based C (以下CbC) は当研究室で開発しているプログラミング言語である.
113 構文は C と同じであるが,ループ制御や関数コールを取り除き継続(goto)を用いている.
114 また,コードセグメント単位で処理を記述するという特徴がある.
115 図\ref{fig:cs}は CbC におけるプログラムの処理の流れを表している.
116
117 \begin{figure}[htpb]
118 \begin{center}
119 \scalebox{0.50}{\includegraphics{figure/codesegment.eps}}
120 \end{center}
121 \caption{コードセグメント間の継続(goto)}
122 \label{fig:cs}
123 \end{figure}
124
125
126 \subsection{継続(goto)}
127 コードセグメントへと移った処理は C の関数と違って呼び出し元の関数に戻ることはない.
128 コードセグメントは自身の処理が終われば goto により次のコードセグメントでの処理に移る.
129 goto によるコードセグメント間の移動を継続と言う.
130
131
132 \subsection{コードセグメント(code segment)}
133 CbC におけるプログラムの基本単位としてコードセグメントという概念がある.
134 コードセグメントの記述の仕方は C の関数と同じだが, 型に“\_\_code”を使って宣言を行うところだけが違う.
135 関数と同じように引数を持たせて継続させることもできる.
136 しかし,関数とは違ってリターンを行わない為返り値を取得することはできない.
137 図\ref{fig:factorial}は CbC で書いたプログラムの例である.
138 与えられた数 x の階上を計算して出力するプログラムとなっている.
139
140 \begin{figure}[htpb]
141 \begin{center}
142 \scalebox{0.50}{\includegraphics{figure/factorial.eps}}
143 \end{center}
144 \caption{CbC のプログラム例}
145 \label{fig:factorial}
146 \end{figure}
147
148
149 %コードセグメントは関数よりも小さな単位で記述される為,最適化がされやすくなる.
150 %コードセグメントの記述の仕方は C の関数と同じで,引数を持たせて継続を行うことができる.
151
152
153
154 \section{Gnu Compiler Collection}
155 GCC-4.6 への実装の前に,GCC によるコンパイルの一連の流れについて触れておく.
156
157 \subsection{3つの中間言語}
158 GCC は内部で Generic Tree, GIMPLE, RTL の3つの中間言語を扱われる.
159
160 \subsubsection{Generic Tree}
161 まず,GCC で読み込まれたソースコードは Generic Tree 呼ばれる構文木のデータ構造で表される.
162 図...に Generic Tree で表現された例を示す.
163
164 \subsubsection{GIMPLE}
165 Generic Tree により表現されたデータは次に GIMPLE という構文木へと変換される.
166 GIMPLE は Generic Tree より制約がかかった状態で作成される.
167 制約は「1つの枝に4つ以上の子を持たせない」といったもので,
168 GIMPLE へと変換されたデータは Generic Tree より簡単な命令で表されることになる.
169
170
171 \subsubsection{RTL}
172
173
174
175 Gneric Tree から GIMPLE, そして RTL へとデータは変換され最後にアセンブリ言語で出力される.
176
177
178
179 \section{GCC-4.6 への実装}
180
181
182 \subsection{Tail Call Elimination}
183 CbC の継続の実装には GCC の最適化の1つである Tail Call Elimination (末尾除去) が使われる.
184 Tail Call Elimination とは関数の最後の処理で別の関数呼び出しを行った際に,
185 call ではなく jmp を用いて大元の関数へ戻るようにする最適化のことである.
186 図\ref{continue}は Tail Call Elimination が行われた際のプログラムの処理を表している.
187
188
189 \begin{figure}[htpb]
190 \begin{center}
191 \scalebox{0.50}{\includegraphics{figure/continuation.eps}}
192 \end{center}
193 \caption{Tail Call Elimination}
194 \label{fig:continue}
195 \end{figure}
196
197
198
199 \subsubsection{expand\_call}
200
201
202
203 \subsection{引数渡し}
204 通常コードセグメントの継続において,引数は C の関数と同じスタックを用いて渡される.
205 GCC には引数渡しをスタックではなくレジスタを用いて行う機能として fastcall がある.
206 fastcall を用いてコードセグメントを宣言することで,レジスタを用いた速度の向上を図る.
207
208 \subsubsection{fastcall}
209 コードセグメントの引数渡しを fastcall によりできるだけレジスタを用いて行うようにする.
210 C において fastcall を用いる場合は関数にキーワード “\_\_attribute\_\_ ((fastcall))” をつけて行う.
211 だが,コードセグメントを全てこのキーワードをつけて宣言することは実用できではない.
212 そこで,コードセグメントで宣言された場合,fastcall が自動で付くように実装を行う.
213 図\ref{fig:fastcall}はコードセグメントに fastcall 属性を付与しているソースである.
214
215 \begin{figure}[htpb]
216 \begin{center}
217 \scalebox{0.35}{\includegraphics{figure/fastcall.eps}}
218 \end{center}
219 \caption{fastcall属性付与}
220 \label{fig:fastcall}
221 \end{figure}
222
223 if 文で条件を決めているのは,64 bit の場合 fastcall が標準で行われ為である.
224
225
226 \begin{thebibliography}{10}
227
228 \bibitem{1}{河野真治}:
229 “継続を基本とした言語 CbC の gcc 上の実装”. 日本ソフトウェア科学会第 19 回大会論文集, Sep, 2002
230
231 \bibitem{2}{河野真治}:
232 “継続を持つ C の回言語によるシステム記述”. 日本ソフトウェア科学会第 17 回大会論文集, Sep, 2000
233
234 \bibitem{3}{与儀健人,河野真治}:
235 “Continuation based CコンパイラのGCC-4.2による実装”. 琉球大学 情報工学科 学位論文, 2008
236
237 \bibitem{4}{与儀健人,河野真治}:
238 “組み込み向け言語Continuation based C のGCC上の実装”. 琉球大学大学院 理工学研究科 学位論文(修士), 2010
239
240 \bibitem{5}{下地篤樹,河野真治}:
241 “線形時相論理を用いたContinuation based C プログラムの検証”. 琉球大学大学院 理工学研究科 情報工学専攻 学位論文(修士), 2008
242
243 \bibitem{6}{楊挺,河野真治}:
244 “Continuation based C の実装”. 琉球大学大学院 理工学研究科 情報工学専攻 学位論文(修士), 2002
245
246 \bibitem{7}{GNU Compiler Collection (GCC) Internals}:
247 “http://gcc.gnu.org/onlinedocs/gccint/”
248
249
250 \end{thebibliography}
251
252
253 \begin{biography}
254 \nomember{大城 信康}
255 1989年生.
256 2008年琉球大学工学部情報工学科入学
257 %
258 \member{河野 真治}
259 1959年生.
260 1989年東京大学大学院情報工学課程修了 (工学博士)
261 同年Sony Computer Science Laboratory, Inc. 入社.
262 1996年より琉球大学工学部准教授
263 工学博士. ACM会員.
264 \end{biography}
265 \end{document}