# HG changeset patch # User ikkun # Date 1492851468 -32400 # Node ID 9920afa285efef3357066529f77d260a71b70a0c # Parent a7d96c2f588b4192bb2b2f2be29d06dc71ce849c fix diff -r a7d96c2f588b -r 9920afa285ef paper/sigos.tex --- a/paper/sigos.tex Sat Apr 22 16:51:58 2017 +0900 +++ b/paper/sigos.tex Sat Apr 22 17:57:48 2017 +0900 @@ -71,14 +71,19 @@ % 和文概要 \begin{abstract} - 現代の OS では拡張性と信頼性を両立させることが要求されている。 - 信頼性をノーマルレベルの計算に対して保証し、拡張性をメタレベルの計算で実現することを目標に Gears OS を設計中である。 - Gears OS は継続を中心とした言語で記述されており、メタ計算をノーマルレベルと分けて記述することができる。並列処理はメタ計算によって記述されており、CbC自体には並列処理の機能はない。Gears OS のプログラムはCode Gear とData Gear の集まりであるinterfaceによって行われる。Gears OSでのスレッドはinterfaceの集合で出来ており、code gear data gearを接続するcontextというmeta data gear を持つ。 並行実行する場合は新しくcontextを生成し、それを時分割または、物理的なCPUに割り当てることによって実現される。 つまり、contextそのものがスレッドとなる。 +現代の OS では拡張性と信頼性を両立させることが要求されている。 +信頼性をノーマルレベルの計算に対して保証し、拡張性をメタレベルの計算で実現することを目標に Gears OS を設計中である。 +Gears OS は継続を中心とした言語で記述されており、メタ計算をノーマルレベルと分けて記述することができる。並列処理はメタ計算によって記述されており、CbC自体には並列処理の機能はない。 +メタレベルでの並列処理は新規に実行環境を作り引数を設定するなどの煩雑な処理であり、ノーマルレベルでは簡潔な並列構文があることが望ましい。 +本論文では並列構文と並列処理の実装について記述する。 - Gears OSでの同期機構はdata gear を待ち合わせることによって行われる。例えば、GPU上で実行する場合は必要なdata gearをGPU内部に転送し、それらが揃った時点で並列実行される。data gear の待ち合わせはメモリ上のdata gearのmeta data gear に待ち合わせ用のキューを作ることによって行われる。キューにはGears OSのスレッドつまりcontext meta data gearが入る。 +Gears OS のプログラムはCode Gear とData Gear の集まりであるinterfaceによって行われる。 +Gears OSでのスレッドはinterfaceの集合で出来ており、code gear data gearを接続するcontextというmeta data gear を持つ。 +並行実行する場合は新しくcontextを生成し、それを時分割または、物理的なCPUに割り当てることによって実現される。 つまり、contextそのものがスレッドとなる。 -本論文ではGears OSでの並列処理の構成方法について述べる。並列処理をメタレベルで行うことにより、並列処理で重要なチューニングや性能測定あるいはデバッグをメタ計算を切り替えることにより、ノーマルレベルの計算を変更する -ことなく行うことができることを示す。 +Gears OSでの同期機構はdata gear を待ち合わせることによって行われる。例えば、GPU上で実行する場合は必要なdata gearをGPU内部に転送し、それらが揃った時点で並列実行される。data gear の待ち合わせはメモリ上のdata gearのmeta data gear に待ち合わせ用のキューを作ることによって行われる。キューにはGears OSのスレッドつまりcontext meta data gearが入る。 + +並列処理をメタレベルで行うことにより、並列処理で重要なチューニングや性能測定あるいはデバッグをメタ計算を切り替えることにより、ノーマルレベルの計算を変更することなく行うことができることを示す。 \end{abstract} % 英文概要 @@ -92,6 +97,14 @@ % Introduce \section{Gears OS} +OS に要求される信頼性はテストやモデル検査あるいは証明によって保証される。 +一方で新しいアプリケーションや新しいアーキテクチャへの対応を OS が提供する必要がある。 +様々な拡張のたびに信頼性の保証をゼロからやり直すのは現実的ではない。本研究室で開発している Gears OS は +信頼性の保証を比較的固定されたノーマルレベルの計算に対しておこない、 +拡張性をメタレベルの計算で対応する。 +メタ計算の一つは並列処理であり、OS の機能の重要な部分である。 +本論文では Gears OS の並列構文と並列処理の実装について述べる。 + Gears OS は本研究室で開発している CbC(Continuation based C)を用いて行われている。 CbC は処理を Code Segment を用いて分割して記述することを基本としている。 Gears OS では Code Gear が CbC の Code Segement にあたる。 @@ -235,29 +248,70 @@ % session 名変えたい % __exit は そのcontext(thread)での終わりを示している(説明追加) -\section{Task の設定の Meta Computation の問題} -現在の Gears OS では 並列実行する Task の設定を Code\ref{src:setting_task} のように行っている。 -Code\ref{src:setting_task} では 実行する CodeGear、揃っていない Input Data Gear の数、Input/Output Data Gear への参照等の設定をノーマルレベルで記述している。 -しかし、この記述方法では Meta Data Gear である Task(Context) を直接参照しているため、ノーマルレベルとしては好ましくなく、 メタレベルでの記述を行いたい。 -そこで、 Code\ref{src:par_goto} のような goto の記述方法を新たに考案した。 -par goto は Code\ref{src:setting_task} に変換される記述である。 -この記述を行うことで、ノーマルレベルでは直接 Task を参照せずに par goto の引数で Task の設定を行うことが出来る。 -また、この記述を拡張することで、 CPU、 GPU での実行の切り替え等を行うことが可能であると考える。 +\section{Gears OS の並列構文} +Gears OS では 並列実行する Task の設定をメタレベルで Code\ref{src:setting_task} のように行っている。 +Code\ref{src:setting_task} では 実行する CodeGear、待ち合わせ中の +Input Data Gear の数、Input/Output Data Gear への参照等の設定を記述し +ている。 +これらの記述は Context などを含む煩雑な記述であるが、並列実行されるこ +とを除けば通常のCbC の goto 文と同等である。 +そこで、Context などを直接用いないノーマルレベルの並列構文を用意するこ +とが望ましい。Code\ref{src:par_goto} のような par goto を用いる記述方法を新たに考案した。 +この記述は メタレベル生成スクリプトにより、 Code\ref{src:setting_task} に変換される。 +また、メタレベルの記述を変換することで、 CPU、 GPU での実行の切り替え +等を行うことが出来るようになる。 % この例題微妙かなぁ \lstinputlisting[label=src:setting_task, caption=createTask]{./src/setting_task.c} \lstinputlisting[label=src:par_goto, caption=parGoto]{./src/par_goto.c} -\section{結論} +par goto で生成された Task は\verb+__exit+ と言うcontination に goto +することにより終了する。終了時には Task の Context が解放される。 +Gears OS では Task は output Data Gear を生成した時点で終了するので、 +par goto では直接に\verb+__exit+ に継続するのではなく、Data Gear に書 +き込み依存関係の処理をおこなう継続を指定する。これらの継続は interface +での Data Gear の定義に従って生成される。 + +これにより Code Gear と Data Gear の依存関係をノーマルレベルで記述でき +るようになる。 + +\section{考察} +従来の OS の並列処理は、例えば Unix の fork 、pthread の +\verb+pthread_create+で記述される。これらはプロセスIDや thread 構造体を +含むメタレベルの記述であり、並列処理の煩雑さを解消できなかった。 +これに対して、プログラミング言語レベルで並列処理構文を用意する方法があ +る。例えば Java の thread あるいは Go 言語の go routine などである。 +これらは OS によって直接サポートされているわけではない。 +言語レベルでの並列処理を細かく制御する場合は言語機能そのものに変更を加 +える必要がある。例えば、 Java の thread やgo routine を GPU で動かすた +めには言語のサポートを待つ必要がある。 + +並列処理ではチューニングが重要であり、どの Task を どのCPU とメモリに +割り当てるかを細かく制御する必要がある。これらを可能にするためには言語 +レベルでのサポートを非常に複雑にするか、言語レベルでの記述を諦めて OS +レベルでの記述をおこなう必要がある。 + +Gears OS ではノーマルレベルとメタレベルの記述を分離することにより、並 +列処理の煩雑な記述を避け、チューニングなどをメタレベルの記述で行うこと +が可能になる。 +メタレベルの記述の変更は現状では CbC レベルで行う。goto 文の行き先を +実行時に変更することも可能であり(goto meta)、この場合は実行時のチュー +ニングなどのメタ計算を行うことに相当する。 + +プログラムの信頼性をノーマルレベルで示しておけば、メタ計算がノーマルレ +ベルの意味を保存すれば信頼性はそのまま維持される。 +このように Gears OS ではノーマルレベルでのプログラムの信頼性を再利用し +ながら、メタ計算により様々な拡張を行うことができる。拡張部分の信頼性は +独立して示す必要がある。これらは Gears OS のモデル検査の機能などを用い +て示すことになる。 \section{まとめ} Code Gear Data Gear を用いてCUDAを利用した並列処理プログラムを記述した。 CUDA専用のコンパイラの nvcc と Code Gear Data Gear のコンパイラをCMakeを用いる事 で両立させた。 -Gears OSでのGPUの基本的な実行を確認することができた -\section{今後の課題} -\subsection{meta Levelの明示的な分離} -\subsection{metaによる検証} -\subsection{並列実行のAPI} +Gears OSでのGPUの基本的な実行を確認することができた。 +これらの部分は Gears OS のメタ計算として実装されている。 +par goto 構文の実装は今後の課題である。 + %par gotoとかcomputationの話を入れて、こういうふうに実装を完成させたいって言うのを書く。 % %今後はMeta computation部分の自動生成、GPGPUのMeta computationによるチューニングなどを行い、Gears OS における GPGPU のサポートを広げる。