全体ミーティング (4/25)
DESCRIPTION
全体ミーティング (4/25). 村田 雅之. 今日の内容. 修士研究の進捗について. テーマ. Deterministic Parallel Copying Garbage Collection 結果の決定性が保証された並列コピー GC. 動機. GC を並列化したい 高速化が期待できる 並列化すると特有の問題がある 結果が実行ごとに変わることがある 実行順序が不定である. 並列プログラムの検証に関する研究. Deterministic Parallel Java (DPJ) Bocchino Jr. et al., OOPSLA 2009 - PowerPoint PPT PresentationTRANSCRIPT
全体ミーティング (4/25)
村田雅之
今日の内容• 修士研究の進捗について
テーマ• Deterministic Parallel Copying Garbage
Collection– 結果の決定性が保証された並列コピー GC
動機• GC を並列化したい– 高速化が期待できる
• 並列化すると特有の問題がある– 結果が実行ごとに変わることがある• 実行順序が不定である
• Deterministic Parallel Java (DPJ)– Bocchino Jr. et al., OOPSLA 2009– 型検査でメモリ領域へのアクセスを把握する– 実行結果の決定性を検証する
• これを用いる
並列プログラムの検証に関する研究
本研究のアプローチ• 並列 GC のアルゴリズムの決定性を DPJ の
型システムを応用して検証する
– 並列 GC の正しさを検証するための第一歩• 結果の決定性が保証されれば
逐次実行環境での正しさを検証するだけで済む
まずやろうとしたこと• 単純な並列 GC のアルゴリズムを実装して
みる
本研究でのヒープのモデル化• 単純な整数の配列として表現する– 配列のインデックスがアドレスを表す
1 4 4 1 3 7 4 5
0 1 2 3 4 5 6 7
単純な並列 GC アルゴリズム• ヒープを分割してそれぞれの領域について
並列にコピー GC を実行しそれを統合する
単純な並列 GC アルゴリズム1. 分割フェイズ
• ヒープを複数の区間に分割• 区間内にある root から到達可能なデータを
コピーする• 区間外へのポインタが現れたら一時停止
分割フェイズの例
1 4 4 1 3 7 4 5
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
region From
region To
分割フェイズの例
1 4 4 1 3 7 4 5
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
region From0 region From1
region To1region To0
分割フェイズの例
1 4 4 1 3 7 4 5
0 1 2 3 4 5 6 7
? ?
0 1 2 3 4 5 6 7
分割フェイズの例
1 4 4 1 3 7 4 5
0 1 2 3 4 5 6 7
1 ? 5 ?
0 1 2 3 4 5 6 7
分割フェイズの例
1 4 4 1 3 7 4 5
0 1 2 3 4 5 6 7
1 ? 5 4
0 1 2 3 4 5 6 7
分割フェイズの例
1 4 4 1 3 7 4 5
0 1 2 3 4 5 6 7
1 ? 5 4
0 1 2 3 4 5 6 7
範囲外へのポインタは
後回しにする
単純な並列 GC のアルゴリズム2. 統合フェイズ
• 隣り合う領域をひとつの領域として扱う• その範囲内でコピーを続ける
統合フェイズの例
1 4 4 1 3 7 4 5
0 1 2 3 4 5 6 7
1 ? 5 4
0 1 2 3 4 5 6 7
統合フェイズの例
1 4 4 1 3 7 4 5
0 1 2 3 4 5 6 7
1 2 ? 5 4
0 1 2 3 4 5 6 7
統合フェイズの例
1 4 4 1 3 7 4 5
0 1 2 3 4 5 6 7
1 2 3 1 5 4
0 1 2 3 4 5 6 7
単純なアルゴリズムを実装• まずはこのアルゴリズムを実装した ( つも
りだった )
• 実は 2 分割の場合しか考えられていなかった– 4 分割以上すると不都合なことが起こる
見落としていた例
1 4 4 2 12 7 4 2
0 1 2 3 4 5 6 7 ・・・
見落としていた例
1 4 4 2 12 7 4 2
0 1 2 3 4 5 6 7
1 ? 5 ?
0 1 2 3 4 5 6 7
・・・
・・・
見落としていた例
1 4 4 2 12 7 4 2
0 1 2 3 4 5 6 7
1 2 ? 5 ?
0 1 2 3 4 5 6 7
・・・
・・・
さらに範囲外へのポイ
ンタ
見落としていた例
1 4 4 2 12 7 4 2
0 1 2 3 4 5 6 7
1 2 ? 2 5 3
0 1 2 3 4 5 6 7
・・・
・・・
データは前からつめていく方針
見落としていた例
1 4 4 2 12 7 4 2
0 1 2 3 4 5 6 7
1 2 ? 2 5 3
0 1 2 3 4 5 6 7
・・・
・・・
終わっていないのに無視されてしま
うここから前は終わっ
たことにしていた
修正の方針• 統合する過程では複数個の処理されて
いないポインタが存在• まだコピーされていないデータのイン
デックスを入れるキューを用意してそれを利用する– など
性能について• 未完成ではあるが実行時間を計測してみ
た– おおまかには評価できそう?– 正確な実装ではさらに計算量が増えそう
• CPU : Intel Core i7 2.2GHz (4 コア )• メモリ : 4GB• OS : Mac OS X 10.6.7• Java 1.6.0_24
分割サイズを変えてみる• 長さ 65536 の配列について実行– ランダムにポインタを設定
• 配列を分割する最小サイズを変えてみる• 5 回実行したときの最速値を計測
結果
• 横軸は分割のサイズ• 縦軸は実行時間 (μs)• 128 から落ち着いている
16 32 64 128 256 512 10240
2000
4000
6000
8000
10000
12000
14000
16000
18000
逐次アルゴリズムとの比較• 分割・並列化によるコストが大きい– 予想はしていたが
実行時間 (μs)
128 まで分割 6265
逐次アルゴリズム 215
ワーカースレッドの数を変える• 1 から 4 で変えてみた– DPJ のオプション
• 長さ 65536 の配列• 分割サイズは 128
結果
• 1 スレッドの場合と比較した速さ• 4 スレッドで約 1.3 倍– 逐次部分が多いため?
1 2 3 41
1.5
2
2.5
3
3.5
4
4.5
次にすること• 単純なアルゴリズムの実装の修正• 性能向上を考える– アルゴリズムの工夫– 既存アルゴリズムを参考にするなど