620 likes | 729 Views
共有メモリ並列計算機上の スケーラブルな動的メモリ管理 モジュール. 情報科学専攻 米澤研究室 遠藤 敏夫. プログラマの手間を軽くする 自動メモリ管理. メモリオブジェクトを大量に使うプログラム 自然言語処理、(不規則)シミュレーション 解探索問題、画像処理、ネットワークサーバ において、明示的メモリ解放( free()) はバグの温床 マルチスレッドプログラムではさらに困難 自動メモリ管理によりプログラマの手間軽減 本研究では探索型ガーベージコレクション( GC) を対象. メモリ管理モジュールは スケーラブルであるべき.
E N D
共有メモリ並列計算機上のスケーラブルな動的メモリ管理モジュール共有メモリ並列計算機上のスケーラブルな動的メモリ管理モジュール 情報科学専攻 米澤研究室 遠藤 敏夫
プログラマの手間を軽くする自動メモリ管理 メモリオブジェクトを大量に使うプログラム • 自然言語処理、(不規則)シミュレーション • 解探索問題、画像処理、ネットワークサーバ において、明示的メモリ解放(free())はバグの温床 • マルチスレッドプログラムではさらに困難 自動メモリ管理によりプログラマの手間軽減 • 本研究では探索型ガーベージコレクション(GC)を対象 博士論文発表
メモリ管理モジュールはスケーラブルであるべきメモリ管理モジュールはスケーラブルであるべき • 共有メモリ並列計算機: 高性能計算を可能とするプラットフォームの一つ • しかし、広まっているメモリ管理モジュール(OS標準のmalloc(), Java VMなどのメモリ管理)の多くは未並列化 アプリによっては • スレッドあたり100K回/秒のメモリ確保 • GC時間の割合~20% • 並列アプリの性能を保つには スケーラブルなアロケータ+GCが必要 アプリを並列化しても メモリ管理が逐次の ままでは無意味! 博士論文発表
研究の概要 • 共有メモリ並列計算機上のスケーラブルなメモリ管理モジュールの構築 • メモリアロケータ/GCの高速化技法の提案、実装 • ボトルネック削減 • アーキテクチャの特徴(SMP, DSM)を考慮した技法 • 性能モデルによる性能解析 • (フリーソフトウェアとして公開) http://www.yl.is.s.u-tokyo.ac.jp/gc/ 博士論文発表
CPU CPU CPU CPU CPU CPU Mem Mem Mem Mem Mem Mem 本モジュールの概要(1) • 対象ハードウェア: 共有メモリ並列計算機 • 対象ソフトウェア: マルチスレッドプログラム • C/C++ • Pthread, Solaris threadなど • 本発表では1スレッド=1プロセッサを仮定 • 各スレッドは共有ヒープ中の任意のオブジェクトをアクセス可 SMP: 対称型共有メモリマシン DSM: 分散共有メモリマシン 博士論文発表
本モジュールの概要(2) Conservative GCライブラリ [Boehm et al. 88]の並列化拡張 • BIBOP(Big-bag-of-pages)アロケータ 各スレッドが並列にメモリ確保可能 • マークスイープGC 複数スレッドが協調的にGC処理 • ストップ並列GC • 並行並列GC • 本研究の技法の多くはBIBOP+マークスイープ以外のシステムにも適用可能 博士論文発表
発表の概要 • スケーラブルな並列アロケータ • スケーラブルなストップ並列GC (手短に) • ストップ並列GCの性能モデル • 並行並列GC (手短に) 博士論文発表
Part 1局所性を考慮したスケーラブルな並列アロケータ (JSPP 2001 で発表)
並列プログラムのアロケータ:既存のアプローチ(1)並列プログラムのアロケータ:既存のアプローチ(1) 並列プログラムを記述するとき、アロケータをどうする? • 逐次アロケータ + 排他制御 • Libc mallocなどをそのまま使うと遅すぎる Libc mallocのスループット • SGI Origin 2000 • 16byteのオブジェクト確保を繰り返した場合のmalloc回数(全スレッド合計) • 各スレッドを別プロセッサに割当 • free時間省いて計算 ○← →× 博士論文発表
並列プログラムのアロケータ:既存のアプローチ(2)並列プログラムのアロケータ:既存のアプローチ(2) • 各システム/アプリケーション独自のアロケータ • 高速にすることができるが、プログラミングの手間がかかる • 汎用並列アロケータ (本研究のアプローチ) • [Larsonら98] [Veeら99] …スケーラビリティ • [Bergerら00] …スケーラビリティ+消費量 分散共有メモリ(DSM)マシンでの局所性への言及はまだない 博士論文発表
ローカルヒープさえ用意すれば充分か? • スケーラビリティ、局所性は良 • スレッド毎メモリ利用量が均一でない場合に問題 各瞬間で必要なメモリ量はmだが、アロケータによる消費量は2m 最悪、(必要メモリ量×スレッド数)の消費 スレッド毎のメモリ利用量の遷移例 m thread 1 利用量 time m thread 2 利用量 time スケーラビリティ 局所性 トレードオフ メモリ利用効率 空き領域のスレッド間共有を 許さない 許す 博士論文発表
並列アロケータが達成すべき目標 • スケーラビリティ • 確保処理が並列にできる必要 • 局所性(ここではDSMに注目) • 背景: ローカル/リモートメモリのアクセスコスト差(3倍) • 要求スレッドにローカルなメモリを渡せば、プログラム中のアクセスコストが向上 • メモリ利用効率 • アロケータによる消費量≧プログラムによる利用量 • 消費量をなるべく小さく抑えるべき スケーラビリティ、局所性 プログラム性能のため メモリ利用効率 他プログラムへの悪影響を小さくするため 博士論文発表
提案方式の概要 LPS(locality-aware page shared)方式 • BIBOP(big bag of pages)型アロケータの並列化方式 • スケーラブル • 64プロセッサ(R10000 195MHz)で25M malloc/s … 1プロセッサ時の36倍 • 局所性・メモリ利用効率のトレードオフを連続的に調整可 • ユーザは許容消費定数(k, 1≦k≦スレッド数) を調整 博士論文発表
BIBOPアロケータの概要 • ヒープは固定サイズのページから成り立つ • 各ページは均一サイズのオブジェクトを含む • 空き領域を以下のリストで管理 • フリーオブジェクトリスト(サイズ毎) • フリーページリスト • 確保処理の流れ: • フリーオブジェクトリスト探索 • 失敗ならフリーページリスト探索 • 失敗ならOSから新ページ確保/GC free obj list free page list heap 博士論文発表
素朴な並列化方式 threads • All Local(AL)方式 • 空き領域をスレッド個別管理 ○ スケーラビリティ、局所性 × メモリ利用効率 • Page Shared(PS)方式 • 空きオブジェクト: スレッド個別 • 空きページ: 共有 ○ メモリ利用効率 × 局所性 free obj list free page list OS All-local(AL) threads free obj list free page list OS Page-Shared(PS) 博士論文発表
Locality-aware page-shared(LPS) 提案方式: LPS方式 threads • Locality-aware Page Shared (LPS)方式 • 空き領域のスレッド個別管理 + スレッド間の空きページ移動 1. 自フリーオブジェクトリストを探索 2. 失敗なら、自フリーページリストを探索 失敗したら、 3a. 消費量が閾値を超えそうなとき、他リストを探索 3b.超えないとき、OSから確保 free obj list free page list OS (k×max(l)) kが小 → 利用効率重視 kが大 → 局所性重視 許容消費定数 (ユーザが調節可能) 最低限必要なメモリ量 (PSの消費量に相当) 博士論文発表
実験環境 • 計算機: DSMマシン SGI Origin 2000 • R10000 195MHz × 80 • Hypercube network • ページサイズ16KB 各ページは、プログラム中で最初にアクセスを行ったプロセッサにとってローカルな物理メモリノードに配置される(first-touch) • ベンチマークプログラム: • Matmul(行列積) • CKY(文脈自由文法パーザ) • BH(N体問題)、論文参照 C++, GC利用, StackThreads/MP [田浦 99] 利用(CKYのみ) 博士論文発表
予備実験:確保処理のピーク性能 時間あたりのスレッド間合計malloc回数を計測 • AL/LPSのスケーラビリティは良好 • 64スレッドで25M回/秒 (1スレッド時の36倍, libc 64 スレッドの54倍) • 16byteのオブジェクト確保の繰り返し • メモリ利用量はスレッド間で均一 • free/GC時間省いて計算 ○← →× 博士論文発表
性能評価(1): matmul サイクリック分割された密行列の積 • 行列積1回ごとに行列を確保しなおす • 各スレッドは自分の行(または列)を確保 • AL方式以外ではローカルメモリとは限らない • 1000×1000行列同士の積を30回 64スレッド実行時のデータ × → 博士論文発表
性能評価(2): matmulの性能 • LPS/ALはPSより3—19%高速 博士論文発表
性能評価(3): CKY 文脈自由文法パーザ • 文法データと文データから、ありうる構文を全て計算 • あらゆる部分文の構文要素をボトムアップに計算 36—100単語の文を200文解析 64スレッド実行時のデータ 各セルに解析結果の リストを格納 単語 博士論文発表
性能評価(4): CKYの性能 • AL/PS間消費量差が大きい • LPS/ALはPSより最大5%高速 博士論文発表
考察 • アロケータにより全体性能が変わる原因: • 確保処理の速度向上か? • 32スレッド以下でも差が出ている • CKYでさえピーク性能の10%以下の確保頻度 • 局所性向上によるメモリアクセス速度向上か? • Matmulの速度向上がCKYより大きい原因は調査中 考えにくい 16スレッド利用時のデータ (IRIX Memory Reference Counterにより計測) 博士論文発表
関連研究 • ローカルヒープを用いたスケーラブルな並列アロケータ • [市吉ら94]… KLIC用アロケータ。スレッドローカルGC • [Larsonら98] • [Veeら99]…共有ヒープへのアクセス頻度解析 • [Bergerら00]… BIBOP,メモリ消費量解析 • [Boehm00] … BIBOP, 空きオブジェクトリストの一部のみスレッドローカル いずれもDSMの局所性には言及せず 博士論文発表
Part1のまとめ • 並列BIBOPアロケータ方式LPSを提案 • ゴールは • スケーラビリティ ・・・ 64スレッドで36倍 • メモリ利用効率 • DSMでの局所性 • ユーザは許容消費倍率の調節によって、トレードオフを自由に調節可 トレードオフ 博士論文発表
Part 2スケーラブルなストップ並列GC (SC97, JSSST全国大会98で発表)
ユーザ GC ストップ並列GC time ストップ並列GC方式: • 複数スレッドが協調的にGCを行う → GC時間を短縮 • GC中はGCに専念 → ライトバリアなどを避ける スレッド ストップ GC 並行GC … × 飢餓状態の可能性 [Doligez 93]など ストップ並列GC 並行並列GC (Part 4) [Halstead 85]など [Cheng 01] 博士論文発表
root root root heap heap heap 並列マークスイープGC(1) • GC開始時に全ユーザプログラムを停止 • 全スレッドにより協調的にマーク処理 → 時間短縮したい! • 終わったらプログラム再開、少しづつスイープ 博士論文発表
PE PE PE PE PE PE PE PE PE PE PE PE PE PE PE Mark stack Mark stack Mark stack Mark stack Mark stack 並列マークスイープGC(2) スケーラビリティのために、 • 各スレッド毎にタスクプール (マークスタック) • タスクスチール: ひまスレッドは他のマークスタックから仕事(マークすべきオブジェクト)を獲得 • スタックの底から一つだけ獲得 → 部分木を獲得することに相当 Lazy task creation [Mohr et al. 90]の方式 博士論文発表
スケーラビリティのための最適化技法 • 巨大オブジェクトの分割スキャン • ボトルネックを除去した終了判定アルゴリズム • DSMにおける、マークビットのメモリノード間均等配置 ボトルネック 博士論文発表
実験環境 • 計算機 • Sun Enterprise 10000 SMP • Ultra SPARC 250 MHz × 64 • 10GB/sクロスバネットワーク • SGI Origin 2000 DSM • プログラム • BH (N体問題) • Cube (Rubik’s Cube近似解探索) • CKY (文脈自由文法パーザ) 論文参照 博士論文発表
アプリケーション: BH 60スレッド実行時のデータ (Enterprise, BH-pt) Barnes-HutアルゴリズムによるN体問題プログラム フェーズ1: 各質点を葉とする木構造を、位置を考慮し作成 フェーズ2: 各質点にかかる力を計算 (計算量O(N log N)) • 近い点からの力を正確に計算 • 遠い点からの力を木の中途ノードを用い近似計算 2バージョンの並列プログラム • フェーズ2のみ並列化(BH-st) → 1スレッドのみが木作成 • フェーズ1,2を並列化(BH-pt) 30,000点を20ステップ計算 ヒープサイズ: 50MB固定 A 点 博士論文発表
アプリケーション: Cube 60スレッド実行時のデータ (Enterprise) Rubik’s Cubeパズルの近似解 • 幅優先探索を行い、時々枝刈り(点数の高い局面だけ残す) • 局面の重複を防ぐために、局面を二分木で管理 ヒープサイズ: 35MB固定 枝刈り 各局面オブジェクトは 回転履歴リストを含む 博士論文発表
性能評価(1):EnterpriseでのGC速度向上 (マークオブジェクト量/マーク時間)の平均値を計測 • 負荷分散なしでは全く台数効果は出ない • 60スレッドで19—32倍の速度向上 博士論文発表
性能評価(2):OriginでのGC速度向上 • Enterpriseより速度向上は低い • Originでのみ、BH-ptとBH-stの差が大きい なぜ?原因をPart3で解析 13倍 7倍 博士論文発表
関連研究 • ストップ並列GC • [Halstead et al. 85]: 負荷分散なし • [Uzuhara 90] [Imai et al. 93]: 負荷分散を行うが、ボトルネック除去が不完全 • [Flood et al. 01] 負荷分散、ボトルネック除去。Copy GCとmark-compact GCの並列化 博士論文発表
Part2のまとめ • スケーラブルなストップ並列マークスイープGCの構築 • 負荷分散とボトルネックを除去する最適化 • Enterprise 10000 60スレッドで19—32倍の台数効果 • Origin 2000 64スレッドで7—20倍の台数効果 博士論文発表
Part 3:ストップ並列GCの性能モデル (コンピュータソフトウェア掲載, IPDPS2001で発表)
メモリアーキテクチャのGC性能への影響 • Part2で、ストップ並列GCの性能を計測 … • SMP/DSM間の性能差は何のため? • メモリレイテンシ? • バスバンド幅? アーキテクチャを考慮した、定量的な解析を行いたい GCの性能モデルを提案、性能予測器を構築 考えられる応用: • 未知のマシンでの性能評価 • オンライン最適化への利用(論文参照) 博士論文発表
CPU CPU CPU CPU CPU CPU cache cache cache cache cache cache memory memory memory memory memory memory 性能予測器の特徴 スケーラビリティを低下させる以下の事項を考慮 • 並列化によるキャッシュミス増加 • メモリノードへのアクセス衝突コスト • オブジェクト配置のばらつきができうるDSMで重要 Enterprise 10000 (SMP) Origin 2000 (DSM) 博士論文発表
性能予測器の概要(1) • 入力: GC対象のヒープスナップショット • 出力: Pスレッドでの並列GC時間の予測値 • ヒープスナップショットに擬似マーク処理を行う • Liveオブジェクト量、メモリアクセスパターンを記録 • 1スレッド実行でのCPU時間、キャッシュミス数を見積もる • CPU時間 ← Liveオブジェクト量に比例 • キャッシュミス数 ← メモリアクセスパターン+キャッシュシミュレータ • 次ページへ 博士論文発表
性能予測器の概要(2) ヒープスナップショットから 並列時 逐次時 CPU時間 TP T1 予測並列GC時間 生存キャッシュ ライン解析 キャッシュミス数 QP Q1 TPM TPM = TP + QPMP/P MVA キャッシュミス コスト MP M1 論文訂正: 4.3.1 最終行 ×TPM = TP + QPMP ○TPM = TP + QPMP / P • 本説明ではキャッシュミス=メインメモリアクセス • 実際には一次/二次キャッシュ、TLBを考慮 博士論文発表
モデルが仮定する事項 • 各オブジェクトがどのスレッドによりマークされるかはランダム • 1/Pの確率でローカルメモリアクセス • アクセス要求はメモリノードでのみ衝突 • ネットワーク途中での衝突を無視 (cf. LoPCモデル[Frank et al.97]) • キャッシュ無効化の影響を無視 • アクセス要求は常に CPU→Mem→CPU • 参照カウント2以上のオブジェクトは非常に少量 • グラフのほとんどの個所が合流のない木構造と仮定 • 仕事移動自体のコスト、終了判定コストを無視 博士論文発表
並列時のミス数見積もり(1) 逐次実行 並列実行 B B A A PE1 PE1 PE2 PE3 逐次実行では連続だった仕事が、並列実行では別スレッドによるかもしれない → ミス数の増加 博士論文発表
並列時のミス数見積もり(2) 逐次実行 Q1 = 4 並列時のキャッシュミス数の見積もり: QP = Q1 + (タスクスチール数) * (平均生存キャッシュライン数) キャッシュライン 並列実行 QP = Q1+4=8 キャッシュミス キャッシュヒット キャッシュライン寿命 今のところ経験則 P log(#live-objects) ヒープスナップショットから取得 博士論文発表
実験結果: 実測と予測の比較 BH-st Cube • BH(DSM)ではアクセス集中が最大原因 • Cubeではミス数増加が最大原因 予測誤差は7%—38% E10000 SMP O2000 DSM Real Pred (full) Pred (no contention) Pred (no miss incr.) 博士論文発表
関連研究 • LogPモデル[Culler et al. 93] • latency, overhead, gap(bandwidth), #processor • LoPCモデル[Vernon et al. 97] • active messageの文脈でのアーキテクチャモデル • メッセージ衝突のコストを考慮 • Portable Parallel Memory [Frigo 99] • 一般の不規則プログラムの性能モデル • ミスコスト一定を仮定 ←underestimate • 並列ミス増を(ライン数 x steal回数)と見積もり ←overestimate 博士論文発表
Part3のまとめ • 並列GC実行時間を見積もるモデルを提案 • ヒープスナップショットから、Pスレッドでの実行時間見積り • スケーラビリティを制限する以下の要素を考慮 • オブジェクトグラフの幅不足(論文参照) • 並列化によるキャッシュミス増加 • メモリノードでのアクセス衝突コスト • GCスレッド数の自動調整(論文参照) • 今後の仕事 • モデルの改良(タスクスチール回数の正当な見積もりなど) • 高速かつ正確な予測器の構築 博士論文発表
ユーザ GC 並行並列GC • リアルタイム性の必要なアプリケーションでは、GCによる停止時間が問題 → 並行GCが望ましい • アプリケーションのスケーラビリティを落とさないためには? • GCとプログラムが同時に動き、 • GC自体も並列 並行並列GC 博士論文発表