annotate paper/main.tex @ 2:094f2573edf1

modifi table
author e135704 <e135704@ie.u-ryukyu.ac.jp>
date Wed, 15 Feb 2017 05:27:08 +0900
parents e4c33c7f162f
children df7a469596bd
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
e4c33c7f162f add paper
ikkun
parents:
diff changeset
1 \documentclass[a4j,12pt]{jreport}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
2 \usepackage[dvipdfmx]{graphicx}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
3 \usepackage{mythesis}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
4 \usepackage{multirow}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
5 \usepackage{here}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
6 \usepackage{url}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
7 \usepackage{listings, jlisting}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
8
e4c33c7f162f add paper
ikkun
parents:
diff changeset
9 \lstset{
e4c33c7f162f add paper
ikkun
parents:
diff changeset
10 language=java,
e4c33c7f162f add paper
ikkun
parents:
diff changeset
11 tabsize=2,
e4c33c7f162f add paper
ikkun
parents:
diff changeset
12 frame=single,
e4c33c7f162f add paper
ikkun
parents:
diff changeset
13 basicstyle={\ttfamily\footnotesize},%
e4c33c7f162f add paper
ikkun
parents:
diff changeset
14 identifierstyle={\footnotesize},%
e4c33c7f162f add paper
ikkun
parents:
diff changeset
15 commentstyle={\footnotesize\itshape},%
e4c33c7f162f add paper
ikkun
parents:
diff changeset
16 keywordstyle={\footnotesize\bfseries},%
e4c33c7f162f add paper
ikkun
parents:
diff changeset
17 ndkeywordstyle={\footnotesize},%
e4c33c7f162f add paper
ikkun
parents:
diff changeset
18 stringstyle={\footnotesize\ttfamily},
e4c33c7f162f add paper
ikkun
parents:
diff changeset
19 breaklines=true,
e4c33c7f162f add paper
ikkun
parents:
diff changeset
20 captionpos=b,
e4c33c7f162f add paper
ikkun
parents:
diff changeset
21 columns=[l]{fullflexible},%
e4c33c7f162f add paper
ikkun
parents:
diff changeset
22 xrightmargin=0zw,%
e4c33c7f162f add paper
ikkun
parents:
diff changeset
23 xleftmargin=1zw,%
e4c33c7f162f add paper
ikkun
parents:
diff changeset
24 aboveskip=1zw,
e4c33c7f162f add paper
ikkun
parents:
diff changeset
25 numberstyle={\scriptsize},%
e4c33c7f162f add paper
ikkun
parents:
diff changeset
26 stepnumber=1,
e4c33c7f162f add paper
ikkun
parents:
diff changeset
27 numbersep=0.5zw,%
e4c33c7f162f add paper
ikkun
parents:
diff changeset
28 lineskip=-0.5ex,
e4c33c7f162f add paper
ikkun
parents:
diff changeset
29 numbers=left
e4c33c7f162f add paper
ikkun
parents:
diff changeset
30 }
e4c33c7f162f add paper
ikkun
parents:
diff changeset
31 \renewcommand{\lstlistingname}{Code}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
32
e4c33c7f162f add paper
ikkun
parents:
diff changeset
33 \setlength{\itemsep}{-1zh}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
34
e4c33c7f162f add paper
ikkun
parents:
diff changeset
35 \title{Code Gear Data Gear によるGPGPU処理実装}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
36 %\title{Supporting NAT in Screen Sharing System TreeVNC}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
37 \icon{
e4c33c7f162f add paper
ikkun
parents:
diff changeset
38 \includegraphics[width=80mm,bb=0 0 595 642]{fig/ryukyu.pdf} %%元は 642じゃなくて842
e4c33c7f162f add paper
ikkun
parents:
diff changeset
39 }
e4c33c7f162f add paper
ikkun
parents:
diff changeset
40 \year{平成27年度 卒業論文}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
41 \belongto{琉球大学工学部情報工学科}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
42 \author{135704C 東恩納 琢偉 \\ 指導教員 {河野 真治} }
e4c33c7f162f add paper
ikkun
parents:
diff changeset
43
e4c33c7f162f add paper
ikkun
parents:
diff changeset
44 %% TreeVNC のNATへの対応
e4c33c7f162f add paper
ikkun
parents:
diff changeset
45 %% マルチスクリーン TreeVNC
e4c33c7f162f add paper
ikkun
parents:
diff changeset
46 %% プリアンブルに記述
e4c33c7f162f add paper
ikkun
parents:
diff changeset
47 %% Figure 環境中で Table 環境の見出しを表示・カウンタの操作に必要
e4c33c7f162f add paper
ikkun
parents:
diff changeset
48 %%
e4c33c7f162f add paper
ikkun
parents:
diff changeset
49 \makeatletter
e4c33c7f162f add paper
ikkun
parents:
diff changeset
50 \newcommand{\figcaption}[1]{\def\@captype{figure}\caption{#1}}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
51 \newcommand{\tblcaption}[1]{\def\@captype{table}\caption{#1}}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
52 \makeatother
e4c33c7f162f add paper
ikkun
parents:
diff changeset
53 \setlength\abovecaptionskip{0pt}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
54
e4c33c7f162f add paper
ikkun
parents:
diff changeset
55 \begin{document}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
56 %%% \input{./future.tex}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
57 % タイトル
e4c33c7f162f add paper
ikkun
parents:
diff changeset
58 \maketitle
e4c33c7f162f add paper
ikkun
parents:
diff changeset
59 \baselineskip 17pt plus 1pt minus 1pt
e4c33c7f162f add paper
ikkun
parents:
diff changeset
60
e4c33c7f162f add paper
ikkun
parents:
diff changeset
61 \pagenumbering{roman}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
62 \setcounter{page}{0}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
63
e4c33c7f162f add paper
ikkun
parents:
diff changeset
64 \tableofcontents % 目次
e4c33c7f162f add paper
ikkun
parents:
diff changeset
65 \listoffigures % 図目次
e4c33c7f162f add paper
ikkun
parents:
diff changeset
66 \listoftables % 表目次
e4c33c7f162f add paper
ikkun
parents:
diff changeset
67
e4c33c7f162f add paper
ikkun
parents:
diff changeset
68 %以下のように、章ごとに個別の tex ファイルを作成して、
e4c33c7f162f add paper
ikkun
parents:
diff changeset
69 % main.tex をコンパイルして確認する。
e4c33c7f162f add paper
ikkun
parents:
diff changeset
70 %章分けは個人で違うので下のフォーマットを参考にして下さい。
e4c33c7f162f add paper
ikkun
parents:
diff changeset
71
e4c33c7f162f add paper
ikkun
parents:
diff changeset
72 % はじめに
e4c33c7f162f add paper
ikkun
parents:
diff changeset
73
e4c33c7f162f add paper
ikkun
parents:
diff changeset
74 \chapter{GearsOSでのGPU実行}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
75 CPU の処理速度の向上のためクロック周波数の増加は発熱や消費電力の増大により難しくなっている。\\
e4c33c7f162f add paper
ikkun
parents:
diff changeset
76 そのため、クロック周波数を上げる代わりに CPU のコア数を増やす傾向にある。
e4c33c7f162f add paper
ikkun
parents:
diff changeset
77 マルチコア CPU の性能を発揮するには、処理をできるだけ並列化しなければならない。
e4c33c7f162f add paper
ikkun
parents:
diff changeset
78 また、PC の処理性能を上げるためにマルチコア CPU 以外にも GPU や CPU と GPU を複合したヘテロジニアスなプロセッサが登場している。
e4c33c7f162f add paper
ikkun
parents:
diff changeset
79 並列処理を行う上でこれらのリソースを無視することができない。\\
e4c33c7f162f add paper
ikkun
parents:
diff changeset
80 しかし、これらのプロセッサで性能を出すためにはこれらのアーキテクチャに合わせた並列プログラミングが必要になる。\\
e4c33c7f162f add paper
ikkun
parents:
diff changeset
81 並列プログラミングフレームワークではこれらのプロセッサを抽象化し、CPU と同等に扱えるようにすることも求められる。\\
e4c33c7f162f add paper
ikkun
parents:
diff changeset
82 そのためには並列処理を行うプログラムの依存関係を解決することや、
e4c33c7f162f add paper
ikkun
parents:
diff changeset
83 %Gearsの強みは依存関係の解決以外に何がある?
e4c33c7f162f add paper
ikkun
parents:
diff changeset
84 本研究室で開発しているGears OS は Code Gear と Data Gear によって構成される。
e4c33c7f162f add paper
ikkun
parents:
diff changeset
85 Code Gear は処理の単位、Data Gear はデータの単位となる。
e4c33c7f162f add paper
ikkun
parents:
diff changeset
86 Gears OS では Code/Data Gear を用いて記述することでプログラム全体の並列度を高めて、効率的に並列処理することが可能になることを目的とする。\\
e4c33c7f162f add paper
ikkun
parents:
diff changeset
87 また、Gears OS の実装自体が Code/Data Gear を用いたプログラミングの指針となるように実装する。\\
e4c33c7f162f add paper
ikkun
parents:
diff changeset
88 Gears OS における Task は実行する Code Gear と実行に必要な Input Data Gear, 出力される Output Data Gear の組で表現される。
e4c33c7f162f add paper
ikkun
parents:
diff changeset
89 Input/Output Data Gear によって依存関係が決定し、それに沿って並列実行する。\\
e4c33c7f162f add paper
ikkun
parents:
diff changeset
90 依存関係の解決などの Meta Computation の実行は Meta Code Gear で行われる。
e4c33c7f162f add paper
ikkun
parents:
diff changeset
91 Meta Code Gear は Code Gear に対応しており、 Code Gear が実行した後にそれに対応した Meta Code Gear が実行される。
e4c33c7f162f add paper
ikkun
parents:
diff changeset
92 これらのことから、並列プログラミングで必要とされる GPU やマルチコア CPU をCPUと同等に扱うためには依存関係を明確に出来る Gears OS でCUDAによるGPU実装を行い、CbCによるGPU処理での有用性を発見することが本研究の目的である。
e4c33c7f162f add paper
ikkun
parents:
diff changeset
93
e4c33c7f162f add paper
ikkun
parents:
diff changeset
94 \label{chap:introduction}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
95 \pagenumbering{arabic}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
96
e4c33c7f162f add paper
ikkun
parents:
diff changeset
97 %序論の目安としては1枚半ぐらい.
e4c33c7f162f add paper
ikkun
parents:
diff changeset
98 %英語発表者は,最終予稿の「はじめに」の英訳などを載せてもいいかも.
e4c33c7f162f add paper
ikkun
parents:
diff changeset
99 \chapter{GearsOS}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
100
e4c33c7f162f add paper
ikkun
parents:
diff changeset
101 \section{Continuation Baseed C}
2
094f2573edf1 modifi table
e135704 <e135704@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
102 Gears OS の実装は本研究室で開発している CbC(Continuation based C)\cite{cbc-lola}を用いて行われている。。\\
094f2573edf1 modifi table
e135704 <e135704@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
103 CbC は処理を Code Segment を用いて分割して記述することを基本としている。、 Gears OS の Code Gear はCbCを元に記述されている。
094f2573edf1 modifi table
e135704 <e135704@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
104 CbC のプログラムでは C の関数の単位で Code Segment を用いて分割し、処理を記述している。
1
e4c33c7f162f add paper
ikkun
parents:
diff changeset
105 Code Segment は C の関数と異なり戻り値を持たない。
2
094f2573edf1 modifi table
e135704 <e135704@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
106 Code Segment の宣言は C の関数の構文と同様に行い、 型に \_\_code を使い宣言している。
094f2573edf1 modifi table
e135704 <e135704@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
107 Code Segment から Code Segment への移動は goto の後に移動先の Code Segment 名と引数を並べた記述する構文を用いて行う。
094f2573edf1 modifi table
e135704 <e135704@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
108 この goto による処理の遷移を継続と呼び、C での関数呼び出しにあたり、C では関数の引数の値がスタックに積まれていくが、Code Segment の goto では戻り値を持たないため、スタックに値を積んでいく必要がなくスタックを変更する必要がない。
094f2573edf1 modifi table
e135704 <e135704@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
109 このようなスタックに積まない継続を軽量継続と呼び、呼び出し元の環境を持たない。
094f2573edf1 modifi table
e135704 <e135704@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
110 図\ref{fig:cbc_goto} は Code Segment 間の接続関係を表している。
094f2573edf1 modifi table
e135704 <e135704@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
111
1
e4c33c7f162f add paper
ikkun
parents:
diff changeset
112 \begin{figure}[ht]
e4c33c7f162f add paper
ikkun
parents:
diff changeset
113 \begin{center}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
114 \includegraphics[width=70mm]{./pic/cbc_goto.pdf}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
115 \end{center}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
116 \caption{gotoによる Code Segment 間の接続}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
117 \label{fig:cbc_goto}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
118 \end{figure}
2
094f2573edf1 modifi table
e135704 <e135704@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
119
094f2573edf1 modifi table
e135704 <e135704@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
120 \section{Code Gear と Data Gear}
094f2573edf1 modifi table
e135704 <e135704@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
121 Code Gear はプログラムの実行コードそのものであり、OpenCL\cite{opencl}/CUDA\cite{cuda} の kernel に相当する。
094f2573edf1 modifi table
e135704 <e135704@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
122
094f2573edf1 modifi table
e135704 <e135704@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
123 Code Gear は処理の基本として、 Input Data Gear を参照し、一つまたは複数の Output Data Gear に書き込む。また、接続された Data Gear 以外には参照を行わない。
094f2573edf1 modifi table
e135704 <e135704@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
124 Input Data Gear と Output Data Gear の2つによって、Code Gear の Data に対する依存関係を解決し、 Code Gear の並列実行を可能とする。
094f2573edf1 modifi table
e135704 <e135704@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
125
094f2573edf1 modifi table
e135704 <e135704@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
126
094f2573edf1 modifi table
e135704 <e135704@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
127 Code Gear はCbCを元に記述されており、処理の移行はfunction callではないので、呼び出し元に戻る概念はない。
094f2573edf1 modifi table
e135704 <e135704@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
128 その代わりに、次に実行する Code Gear を軽量継続の goto で指定する。
094f2573edf1 modifi table
e135704 <e135704@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
129
094f2573edf1 modifi table
e135704 <e135704@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
130 Data Gear は、int や文字列などの Primitive Data Type の組み合わせ(struct)である。
094f2573edf1 modifi table
e135704 <e135704@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
131 Data Gearは様々な型を持つunionとして定義される。
094f2573edf1 modifi table
e135704 <e135704@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
132
094f2573edf1 modifi table
e135704 <e135704@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
133 Gear の特徴の一つはその処理が Code Gear, Data Gear に閉じていることにある。
094f2573edf1 modifi table
e135704 <e135704@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
134 これにより、Code Gear の実行時間、メモリ使用量を予測可能なものにする。
1
e4c33c7f162f add paper
ikkun
parents:
diff changeset
135 \section{並列性}
2
094f2573edf1 modifi table
e135704 <e135704@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
136
1
e4c33c7f162f add paper
ikkun
parents:
diff changeset
137 %Gearsの特性を活かせての並列性とは?
e4c33c7f162f add paper
ikkun
parents:
diff changeset
138 %Code Gear Data Gear にわけられることによって依存関係が解決されていること
e4c33c7f162f add paper
ikkun
parents:
diff changeset
139 %並列性と柔軟性は2つともSegment毎に分けられていることで成り立つわけだから、説明する際に2つでSegmentによって分けられるって事説明するのか?同じ事説明してるけど
e4c33c7f162f add paper
ikkun
parents:
diff changeset
140
e4c33c7f162f add paper
ikkun
parents:
diff changeset
141 % 並列処理するの問題、並列化刷ることによって依存関係のあるプログラムがあると並列化出来ない、ということだけど、依存関係ってもっとわかりやすく言うとなに?->要するに、Aの処理を行うにはBの処理を施した値を使わないといけないとかそういうこと、逆に依存関係が無い処理は同時に並列処理していいわけだけど、ソレはつまりここでいう並列性とは、並列化し易いとかそういうことでいいんだろうか、 依存関係の無い形、Gearという分けられた単位にはほかとの依存関係は無い、わけではなくて、あるけど、  処理毎に分けることによって、依存している物を明確にしているって言うところが強みである。
2
094f2573edf1 modifi table
e135704 <e135704@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
142 Code Gear は Task を実行するのに必要な Input Data Gear と Task を実行し出力される Output Data Gear の組によって
094f2573edf1 modifi table
e135704 <e135704@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
143
1
e4c33c7f162f add paper
ikkun
parents:
diff changeset
144 \section{柔軟性}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
145 %プログラムの処理が Gearという単位で分けられて記述されているって言うけど、プログラムの処理ってなに?という疑問を持つのが一般的だと思われ
e4c33c7f162f add paper
ikkun
parents:
diff changeset
146 Code Gear Data Gear はCbCを用いて記述されており、その特徴としてプログラムの処理が Gear という単位で分けられて記述されていることである。\\
e4c33c7f162f add paper
ikkun
parents:
diff changeset
147 また Gear の処理の遷移には goto を用いており、この goto 先を変更することで容易に処理の順番を変更、もしくは新しい処理を追加することが出来る。図\ref{fig:CG_Flexibility}は Code Gear C と Code Gear D を入れ替えたものであり、この入れ替えを行う場合 Code Gear C を指していた goto の先を Code Gear D に書き換えるだけで済む。
e4c33c7f162f add paper
ikkun
parents:
diff changeset
148
e4c33c7f162f add paper
ikkun
parents:
diff changeset
149 %図で言うよりも goto の説明をしたほうがわかりやすいかも、gotoがどういったものでどういう事に使われているのか、これがわかればわかるのでは?
e4c33c7f162f add paper
ikkun
parents:
diff changeset
150 \section{Gears でのMeta computation の実行}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
151 Gears OS では通常の処理を Computation、 Computation のための Computation を Meta Computation として扱う。
e4c33c7f162f add paper
ikkun
parents:
diff changeset
152 Meta Computation の例として並列処理の依存関係の解決や、 OS が行うネットワーク管理、メモリ管理等の資源制御などが挙げられる。
e4c33c7f162f add paper
ikkun
parents:
diff changeset
153 Gears OS では Meta Computation を Meta Code Gear、 Meta Data Gear で表現する。
e4c33c7f162f add paper
ikkun
parents:
diff changeset
154 Meta Code Gear は通常の Code Gear 直後に遷移され、 Meta Computation を実行する。
e4c33c7f162f add paper
ikkun
parents:
diff changeset
155 Meta Computation の実行後は通常の Code Gear で指定した Code Gear を実行する。
e4c33c7f162f add paper
ikkun
parents:
diff changeset
156 つまり Code Gear の実行後は何かしらの Meta Code Gear を実行する。
e4c33c7f162f add paper
ikkun
parents:
diff changeset
157
e4c33c7f162f add paper
ikkun
parents:
diff changeset
158 \chapter{Gears OSの構成}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
159
e4c33c7f162f add paper
ikkun
parents:
diff changeset
160
e4c33c7f162f add paper
ikkun
parents:
diff changeset
161
e4c33c7f162f add paper
ikkun
parents:
diff changeset
162 Code \ref{src:sync_enqueue} に CAS を使用した Task 挿入を示している。
e4c33c7f162f add paper
ikkun
parents:
diff changeset
163 Code \ref{src:sync_enqueue} は 2つのCode Gear を定義しており、 putQueue3 は Queue に要素がある場合、 putQueue4 は Queue に要素がない場合の Task 挿入を示している。
e4c33c7f162f add paper
ikkun
parents:
diff changeset
164
e4c33c7f162f add paper
ikkun
parents:
diff changeset
165 \lstinputlisting[label=src:sync_enqueue, caption=Enqueue]{./src/sync_enqueue.c}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
166
e4c33c7f162f add paper
ikkun
parents:
diff changeset
167 \section{TaskManager}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
168 Gears OS の TaskManager は WaitTaskQueue に入っている Task の依存関係を解決する。
e4c33c7f162f add paper
ikkun
parents:
diff changeset
169 Task には Input/Output Data Gear の情報が格納されている。
e4c33c7f162f add paper
ikkun
parents:
diff changeset
170 Input Data Gear は Task に必要な Data Gear で揃ったら Task は実行可能な状態になる。
e4c33c7f162f add paper
ikkun
parents:
diff changeset
171 Output Data Gear は Task が Persistent Data Tree に書き出す Data Gear である。
e4c33c7f162f add paper
ikkun
parents:
diff changeset
172 この Input と Output の関係が依存関係となる。
e4c33c7f162f add paper
ikkun
parents:
diff changeset
173 TaskManager は Persistent Data Tree を監視しており、WaitTaskQueue に入っている Task の Input Data Gear が揃っているのを確認したら実行可能な Task として AcitiveTaskQueue へ移動させる。
e4c33c7f162f add paper
ikkun
parents:
diff changeset
174 \section{Worker}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
175 Worker は TaskQueue から Task を取得し、実行する。
e4c33c7f162f add paper
ikkun
parents:
diff changeset
176 Task には実行する Code Gear と実行に必要な Code Gear の key が格納されている。
e4c33c7f162f add paper
ikkun
parents:
diff changeset
177 実行に必要な Code Gear は Persistent Data Tree から key を使って取得する。
e4c33c7f162f add paper
ikkun
parents:
diff changeset
178
e4c33c7f162f add paper
ikkun
parents:
diff changeset
179 各 Worker は個別の Context を参照しており、 メモリ空間も独立しているのでメモリを確保する処理で他の Thread を止めることはない。
e4c33c7f162f add paper
ikkun
parents:
diff changeset
180 ただし、Persistent Data Tree への書き出しは競合する可能性があるので CAS を利用してデータの一貫性を保証する必要がある。
e4c33c7f162f add paper
ikkun
parents:
diff changeset
181
e4c33c7f162f add paper
ikkun
parents:
diff changeset
182 Worker が TaskQueue から Task の取得を行う Code Gear を Code \ref{src:sync_dequeue} に示す。
e4c33c7f162f add paper
ikkun
parents:
diff changeset
183 Task Queue から取得した Task から実行する Code Gear と必要な Data Gear の key を Worker Context に書き込むことで実行される。
e4c33c7f162f add paper
ikkun
parents:
diff changeset
184
e4c33c7f162f add paper
ikkun
parents:
diff changeset
185 \lstinputlisting[label=src:sync_dequeue, caption=GetTask]{./src/sync_dequeue.c}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
186
e4c33c7f162f add paper
ikkun
parents:
diff changeset
187 Worker から取得された Task の Code Gear は並列実行される。
e4c33c7f162f add paper
ikkun
parents:
diff changeset
188 並列実行される Code Gear と言っても他の Code Gear と同じである。
e4c33c7f162f add paper
ikkun
parents:
diff changeset
189 これは Gears OS 自体が Code Gear によって構成されていることに起因する。
e4c33c7f162f add paper
ikkun
parents:
diff changeset
190 つまり、 Gears OS を利用して書かれたプログラムで定義されている Code Gear に依存関係がないとき、全て並列に実行することができる。
e4c33c7f162f add paper
ikkun
parents:
diff changeset
191
e4c33c7f162f add paper
ikkun
parents:
diff changeset
192
e4c33c7f162f add paper
ikkun
parents:
diff changeset
193 \chapter{GPGPU}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
194
e4c33c7f162f add paper
ikkun
parents:
diff changeset
195 \section{GPGPUとは}
2
094f2573edf1 modifi table
e135704 <e135704@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
196 GPGPU とは、元々は画像出力や画像編集などの画像処理に用いられるGPUを画像処理以外に利用する技術の事である。\\
094f2573edf1 modifi table
e135704 <e135704@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
197 画像の編集はピクセル毎に行われるため多大な数の処理を行う必要があるが、 GPU は CPU に比べコア数が多数あり、多数のコアで同時に計算することによって CPU よりも多数の並列な処理を行う事が出来る。\\
094f2573edf1 modifi table
e135704 <e135704@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
198 これによってGPUは画像処理のような多大な処理を並列処理することで、 CPU で処理するよりも高速に並列処理することが出来る。
094f2573edf1 modifi table
e135704 <e135704@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
199 しかし、GPU のコアはCPUのコアに比べ複雑な計算は出来ない構造であるため単純計算しか出来ない、また一般的にユーザーから GPU 単体に直接命令を書き込むことも出来ないなどの問題点も存在する。
094f2573edf1 modifi table
e135704 <e135704@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
200 GPGPU は CPU によって単純計算のTaskを GPU に振り分ける事によって、 GPU の問題点を解決しつつ、高速な並列処理を行うことである。
094f2573edf1 modifi table
e135704 <e135704@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
201 また Data Gear へのアクセスは接続された Code Gear からのみであるから、処理中に変数が書き変わる事がない。
1
e4c33c7f162f add paper
ikkun
parents:
diff changeset
202 図\ref{fig:gpgpu}では以下の流れで処理が行われる。
e4c33c7f162f add paper
ikkun
parents:
diff changeset
203 \begin{itemize}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
204 \item Data Gear をPersistent Data Tree に挿入。
e4c33c7f162f add paper
ikkun
parents:
diff changeset
205 \item TasMannagerで実行する Code Gear と実行に必要な Data Gear へのKeyを持つTas\
e4c33c7f162f add paper
ikkun
parents:
diff changeset
206 k を生成。
e4c33c7f162f add paper
ikkun
parents:
diff changeset
207 \item 生成したTaskをTaskQueueに挿入。
e4c33c7f162f add paper
ikkun
parents:
diff changeset
208 \item Workerの起動。
e4c33c7f162f add paper
ikkun
parents:
diff changeset
209 \item WorkerがTskQueueからTaskを取得。
e4c33c7f162f add paper
ikkun
parents:
diff changeset
210 \item 取得した Task を元に必要なData Gear を Persistent Data Tree から取得。
e4c33c7f162f add paper
ikkun
parents:
diff changeset
211 \item 並列処理される Code Gear を実行。
e4c33c7f162f add paper
ikkun
parents:
diff changeset
212 \end{itemize}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
213
e4c33c7f162f add paper
ikkun
parents:
diff changeset
214 \begin{figure}[ht]
e4c33c7f162f add paper
ikkun
parents:
diff changeset
215 \centering
2
094f2573edf1 modifi table
e135704 <e135704@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
216 \includegraphics[width=90mm]{pic/gearsos.pdf}
1
e4c33c7f162f add paper
ikkun
parents:
diff changeset
217 \caption{Gears OS による GPGPU}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
218 \label{fig:gpgpu}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
219 \end{figure}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
220 \newpage
e4c33c7f162f add paper
ikkun
parents:
diff changeset
221
e4c33c7f162f add paper
ikkun
parents:
diff changeset
222 % CPUからGPUにTaskを振り分ける図があってもいい
e4c33c7f162f add paper
ikkun
parents:
diff changeset
223 \section{CUDAでの実行}
2
094f2573edf1 modifi table
e135704 <e135704@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
224 %CUDAの説明
094f2573edf1 modifi table
e135704 <e135704@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
225 CUDA とは NVIDIA が提供している並列コンピューティングアーキテクチャで
1
e4c33c7f162f add paper
ikkun
parents:
diff changeset
226 %helper_cuda.h cmakeは一つの言語のコンパイルしか出来ない、CbCはC言語としてコンパイル出来るが、C++の言語がCUDAのhelper_cuda.hなどには含まれる。
e4c33c7f162f add paper
ikkun
parents:
diff changeset
227
e4c33c7f162f add paper
ikkun
parents:
diff changeset
228 \chapter{GPU 実装}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
229
e4c33c7f162f add paper
ikkun
parents:
diff changeset
230 \section{GPUWoker の実装}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
231 %そもそも実装してない?
e4c33c7f162f add paper
ikkun
parents:
diff changeset
232 %実装したって言えるのはtwiceとかのCudaExsampleをGPUで動かすことが出来るってだけで、WorkerによってTaskManagmentしてるとは言えないのでは?
2
094f2573edf1 modifi table
e135704 <e135704@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
233
094f2573edf1 modifi table
e135704 <e135704@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
234 \section{CUDATwiceの実装}
094f2573edf1 modifi table
e135704 <e135704@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
235
094f2573edf1 modifi table
e135704 <e135704@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
236 \section{CMake}
094f2573edf1 modifi table
e135704 <e135704@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
237
1
e4c33c7f162f add paper
ikkun
parents:
diff changeset
238 \section{性能評価}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
239
e4c33c7f162f add paper
ikkun
parents:
diff changeset
240 \section{比較}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
241
e4c33c7f162f add paper
ikkun
parents:
diff changeset
242
e4c33c7f162f add paper
ikkun
parents:
diff changeset
243 \chapter{今後の課題}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
244 \section{GPU並列実行}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
245
e4c33c7f162f add paper
ikkun
parents:
diff changeset
246 % 今後の課題
e4c33c7f162f add paper
ikkun
parents:
diff changeset
247
e4c33c7f162f add paper
ikkun
parents:
diff changeset
248 \chapter{結論}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
249
e4c33c7f162f add paper
ikkun
parents:
diff changeset
250 \section{まとめ}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
251
e4c33c7f162f add paper
ikkun
parents:
diff changeset
252 \section{今後の課題}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
253
e4c33c7f162f add paper
ikkun
parents:
diff changeset
254
e4c33c7f162f add paper
ikkun
parents:
diff changeset
255
e4c33c7f162f add paper
ikkun
parents:
diff changeset
256 % 参考文献
e4c33c7f162f add paper
ikkun
parents:
diff changeset
257 \def\line{−\hspace*{-.7zw}−}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
258 \nocite{*}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
259 \bibliographystyle{junsrt}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
260 \bibliography{reference}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
261
e4c33c7f162f add paper
ikkun
parents:
diff changeset
262
e4c33c7f162f add paper
ikkun
parents:
diff changeset
263 \chapter*{謝辞}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
264 \thispagestyle{empty}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
265
e4c33c7f162f add paper
ikkun
parents:
diff changeset
266 %基本的な内容は以下の通り.参考にしてみて下さい.
e4c33c7f162f add paper
ikkun
parents:
diff changeset
267 %厳密な決まりは無いので,個々人の文体でも構わない.
e4c33c7f162f add paper
ikkun
parents:
diff changeset
268 %GISゼミや英語ゼミに参加した人はその分も入れておく.
e4c33c7f162f add paper
ikkun
parents:
diff changeset
269 %順番は重要なので気を付けるように.(提出前に周りの人に確認してもらう.)
e4c33c7f162f add paper
ikkun
parents:
diff changeset
270
e4c33c7f162f add paper
ikkun
parents:
diff changeset
271 \begin{flushright}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
272 2017年 3月 \\
e4c33c7f162f add paper
ikkun
parents:
diff changeset
273 \end{flushright}
e4c33c7f162f add paper
ikkun
parents:
diff changeset
274
e4c33c7f162f add paper
ikkun
parents:
diff changeset
275 % 付録
e4c33c7f162f add paper
ikkun
parents:
diff changeset
276
e4c33c7f162f add paper
ikkun
parents:
diff changeset
277 \end{document}