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化