基本5の補足(並列処理での速度向上例)

提供: Eospedia
移動: 案内検索

 ルールを組み合わせ方次第で並列処理できるところ増やして速度アップをはかることができます。
しかし、ルール間ではファイルのやり取りが行われるので、処理の短いルールを何度も呼んでしまうとこの部分の割合が多くなってしまいます。
そこで1ファイルについて並列処理できない部分のルールはまとめて長く処理されるようにすると、そのルールを各ファイル毎で並列処理すればよいので速度を改善できます。

コード 処理結果(ProM
(1)
Rule Main
	input   '*.in'.all
	output  '*.out'.all
Flow
	rule First
	rule Second
End

Rule First
	input   '*.in'
	output  '{$I[1][1]}.route'
Action
	awk '{ print $1*2 }' {$I[1]} > {$O[1]}	
End

Rule Second
	input   '*.route'
	output  '{$I[1][1]}.out'
Action
	awk '{ print $1+1 }' {$I[1]} > {$O[1]}	
End
Outdata-PIONE-Basic5-1.png
(2)
Rule Main
	input   '*.in'.all
	output  '*.out'.all
Flow
	rule FirstSecond
End

Rule FirstSecond
	input   '*.in'
	output  '{$I[1][1]}.out'
Action
	awk '{ print $1*2 }' {$I[1]} > {$I[1][1]}.route	
	awk '{ print $1+1 }' {$I[1][1]}.route	 > {$O[1]}	
End
Outdata-PIONE-Basic5-2.png

(1)のコードでは最初の入力ファイルを.inとして、Firstで.routeを作り、Secondで出力ファイル.outを作っています。
Second実行するためには.routeファイルを入力としているので、1ファイルについてFirst, Secondを並列で処理することはできません。
また、Firstの処理後は.routeファイルをMainに渡し、そこからSecondに渡しているので、その分の時間が掛かっています。
そこで、(2)のように1ファイルについて並列処理ができないルールはまとめてしまった方がファイルのやり取りなどの時間が削減できます。