annotate paper/conclusion.tex @ 0:e8e6cd60b9b3

add file
author mir3636
date Mon, 09 Jul 2018 10:41:54 +0900
parents
children 9100f20b8797
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
e8e6cd60b9b3 add file
mir3636
parents:
diff changeset
1 \chapter{結論}
e8e6cd60b9b3 add file
mir3636
parents:
diff changeset
2 本研究では Gears OS の並列実行機構の実装を行った。
e8e6cd60b9b3 add file
mir3636
parents:
diff changeset
3 Gears OS は処理を Code Gear、データを Data Gear を用いて処理を実行する。
e8e6cd60b9b3 add file
mir3636
parents:
diff changeset
4 Code Gear と Input/Output Data Gear の組を Task とし、並列実行を行う。
e8e6cd60b9b3 add file
mir3636
parents:
diff changeset
5
e8e6cd60b9b3 add file
mir3636
parents:
diff changeset
6 Gears OS のプログラミングは Interface という 一部の Code Gear と Data Gear の集合を表現する Meta Data Gear を用いて行われる。
e8e6cd60b9b3 add file
mir3636
parents:
diff changeset
7 この Interface は stub Code Gear という全ての Code Gear に対応する Meta Code Gear で Data Gear を参照する。
e8e6cd60b9b3 add file
mir3636
parents:
diff changeset
8
e8e6cd60b9b3 add file
mir3636
parents:
diff changeset
9 Gears OS の Task は Context という全ての Code/Data Gear を参照できる Meta Data Gear が対応する。
e8e6cd60b9b3 add file
mir3636
parents:
diff changeset
10 並列処理を行う際は Context を生成し、 Code Gear と Input/Output Data Gear を Context に設定して TaskManager 経由で各 Worker の SynchronizedQueue に送信される。
e8e6cd60b9b3 add file
mir3636
parents:
diff changeset
11 Context の設定はメタレベルの記述になるため、ノーマルレベルでは par goto 文というCbC の goto 文に近い記述で並列処理を行える。
e8e6cd60b9b3 add file
mir3636
parents:
diff changeset
12 この par goto は通常のプログラミングの関数呼び出しのように扱える。
e8e6cd60b9b3 add file
mir3636
parents:
diff changeset
13
e8e6cd60b9b3 add file
mir3636
parents:
diff changeset
14 Gears OS の GPU 対応はアーキテクチャ用の Worker と Executor、 Buffer を用意することでアーキテクチャ毎に合わせた実行を行える。
e8e6cd60b9b3 add file
mir3636
parents:
diff changeset
15 本研究では CUDA 実装として CUDAWorker、 CUDAExecutor、 CUDABufferの実装を行い、実行確認を行った。
e8e6cd60b9b3 add file
mir3636
parents:
diff changeset
16 また、 CPU、 GPUの実行の切り替えは並列実行される Code Gear の stub Code Gear で継続先を切り替えることでメタレベルで記述することが可能となった。
e8e6cd60b9b3 add file
mir3636
parents:
diff changeset
17
e8e6cd60b9b3 add file
mir3636
parents:
diff changeset
18 Twice と BitonicSort の例題の測定結果では 1CPU と 32CPU で Twice では約 27.1 倍、BitonicSort では 約22.12 倍の速度向上が見られた。
e8e6cd60b9b3 add file
mir3636
parents:
diff changeset
19 また、GPU 実行の測定も行い、 kernel のみの実行時間では 32 CPU より Twice では約7.2倍、BitonicSort では約11.48倍の速度向上がみられ、GPU の性能を活かすことができた。
e8e6cd60b9b3 add file
mir3636
parents:
diff changeset
20
e8e6cd60b9b3 add file
mir3636
parents:
diff changeset
21 \section{今後の課題}
e8e6cd60b9b3 add file
mir3636
parents:
diff changeset
22 今後の課題として、Gears OS の並列処理の信頼性の保証、 チューニングを行う。
e8e6cd60b9b3 add file
mir3636
parents:
diff changeset
23
e8e6cd60b9b3 add file
mir3636
parents:
diff changeset
24 Gears OS では証明とモデル検査をメタレベルで実行することで信頼性を保証する。
e8e6cd60b9b3 add file
mir3636
parents:
diff changeset
25
e8e6cd60b9b3 add file
mir3636
parents:
diff changeset
26 証明は CbC のプログラムを証明支援系の Agda に対応させて証明を行う。
e8e6cd60b9b3 add file
mir3636
parents:
diff changeset
27 現在は Gears OS の Interface 部分の動作の証明を行っており、Stack や Tree の動作の証明を行っている。
e8e6cd60b9b3 add file
mir3636
parents:
diff changeset
28 Gears OS の並列処理の信頼性を証明するには Synchronized Queue の証明を行う必要がある。
e8e6cd60b9b3 add file
mir3636
parents:
diff changeset
29
e8e6cd60b9b3 add file
mir3636
parents:
diff changeset
30 モデル検査では CbC で記述されたモデル検査器である akasha \cite{atton-ipsj}を使用して行う。
e8e6cd60b9b3 add file
mir3636
parents:
diff changeset
31 モデル検査の方針としては、Code Gear の実行を擬似並列で実行し、全ての組合せを列挙する方法で行う。
e8e6cd60b9b3 add file
mir3636
parents:
diff changeset
32
e8e6cd60b9b3 add file
mir3636
parents:
diff changeset
33 Go、OpenMP との比較から、 Gears OS が1CPU での動作が遅いということがわかった。
e8e6cd60b9b3 add file
mir3636
parents:
diff changeset
34 Gears OS は par goto 文を使用することで Context を生成し、並列処理を行う。
e8e6cd60b9b3 add file
mir3636
parents:
diff changeset
35 しかし、Context はメモリ空間の確保や使用する全ての Code/Data Gear を設定する必要があり、生成にある程度の時間がかかってしまう。
e8e6cd60b9b3 add file
mir3636
parents:
diff changeset
36 そこで、 par goto のコンパイルタイミングで実行する Code Gear のフローをモデル検査で解析し、処理が軽い場合はContext を生成せずに、関数呼び出しを行う等の最適化を行うといったチューニングが必要である。
e8e6cd60b9b3 add file
mir3636
parents:
diff changeset
37
e8e6cd60b9b3 add file
mir3636
parents:
diff changeset
38 今回の CUDA 実装では Output Data Gear を書き出す際に一度 GPU から CPU にデータの送信する必要があった。
e8e6cd60b9b3 add file
mir3636
parents:
diff changeset
39 しかし、CPU、 GPU 間のデータの通信はコストが高いことが例題の結果からわかった。
e8e6cd60b9b3 add file
mir3636
parents:
diff changeset
40 GPU にあるデータは CPU 側ではポインタで持つことが出来る。
e8e6cd60b9b3 add file
mir3636
parents:
diff changeset
41 そこで Meta Data Gear に Data Gear が CPU、GPU のどこで所持されているかを持たせる。
e8e6cd60b9b3 add file
mir3636
parents:
diff changeset
42 GPU にある Data Gear が CPU で必要になったときに初めてデータの通信を行うことで、最低限のデータ通信で処理を実行できる。