More Related Content
Similar to 分散メモリ環境におけるシェルスクリプトの高速化手法の提案
Similar to 分散メモリ環境におけるシェルスクリプトの高速化手法の提案 (20)
分散メモリ環境におけるシェルスクリプトの高速化手法の提案
- 2. 背景 共有メモリ型
並列処理 メモリ
• 作業を高速化したい
コア1 コア2 コア3 コア4
• 大規模な処理を行いたい
例:マルチコアプロセッサ
並列処理環境
1.共有メモリ型 分散メモリ型
2.分散メモリ型
メモリ メモリ メモリ メモリ
並列処理の難点
• 複数のプロセッサに仕事を
割振る必要がある
⇒通信処理が必要 ネットワーク(LANなど)
例:PCクラスタ
2
- 4. 関連研究
シェルスクリプトを自動的に並列化する手法
が提案されている[1]
• マルチコア・SMTプロセッサ上を対象(共有メモリ型)
• 1.4倍~1.8倍のスピードアップ
• シェルスクリプトの自動並列化に成功
問題点
• 繰り返し文の並列化は行っていない
• 共有メモリ環境での並列化が対象
• マルチコア(4~8コア)での並列化では限界がある
[1]杉田秀,深山辰徳,蛭田智則,當仲寛哲,山名早人.“マルチコア・SMTプロセッサ上における
4
シェルスクリプト高速化手法”.情報処理学会研究報告,2007-ARC-172,pp.73-78,(2007)
- 6. 全体像
記述系 実行系
逐次スクリプト 生成
task.sh
高速処理したい リモートPC上で タスクキュー
シェルスクリプト 実行されるタスク
生成 タスク
実行スクリプト
実行系へtask.shをエンキュー
実行系の実行
6
- 7. 実行系 タスク
リモートPC上で実行される
PCリスト
コマンド群(task.sh)
Host1
タスクキュー 記述系で生成
Host2
Host3 PCリスト
Host4
・
並列計算に参加するPCの
タスク 情報(PCクラスタ)
実行系
マスタ・ワーカ法により
動的負荷分散
7
- 8. 実行系~マスタ・ワーカ法~
マスタ
マスタ 1.タスクキューに格納されているタスクを
仕事をしていないワーカに対して割り当てる
2.処理結果を受け取る
ワーカ
1.マスタより受け取ったタスクを処理
2.処理が終わると結果をマスタへ返す
ワーカ
2種類のプロセッサ集合に分けて処理を行う
タスクの大きさにバラつきがあっても効率よく処理できる
8
- 9. 記述系
逐次シェルスクリプトに対して特殊コメントを入力
1.#!/bin/sh ユーザが行う作業
2.count=1 1.PCリストを作成
2.特殊コメントの入力
3.while []; do
• 並列実行したい箇所を指定
4. #bodystart 2.ツールの起動
5. Command1 3.実行スクリプトを起動
6. Command2
7. #bodyend
8. count=`expr count+ 1`
9.done 並列処理
9
- 11. 記述系~task.sh~
特殊コメント内部をtask.shへ書き出す
1.#!/bin/sh task.sh
2.count=1 1.#!/bin/sh
3.while []; do 2.
4. #bodystart 3.Command1
5. Command1
6. Command2 4.Command2
7. #bodyend task.sh
8. count=`expr count+ 1`
9.done リモートPC上で実行される
独立なタスクとして扱われる
11
- 12. 変数情報
マスタ 1. A = 0 マスタで変数が宣言される
2. B = 0 例:A=0 , B=0
ワーカ
分散メモリ環境⇒複数のPCを利用し並列処理
• 変数情報が異なる
• リモートPC上へ必要な変数情報を伝える必要がある
12
- 13. 変数情報
マスタ 1. A = 0 マスタで変数が宣言される
2. B = 0 例:A=0 , B=0
リモートPCへ処理を割振る
ワーカ
分散メモリ環境⇒複数のPCを利用し並列処理
• 変数情報が異なる
• リモートPC上へ必要な変数情報を伝える必要がある
13
- 14. 変数情報
マスタ 1. A = 0 マスタで変数が宣言される
2. B = 0 例:A=0 , B=0
リモートPCへ処理を割振る
マスタで宣言された変数情報が
ワーカ ワーカ側では不明
分散メモリ環境⇒複数のPCを利用し並列処理
• 変数情報が異なる
• リモートPC上へ必要な変数情報を伝える必要がある
14
- 15. 記述系~変数情報~
特殊コメント直前までの変数情報をtask.shへ伝播
1. task.sh
2. 環境変数情報を取得
task.shへ伝播 1.#!/bin/sh
3. 2.変数情報
4. #bodystart 3.Command1
5. Command1
6. Command2 4.Command2
7. #bodyend task.sh
8. count=`expr count+ 1`
9.done 特殊コメント直前までの
変数情報をtask.shへ伝播
15
- 18. 記述系~実行スクリプト~
特殊コメントで指示された部分を変換する
1.#!/bin/sh 繰り返し文が何回実行されても
2.count=1 タスクを格納できる
3.while []; do
動的にタスクキューへ格納される
4.
• 実行系へtask.shをエンキュー
•
7. count=`expr count + 1`
8.done 繰り返し文の終了と同時に並列処理を行う
9.実行系の実行 ⇒実行結果に同期を取る
並列処理を行う
18
- 19. 実験
• 実験目的 ダミープログラム
提案手法による速度向上を調べる
1.#!/bin/sh
タスク粒度による性能の調査
2.while read line ;do
3. #bodystart
• 実験環境 4. sleep $line
PCクラスタ:PC15台(シングルコア) 5. #bodyend
6.done < random.txt
• 実験に利用したプログラム
sleepコマンドを利用したダミープログラム
19
- 21. 結果
横軸に0秒からの乱数の範囲の上限(秒)、縦軸に速度向上率(倍)
理想値の89.4%の速度向上
14.00
12.00
10.00
8.00
ワーカ14台
6.00 理想値の98.6%の速度向上 ワーカ8台
4.00
倍
率
上
向
度
速
ワーカ2台
)
(
2.00
0.00
1 3 5 7 9 11 13 15
0秒からの乱数の範囲(秒)
理想値=ワーカ台数倍の速度向上 21