view slide/index.md @ 17:5b584f09d356

revision
author Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
date Wed, 17 Feb 2016 18:58:23 +0900
parents
children 4dcfec1bf1e7
line wrap: on
line source

title: Code Segment と Data Segment を持つ Gears OS の設計
author: Shohei KOKUBO
profile: 琉球大学大学院修士2年

# 並列環境下におけるプログラミング
マルチコア CPU の性能を発揮するには、処理をできるだけ並列化しなければならない。
これはアムダールの法則により、並列化できない部分が並列化による性能向上を制限することから言える。
つまり、プログラムを並列処理に適した形で記述するためのフレームワークが必要になる。

マルチコア CPU 以外にも GPU や CPU と GPU を複合したヘテロジニアスなプロセッサが登場している。
並列処理をする上でこれらのリソースを無視することはできない。
しかし、これらのプロセッサで性能を引き出すためにはそれぞれのアーキテクチャに合わせた並列プログラミングが必要になる。
並列プログラミングフレームワークではこれらのプロセッサを抽象化し、CPU と同等に扱えるようにすることも求められる。

# Cerium
Cerium は本研究室で開発している並列プログラミングフレームワークである。

Cerium では関数またはサブルーチンを Task として定義する。
Task 間で依存関係を設定することができ、TaskManager が依存関係を解決することで実行可能な状態となる。
実行可能な状態となると Task に設定された実行デバイスの Scheduler に転送され実行される。

![Cerium の構成](./pictures/createTask.svg)

# Cerium の問題点(1/2)
Cerium では Task 間の依存関係を設定することで並列処理を実現する。
しかし、本来 Task は必要なデータが揃うことで実行可能になるものである。
Task 同士の依存関係だけでは前の Task が不正な処理を行いデータがおかしくなっても Task の終了は通知され、そのまま処理が続行されてしまう。
データがどこでおかしくなったのか特定するのは難しく、デバックに時間が取られる。

# Cerium の問題点(2/2)
Task は汎用ポインタでデータの受け渡しを行うのでそこで型情報が落ちる。
Task 側で正しく型変換を行うことで正しい処理を行うことができるが、間違った型変換を行うとデータ構造を破壊する可能性がある。
型システムによるプログラムの正しさを保証することもできず、型に基づく一連の不具合が起こる危険性がつきまとう。

# Gears OS
本研究では Code Segment と Data Segment によって構成される Gears OS の設計・実装を行った。
プログラムを Code/Data Segment で分割して記述することでプログラム全体の並列度を高めて効率的に並列処理することを可能にする。

Gears OS の基本的な機能の実装には本研究室で開発している CbC(Continuation based C)を用いた。

# Code/Data Gear
Gears OS ではプログラムの単位として Gear を用いる。
Gear は並列実行の単位、データ分割、Gear 間の接続などになる。

Code Gear は Code Segment と同等のものである。
Code Gear には任意の数の Data Gear を参照し、処理が完了すると任意の数の Data Gear に書き込みを行う。
接続された Data Gear 以外にアクセスすることは

Data Gear はデータそのものを表す。
int や文字列などの Primitive Data Type を複数持つ構造体として定義する。

Gear 特徴として

# 測定結果
* OS X(10.10.5)
* 2.3 GHz Intel Core i7
* length:1310720
* cpus/(length/task)/time
  * 1/10/0.164748s
  * 2/10/0.230114s
  * 4/10/0.479126s
  * 8/10/0.553448s
  * 1/81920/0.010666s
  * 2/81920/0.005303s
  * 4/81920/0.002657s
  * 8/81920/0.002521s