view paper/intro.tex @ 16:958634b9fa32

make paper directory
author Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
date Wed, 17 Feb 2016 16:59:46 +0900
parents intro.tex@205805e6a6d8
children 5b584f09d356
line wrap: on
line source

\chapter{並列環境下におけるプログラミング}
CPU の処理速度の向上のためクロック周波数の増加は発熱や消費電力の増大により難しくなっている。
そのため、クロック周波数を上げる代わりに CPU のコア数を増やす傾向にある。
マルチコア CPU の性能を発揮するには、処理をできるだけ並列化しなければならない。
これはアムダールの法則により、並列化できない部分が並列化による性能向上を制限することから言える。
つまり、プログラムを並列処理に適した形で記述するためのフレームワークが必要になる。
また、PC の処理性能を上げるためにマルチコア CPU 以外にも GPU や CPU と GPU を複合したヘテロジニアスなプロセッサが登場している。
並列処理をする上でこれらのリソースを無視することができない。
しかし、これらのプロセッサで性能を出すためにはこれらのアーキテクチャに合わせた並列プログラミングが必要になる。
並列プログラミングフレームワークではこれらのプロセッサを抽象化し、CPU と同等に扱えるようにすることも求められる。

Cerium は本論文で開発している並列プログラミングフレームワークである。
Cerium では Task と呼ばれる分割されたプログラムを依存関係に沿って実行することで並列実行を可能にする。
Cerium では依存関係を Task 間で設定するが、本来 Task はデータに依存するもので Task 間の依存関係ではデータの依存関係を保証することができない。
また、Task には汎用ポインタとしてデータの受け渡しを行うので型情報を失う。
Task 側で正しく明示的に型変換する必要があり、間違った型変換を行うとデータ構造自体を破壊する可能性がある。
型システムによって検査することも出来ず、型に基づく一連の不具合が常に付きまとう。

今回、設計・実装を行なった Gears OS は Code Segment と Data Segment によって構成される。
Code Segment は処理の単位、Data Segment はデータの単位となる。
Gears OS を用いるプログラムも Code/Data Segment によってプログラムを分割して記述する。
Gears OS では Code/Data Segment を用いて記述することでプログラム全体の並列度を高めて、効率的に並列処理することが可能になることを目的とする。
また、Gears OS の実装自体が Code/Data Segment を用いたプログラミングの指針となるように実装する。
Gears OS における Task は実行する Code Segment と実行に必要な Input Data Segment, 出力される Output Data Segment の組で表現される。
Input/Output Data Segment によって依存関係が決定し、それに沿って並列実行する。
本論文では基本的な機能として Data Gear を管理する Persistent Data Tree, Task を管理する TaskQueue, 並列処理を行う Worker を実装し、簡単な例題を用いて Gears OS の評価を行う。