0
|
1 \documentclass[twocolumn,twoside,9.5pt]{jarticle}
|
|
2 \usepackage[dvips]{graphicx}
|
|
3 \usepackage{picins}
|
|
4 \usepackage{fancyhdr}
|
|
5 %\pagestyle{fancy}
|
|
6 \lhead{\parpic{\includegraphics[height=1zw,keepaspectratio,bb=0 0 251 246]{pic/emblem-bitmap.pdf}}琉球大学主催 工学部情報工学科 中間発表予稿}
|
|
7 \rhead{}
|
|
8 \cfoot{}
|
|
9
|
|
10 \setlength{\topmargin}{-1in \addtolength{\topmargin}{15mm}}
|
|
11 \setlength{\headheight}{0mm}
|
|
12 \setlength{\headsep}{5mm}
|
|
13 \setlength{\oddsidemargin}{-1in \addtolength{\oddsidemargin}{11mm}}
|
|
14 \setlength{\evensidemargin}{-1in \addtolength{\evensidemargin}{21mm}}
|
|
15 \setlength{\textwidth}{181mm}
|
|
16 \setlength{\textheight}{261mm}
|
|
17 \setlength{\footskip}{0mm}
|
|
18 \pagestyle{empty}
|
|
19
|
|
20 \begin{document}
|
1
|
21 \title{Monad に基づくメタ計算を基本とする Gears OS の設計}
|
|
22 \author{125716B 伊波 立樹{}{} 指導教員 : 河野 真治}
|
0
|
23 \date{}
|
|
24 \maketitle
|
|
25 \thispagestyle{fancy}
|
|
26
|
1
|
27 \section{先行研究}
|
|
28 本研究室では並列プログラミングフレームワーク Cerium\cite{cerium} と分散ネットフレームワーク Alice\cite{alice} の開発を行なってきた。
|
|
29
|
|
30 CeriumではTaskと呼ばれる分割されたプログラムを依存関係に沿って実行することで並列実行を実現する。
|
|
31 依存関係はプログラマ自身が意識して記述する必要があり、
|
|
32 Taskの種類が増えると記述が複雑になり、 負担が大きくなる。
|
|
33 Taskの依存関係がデータの依存関係を正しく保証しない場合があるという問題がある。
|
|
34 また、Taskの取り扱うデータに型情報がないため、 汎用ポインタをキャストして利用するしかなく、型の検査が行われていない。
|
|
35 Cerium は C++で実装されているが、オブジェクトと並列処理が直接対応していないのでオブジェクト指向で記述する利点が少ない。
|
|
36
|
|
37 Alice では処理の単位である Code Segment、 データの単位である Data Segment を用いてプログラムを記述\cite{segment}する。
|
|
38 Code Segment は使用する Input Data Segment, Output Data Segment を指定することで処理とデータの依存関係を解決する。
|
|
39 Alice は Javaで実装されており、実効速度が遅いという問題がある。
|
|
40 また、 Data SegmentをアクセスするAPIのシンタックスが特殊なため、Aliceを用いてプログラムを作成するには慣れが必要になる。
|
|
41
|
|
42 \section{Gears OS}
|
|
43 Cerium と Alice を開発して得られた知見から、並列実行をサポートするだけでなく、信頼性も確保したGears OS の設計・開発を行う。
|
|
44
|
|
45 Gears OS では Gear という単位を用いてプログラムを Code Gear, Data Gear に細かく分割する。
|
|
46 Code Gear は Input Data Gear から Output Data Gearを生成する。
|
|
47 Input と Outputの関係から Code Gear 同士の依存関係を解決し、並列実行を行う。
|
|
48
|
|
49 Ceriumは初め、Cell\cite{cell} 向けのフレームワークとして設計されたという経緯からプロセッサ毎の実行形式が異なる。
|
|
50 Gears OSでは Many Core CPU、GPUをはじめとする様々なプロセッサを同等な実行機構でサポートする。
|
|
51
|
|
52 従来の OS が行う排他制御、メモリ管理、並列実行などは Meta Computation に相当する。
|
|
53 Meta Computationは本論のComputationを支えるComputationのことである。
|
|
54 関数型言語では Meta Computation に Monad を用いる手法\cite{monad}がある。
|
|
55 Gears OS では、Meta Code/Data Gear を Monadとして定義し、Meta Computationを実現する。
|
|
56
|
|
57 Gears OS は並列実行をサポートするだけでなく、 信頼性も確保する。
|
|
58 そのために Gears OSを用いて作成されたプログラムに対する Model Checkingを行う機能\cite{model-check}を提供する。
|
|
59 並列プログラムに Model Checking を行うことでそのプログラムがとり得る状態を列挙する。
|
|
60 これにより、並列実行時のデッドロックの検出などを行うことでプログラムの信頼性を確保する。
|
|
61 Model Checking の実現には Meta Code/Data Gearを用いる。
|
0
|
62
|
1
|
63 Gears OS は Many Core CPU, GPU といった並列実行環境に合わせた設計・実装を行う。
|
|
64 また、接続する Gear を変更することでプログラムの振る舞いを変更することを可能にする柔軟性、Monad に基づくメタ計算による並行制御、Model Checking を用いた信頼性の確保を目的とする。
|
|
65
|
|
66 \section{Code Gear と Data Gear}
|
|
67 Gears OS ではプログラムの実行単位として様々な Gear を使う。
|
|
68 Gear が平行実行の単位、データ分割、Gear 間の接続などになる。
|
|
69
|
|
70 Code Gear はプログラムの実行コードそのものであり、OpenCL\cite{opencl}/CUDA\cite{cuda}
|
|
71 の kernel に相当する。
|
|
72 Code Gear は複数の Input Data Gear を参照し、一つまたは複数の Output Data Gear に書
|
|
73 き込む。
|
|
74 Code Gear は接続された Data Gear 以外には参照を行わない。
|
|
75 Code Gear はfunction callではないので、呼び出し元に戻る概念はない。
|
|
76 その代わりに、次に実行する Code Gear を指定する機能(軽量継続)を持つ。
|
|
77
|
|
78 Data Gear には、int や文字列などの Primitive Data Type が入る。
|
|
79 自分が持っていない Code Gear, Data Gear は名前で指し示す。
|
0
|
80
|
1
|
81 Gear の特徴の一つはその処理が Code Gear, Data Gear に閉じていることに
|
|
82 ある。
|
|
83 これにより、Code Gear の実行時間、メモリ使用量を予測可能なものにする。
|
|
84
|
|
85 Code Gear, Data Gear はポインタを直接には扱わない。
|
|
86 これにより、Code と Data の分離性を上げて、ポインタ関連のセキュリティフ
|
|
87 ローを防止する。
|
|
88
|
|
89 Code Gear, Data Gear はそれぞれ関係を持っている。
|
|
90 例えば、ある Code Gear の次に実行される Code Gear、全体で木構造を持つ
|
|
91 Data Gear などである。
|
|
92 Gear の関連付けは Meta Gear を通して行う。
|
|
93 Meta Gear は、いままでの OS におけるライブラリや内部のデータ構造に相当
|
|
94 する。
|
|
95 なので、Meta Gear は Code Gear, Data Gear へのポインタを持っている。
|
|
96
|
|
97 \section{Context}
|
0
|
98
|
|
99
|
1
|
100 \section{List}
|
|
101
|
|
102 \section{Synchronized Queue}
|
0
|
103
|
|
104 \begin{thebibliography}{9}
|
|
105
|
|
106 \bibitem{1}
|
|
107
|
|
108 \end{thebibliography}
|
1
|
109 \end{document}
|