annotate slide/index.md @ 19:4dcfec1bf1e7

revision
author Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
date Thu, 18 Feb 2016 07:20:46 +0900
parents 5b584f09d356
children e077497754a0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
17
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 title: Code Segment と Data Segment を持つ Gears OS の設計
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 author: Shohei KOKUBO
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 profile: 琉球大学大学院修士2年
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 # 並列環境下におけるプログラミング
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 マルチコア CPU の性能を発揮するには、処理をできるだけ並列化しなければならない。
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 これはアムダールの法則により、並列化できない部分が並列化による性能向上を制限することから言える。
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 つまり、プログラムを並列処理に適した形で記述するためのフレームワークが必要になる。
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 マルチコア CPU 以外にも GPU や CPU と GPU を複合したヘテロジニアスなプロセッサが登場している。
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 並列処理をする上でこれらのリソースを無視することはできない。
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 しかし、これらのプロセッサで性能を引き出すためにはそれぞれのアーキテクチャに合わせた並列プログラミングが必要になる。
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 並列プログラミングフレームワークではこれらのプロセッサを抽象化し、CPU と同等に扱えるようにすることも求められる。
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 # Cerium
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 Cerium は本研究室で開発している並列プログラミングフレームワークである。
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 Cerium では関数またはサブルーチンを Task として定義する。
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 Task 間で依存関係を設定することができ、TaskManager が依存関係を解決することで実行可能な状態となる。
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 実行可能な状態となると Task に設定された実行デバイスの Scheduler に転送され実行される。
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 ![Cerium の構成](./pictures/createTask.svg)
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23
19
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
24 # Cerium の問題点
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
25 * Task 間の依存関係
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
26
17
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 Cerium では Task 間の依存関係を設定することで並列処理を実現する。
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 しかし、本来 Task は必要なデータが揃うことで実行可能になるものである。
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 Task 同士の依存関係だけでは前の Task が不正な処理を行いデータがおかしくなっても Task の終了は通知され、そのまま処理が続行されてしまう。
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 データがどこでおかしくなったのか特定するのは難しく、デバックに時間が取られる。
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31
19
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
32 * データの型情報
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
33
17
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 Task は汎用ポインタでデータの受け渡しを行うのでそこで型情報が落ちる。
19
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
35 Task 側で正しく型変換を行うことで正しい処理を行うことができるが、誤った型変換を行うと未定義な動作となりデータ構造を破壊する可能性がある。
17
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 型システムによるプログラムの正しさを保証することもできず、型に基づく一連の不具合が起こる危険性がつきまとう。
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37
19
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
38 # Cerium の問題点
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
39 * メモリ確保
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
40
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
41 Cerium の Allocator は Thread 間で共有されている。
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
42 ある Thread がメモリを確保しようとすると他の Thread はその間メモリを確保することができない。
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
43 これが並列度の低下に繋がり、処理速度が落ちる原因になる。
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
44
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
45 * オブジェクト指向と並列処理
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
46
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
47 同じ入力に対し、同じ入力を返すことが保証される参照透過な処理は並列化を行いやすい。
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
48 一方、オブジェクト指向は保守性と再利用性を高めるためにカプセル化やポリモフィズムを重視する。
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
49 オブジェクトの状態によって振る舞いが変わるため並列処理との相性が悪い。
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
50
17
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 # Gears OS
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 本研究では Code Segment と Data Segment によって構成される Gears OS の設計・実装を行った。
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
53
19
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
54 Code/Data Segment で分割して記述することでプログラム全体の並列度を高めて効率的に並列処理することを可能にする。
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
55
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
56 Gears OS の基本的な機能の実装には本研究室で開発している CbC(Continuation based C) を用いた。
17
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
57
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 # Code/Data Gear
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 Gears OS ではプログラムの単位として Gear を用いる。
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 Gear は並列実行の単位、データ分割、Gear 間の接続などになる。
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
61
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 Code Gear は Code Segment と同等のものである。
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 Code Gear には任意の数の Data Gear を参照し、処理が完了すると任意の数の Data Gear に書き込みを行う。
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 接続された Data Gear 以外にアクセスすることは
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
65
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 Data Gear はデータそのものを表す。
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 int や文字列などの Primitive Data Type を複数持つ構造体として定義する。
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
68
19
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
69 Gear 特徴として処理やデータの構造が Code/Data Gear に閉じていることにある。
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
70 これにより実行時間、メモリ使用量などを予測可能なものにする。
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
71
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
72 # Gears OS の構成
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
73 * Context
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
74
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
75 接続可能な Code/Data Gear のリスト、TaskQueue へのポインタ、Persistent Data Tree へのポインタ、独立したメモリ空間を持っている。
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
76 複数の Context で TaskQueue と Persistent Data Tree は共有される。
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
77
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
78 * TaskQueue
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
79
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
80 ActiveTaskQueue と WaitTaskQueue の2種類の TaskQueue がある。
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
81 ActiveTaskQueue には実行可能な Task が挿入され、WaitTaskQueue には依存関係が解決されていない Task が挿入される。
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
82 先頭と末尾の Element へのポインタを持つ Data Gear と Task へのポインタと次の Element へのポインタを持つ Data Gear で構成される。
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
83 Compare and Swap(CAS) を利用することでスレッドセーフに Queue を操作することができる。
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
84
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
85 # Gears OS の構成
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
86 * Persistent Data Tree
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
87
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
88 Data Gear の管理を行う。
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
89 非破壊木構造で構成されるため読み書きを平行して行うことができる。
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
90 Red-Black Tree アルゴリズムを用いて平衡性を保ち、挿入・削除・検索における計算量を保証する。
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
91 Persistent Data Tree への書き込みのみで相互作用を発生させ目的の処理を達成する。
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
92
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
93 * TaskManager
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
94
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
95 Gears OS における Task は実行する Code Gear と Input/Output Data Gear の組で表現される。
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
96 Input/Output Data Gear から依存関係を決定する。
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
97 TaskManager は Persistent Data Tree を監視し、Task の依存関係を解決する。
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
98
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
99 # Gears OS の構成
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
100 * Worker
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
101
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
102 Worker は ActiveTaskQueue から Task を取得する。
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
103 取得した Task の情報を元に必要な Data Gear を Persistent Data Tree から取得し、Code Gear を実行する。
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
104 実行後、必要なデータを Persistent Data Tree に書き出し次の Task を取得する。
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
105
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
106 ![Gears OS の構成](./pictures/gearsos.svg)
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
107
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
108 # Allocator
4dcfec1bf1e7 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
109
17
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
110
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
111 # 測定結果
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
112 * OS X(10.10.5)
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
113 * 2.3 GHz Intel Core i7
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
114 * length:1310720
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
115 * cpus/(length/task)/time
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
116 * 1/10/0.164748s
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
117 * 2/10/0.230114s
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
118 * 4/10/0.479126s
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
119 * 8/10/0.553448s
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
120 * 1/81920/0.010666s
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
121 * 2/81920/0.005303s
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
122 * 4/81920/0.002657s
5b584f09d356 revision
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
123 * 8/81920/0.002521s