Software Transactional Memory************Python

Download Report

Transcript Software Transactional Memory************Python

近山・田浦研究室
70407 早水 悠登
Software Transactional Memoryによる
真の並列度を持つPython処理系の導出
研究の背景
並列処理の重要性
 Python, Rubyなど動的言語の需要拡大
 Daily job … 単純なテキスト処理など
 LARGE Application
… エンタープライズ, 大規模Web App など
研究の背景
 Problem ! – Global Lock
 1つの lock で並列制御
 メンテナンスが容易
 並列性が無い
for(;;){
if(--Ticker < 0){
release_lock(global_lock);
/*Other threads may run now*/
acquire_lock(global_lock);
}
/* Virtual Machine */
/* Execution */
}
研究の背景
 Solution? – Lock の分割
 複数のlockで並列制御
 高い並列性
 複雑なバグの温床
解決のアプローチ
Software Transactional Memory (STM)
 デッドロックがない
 シングルスレッド性能は悪い
細かく分割されたlock
Global Lock → Fine-grained Lock
橋渡しとして利用
本研究の対象
Python 処理系 ( CPython )
 C言語による実装
 大規模 (Python 2.5.2 で 約43万行)
 多くの人に使われている
 Global Interpreter Lock により並列度無し
関連研究
Transactional Memory ( TM )
 一連のメモリ操作 → トランザクション
 No EXPLICIT lock → No DEADLOCK
 Hardware TM [Herlihy, et al. (1993)]
 Software TM [Shavit, et al. (1995)]
 多種多様なアルゴリズム、実装
関連研究 –Transactional Memory
Example
TM_START_TRANSACTION;
int x =
TM_LOAD(&shared_x);
x
→トランザクション開始
→ shared_x を load したと記録
= x + 1;
TM_STORE(&shared_x, x);
TM_COMMIT_TRANSACTION;
→ shared_x へ store したと記録
→ 整合性チェック


OK … commit
NG … abort, rollback
関連研究 –Transactional Memory
Example
TM_START_TRANSACTION;
→トランザクション開始
int x =
TM_LOAD(&shared_x);
→ shared_x を load したと記録
メモリ操作履歴
x
= x + 1;
整合性チェック、conflict 検出、、、
TM_STORE(&shared_x, x);
TM_COMMIT_TRANSACTION;
→ shared_x へ store したと記録
→ 整合性チェック


OK … commit
NG … abort, rollback
関連研究 – STM
 トランザクション処理をソフトウェアで
 まだ見ぬハードウェアに依存しない
→ ポータビリティ●
 load/storeをソフトウェアで記録
→ パフォーマンス×
→ STMに”のみ”よる並列化は性能面で難あり
研究の目的
STM処理系のメモリ操作履歴を用いて
Global Lock → Fine-grained Lock
を行う方法論の確立
提案手法
1. STM で Global Lock を置き換え
2. Test run → メモリ操作履歴の蓄積
3. アクセスパターンの解析
4. Transactionの縮小, lock へ置き換え
Difficult: Global Lock→Fine-grained Lock
Easier: Global Lock→STM→Fine-grained Lock
Global Lock → STM
C言語を拡張したフロントエンドを作成
 トランザクション処理の記述を簡素化
transaction{
int x = shared_x;
x += 1
shared_x = x;
}
STM_START;
int x = STM_LOAD(&shared_x);
x += 1
STM_STORE(&shared_x, x);
STM_END;
STM → Fine-grained Lock
アクセスパターンの解析
 Python 変数に対応するデータ
 Pythonで並列性制御があるはず
 実装言語( C言語 )では並列性制御が必要無い?
 Contention の頻度
実験データを元に詳細な検討が必要
今後の進め方
 STMの評価
 小さなプログラムで Lock, STM を使って比較
 メモリ履歴取得, 解析の実験
 STM拡張C言語フロントエンドの実装
Python の STM化, Fine-grained Lock化