view paper/conclusion.tex @ 19:4dcfec1bf1e7

revision
author Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
date Thu, 18 Feb 2016 07:20:46 +0900
parents 958634b9fa32
children
line wrap: on
line source

\chapter{結論}
先行研究である Cerium の開発を通して得られた知見を元に Code Segment, Data Segment によって構成される Gears OS の設計・実装を行なった。
実装には本研究室で開発している CbC(Continuation based C)を用いた。

Code Segment は処理、Data Segment はデータの単位である。
Code Segment は戻り値を持たないので、関数呼び出しのようにスタックに値を積む必要がなくスタックは変更されない。
このようなスタックに積まない継続を軽量継続と呼び、並列化、ループ制御、関数コールとスタックの操作を意識した最適化がソースコードレベルで行える。
プログラムを Code/Data Segment で分割して記述することで並列度を高めることができる。

Gears OS を Code/Data Segment の考えに基づいて設計を行なった。
Gears OS には Code/Data Segment と同等なものとして Code/Data Gear を定義した。
Code Gear はプログラムの処理そのもので、Data Gear は int や文字列などの Primitive Data Type を複数持っている構造体として表現する。
Code Gear は任意の数の Data Gear を参照し、任意の数の Data Gear に書き込みを行う。
Gear の特徴として処理やデータ構造が Code/Data Gear に閉じている。
これにより実行時間、メモリ使用量などを予測可能なものにする。

Gears OS の基本的な機能として Allocator, TaskQueue, Persistent Data Tree, Worker の実装を行なった。
Gears OS では Context に情報が格納される。
格納される情報には接続可能な Code/Data Gear のリスト、TaskQueue へのポインタ、Persistent Data Tree へのポインタ、Temporal Data Gear を確保するためのメモリ空間などがある。
Context はスレッドごとに存在し、それぞれが異なる Context を参照している。
Allocator は Context が持っているメモリ空間のアドレスを変更し、Temporal Data Gear の確保を行う。
確保される Data Gear は処理後には必要なくなるものなのでリニアに確保するだけの単純な処理である。
TaskQueue は並列処理される Task を管理する。
Gears OS で Task は実行する Code Gear と実行に必要な Data Gear の組で表現する。
TaskQueue はすべての Context で共有され、マルチスレッドでデータの一貫性を保つために Compare and Swap(CAS) を用いた。
Persistent Data Tree は Data Gear を管理する。
非破壊木構造で構成され、Red-Black Tree アルゴリズムによって平衡性が保たれる。
Persistent Data Tree はすべての Context で共有される。
非破壊木構造なので読み書きを平行して行うことができる。
Gears OS では Persistent Data Tree への書き込みのみで相互作用を発生させ目的の処理を達成する。
Worker は Task を並列処理する。
個別の Context を参照しているので、メモリ空間が独立しておりメモリを確保する処理で他の Worker を止めることはない。
CAS を用いて TaskQueue にアクセスし、Task を取得する。
取得した Task の情報を元に Persistent Data Tree から Data Gear を取得し、Code Gear を実行する。
また、Gears OS 自体が Code/Data Segment を用いたプログラミングの指針となるように実装を行った。

Gears OS を用いて簡単な例題を実装し、評価を行った。
与えられた要素を2倍にする Twice という依存関係がない並列処理の例題を Gears OS 上に実装した。
1 CPU と 12 CPU で約11.8倍の速度向上を確認し、Gears OS を用いることで十分な並列処理性能を引き出せることを示した。

\section{今後の課題}
例題として Twice を用いて並列処理の性能を示したが、Twice は依存関係がない並列処理である。
本来、並列処理には依存関係が存在する。
複雑な並列処理を行えるようにするために依存関係を解決する TaskManager の実装が必要である。

Gears OS 上でマルチコア CPU を用いた実行を可能にしたが、GPU などの他のプロセッサを演算に用いることができない。
Code/Data Segment を用いて各プロセッサのアーキテクチャにマッピングした実行機構を実装し、演算に利用できるようにする必要がある。

Data Segment は共用体と構造体によって定義したが、Data Segment 専用の構文を準備するべきである。
Context は必要な Data Segment のみを持っているべきであり、すべての Data Segment を知っている必要はない。
必要な Data Segment は実行可能な Code Segment のリストを参照することで推論することができる。

型情報を残すために Data Segment を定義しているが Data Segment の型情報を検査していない。
プログラムの正しさを保証するために Data Segment の型情報を検査する型システムを Gears OS 上に実装する必要がある。