Mercurial > hg > Papers > 2015 > parusu-midterm
changeset 8:e2a7e7102521
Fix section1
author | Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 28 Oct 2015 17:56:25 +0900 |
parents | f218f749eba9 |
children | cc60f8c3b875 |
files | midterm.pdf midterm.tex |
diffstat | 2 files changed, 18 insertions(+), 23 deletions(-) [+] |
line wrap: on
line diff
--- a/midterm.tex Wed Oct 28 07:05:08 2015 +0900 +++ b/midterm.tex Wed Oct 28 17:56:25 2015 +0900 @@ -25,30 +25,27 @@ \maketitle \thispagestyle{fancy} -\section{先行研究} -本研究室では並列プログラミングフレームワーク Cerium\cite{cerium} と分散ネットフレームワーク Alice\cite{alice} の開発を行なってきた。 +\section{Gears OS} +本研究室では並列プログラミングフレームワーク Cerium\cite{cerium} と分散フレームワーク Alice\cite{alice} の開発を行なってきた。 + +Cerium と Alice を開発して得られた知見から、並列実行をサポートするだけでなく、信頼性も確保したGears OS の設計・開発を行う。 -CeriumではTaskと呼ばれる分割されたプログラムを依存関係に沿って実行することで並列実行を実現する。 -依存関係はプログラマ自身が意識して記述する必要があり、 -Taskの種類が増えると記述が複雑になり、 負担が大きくなる。 -Taskの依存関係がデータの依存関係を正しく保証しない場合があるという問題がある。 また、Taskの取り扱うデータに型情報がないため、 汎用ポインタをキャストして利用するしかなく、型の検査が行われていない。 -Cerium は C++で実装されているが、オブジェクトと並列処理が直接対応していないのでオブジェクト指向で記述する利点が少ない。 +Cerium では Taskと呼ばれる分割されたプログラムを依存関係に沿って実行することで並列実行を実現する。 +依存関係はプログラマ自身が意識して記述する必要があり、Taskの種類が増えると記述が複雑になり、 負担が大きくなる。 Alice では処理の単位である Code Segment、 データの単位である Data Segment を用いてプログラムを記述\cite{segment}する。 Code Segment は使用する Input Data Segment, Output Data Segment を指定することで処理とデータの依存関係を解決する。 -Alice は Javaで実装されており、実効速度が遅いという問題がある。 -また、 Data SegmentをアクセスするAPIのシンタックスが特殊なため、Aliceを用いてプログラムを作成するには慣れが必要になる。 - -\section{Gears OS} -Cerium と Alice を開発して得られた知見から、並列実行をサポートするだけでなく、信頼性も確保したGears OS の設計・開発を行う。 +Gears OS では Gear という単位を用いてプログラムを Code Gear, Data Gear に細かく分割する。 +これは Alice の Code Segment、 Data Segment にそれぞれ対応する。 -Gears OS では Gear という単位を用いてプログラムを Code Gear, Data Gear に細かく分割する。 -Code Gear は Input Data Gear から Output Data Gearを生成する。 -Input と Outputの関係から Code Gear 同士の依存関係を解決し、並列実行を行う。 +Ceriumは初め、Cell\cite{cell} 向けのフレームワークとして設計されたという経緯からプロセッサ毎の実行形式が異なっている。 +Gears OSでは Many Core CPU、GPUをはじめとする様々なプロセッサを同等な実行機構でサポートする。 -Ceriumは初め、Cell\cite{cell} 向けのフレームワークとして設計されたという経緯からプロセッサ毎の実行形式が異なる。 -Gears OSでは Many Core CPU、GPUをはじめとする様々なプロセッサを同等な実行機構でサポートする。 +Cerium は C++で実装されているが、オブジェクトと並列処理が直接対応していないのでオブジェクト指向で記述する利点が少ない。 +Alice は Javaで実装されており、実効速度が遅いという問題がある。 +Gears OS は本研究室で開発している CbC(Continutaion based C)\cite{cbc-llvm} を用いて実装を行う。 +CbC は処理を Code Segment で記述することを基本としているため、 Gears OS の Code Gear を記述するのに適している。 従来の OS が行う排他制御、メモリ管理、並列実行などは Meta Computation に相当する。 Meta Computationは本論のComputationを支えるComputationのことである。 @@ -65,8 +62,6 @@ また、接続する Gear を変更することでプログラムの振る舞いを変更することを可能にする柔軟性、Monad に基づくメタ計算による並行制御、Model Checking を用いた信頼性の確保を目的とする。 \section{Continuation based C} -Gears OS は本研究室で開発している CbC(Continutaion based C)\cite{cbc-llvm} を用いて実装を行う。 - CbC のプログラムでは C の関数の代わりに Code Segment を用いて処理を記述している。 Code Segment は C の関数と異なり戻り値を持たない。 Code Segment の宣言はCの関数の構文と同様に行い、型に \_\_code を使うことで宣言できる。 @@ -90,17 +85,17 @@ Gears OS ではプログラムの実行単位として様々な Gear を使う。 Gear が平行実行の単位、データ分割、Gear 間の接続などになる。 -Code Gear はプログラムの実行コードそのものであり、OpenCL\cite{opencl}/CUDA\cite{cuda} の kernel に相当し、 CbC では Code Segment で記述を行う。 +Code Gear はプログラムの実行コードそのものであり、OpenCL\cite{opencl}/CUDA\cite{cuda} の kernel に相当する。 Code Gear は処理の基本として、 Input Data Gear を参照し、一つまたは複数の Output Data Gear に書き込む。また、接続された Data Gear 以外には参照を行わない。 +これは Alice の Input Data Segment と Output Data Segment の関係に対応しており、依存関係を解決し、 Code Segment の並列実行を可能とする。 Code Gear はfunction callではないので、呼び出し元に戻る概念はない。 その代わりに、次に実行する Code Gear を指定する機能(軽量継続)を持つ。 Data Gear には、int や文字列などの Primitive Data Type が入る。 -Gear の特徴の一つはその処理が Code Gear, Data Gear に閉じていることに -ある。 +Gear の特徴の一つはその処理が Code Gear, Data Gear に閉じていることにある。 これにより、Code Gear の実行時間、メモリ使用量を予測可能なものにする。 Code Gear, Data Gear はポインタを直接には扱わない。 @@ -145,7 +140,7 @@ この図を GearBox と呼ぶことにする。 図\ref{fig:sync}は Synchronized Queue の GearBox である。 M:get/put が CAS を行う Meta Code Gear となる。 -今回は CAS で実装しているが、接続する Meta Code Gear を変更することで通常のQueueやLockを使用したsynchronizedQueueなど仕様変更にも対応できる。 +今回は CAS で実装しているが、接続する Meta Code Gear を変更することで通常のQueueやMutexを使用したsynchronizedQueueなど仕様変更にも対応できる。 \begin{figure}[ht] \centering