https://www.yasunaga-lab.bio.kyutech.ac.jp/EosJ/index.php?title=%E5%9F%BA%E6%9C%AC%EF%BC%94%E3%81%AE%E8%A3%9C%E8%B6%B3%EF%BC%88each%E3%81%A7%E3%81%AE%E9%80%9F%E5%BA%A6%E6%A4%9C%E8%A8%BC%EF%BC%89&feed=atom&action=history
基本4の補足(eachでの速度検証) - 変更履歴
2024-03-28T12:12:57Z
このウィキのこのページに関する変更履歴
MediaWiki 1.23.6
https://www.yasunaga-lab.bio.kyutech.ac.jp/EosJ/index.php?title=%E5%9F%BA%E6%9C%AC%EF%BC%94%E3%81%AE%E8%A3%9C%E8%B6%B3%EF%BC%88each%E3%81%A7%E3%81%AE%E9%80%9F%E5%BA%A6%E6%A4%9C%E8%A8%BC%EF%BC%89&diff=14836&oldid=prev
2016年4月14日 (木) 02:45にTakahiroによる
2016-04-14T02:45:18Z
<p></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr style='vertical-align: top;'>
<td colspan='2' style="background-color: white; color:black; text-align: center;">←前の版</td>
<td colspan='2' style="background-color: white; color:black; text-align: center;">2016年4月14日 (木) 02:45時点における版</td>
</tr><tr><td colspan="2" class="diff-lineno">行73:</td>
<td colspan="2" class="diff-lineno">行73:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div> </tr></div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div> </tr></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div></table></div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div></table></div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div><del style="font-weight: bold; text-decoration: none;">いずれにしてもSizeOutは5回処理されていますが、(2)の場合は(1)に比べ時間が削減されています。同じマシン内においてeachの処理ではリンクを利用することにより同じ入力ファイルを何度もコピーすることを避けていることが確認できます。つまり入力ファイルのサイズを特に気にすることなくeachで並列処理を行えることが分かります。<br></del></div></td><td colspan="2"> </td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div><del style="font-weight: bold; text-decoration: none;"><br></del></div></td><td colspan="2"> </td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div><del class="diffchange diffchange-inline">では、eachとallの速度の違いを見てみましょう。いずれもA</del>.mrcの情報をそれぞれ5回出力している処理ですが、(3)ではSizeOutをall出力とし、(4)<del class="diffchange diffchange-inline">ではSizeOutをeach出力としています。eachを実行するときは</del>[[pione-client]]のオプション-t 5として5つの並列処理を行って、動作を比較してみます。<br></div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins class="diffchange diffchange-inline">いずれにしてもSizeOutは5回処理されていますが、(2)の場合は(1)に比べ時間が削減されています。<br></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins class="diffchange diffchange-inline">同じマシン内においてeachの処理ではリンクを利用することにより同じ入力ファイルを何度もコピーすることを避けていることが確認できます。<br></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins class="diffchange diffchange-inline">つまり入力ファイルのサイズを特に気にすることなくeachで並列処理を行えることが分かります。<br></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div> </div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins class="diffchange diffchange-inline"> では、eachとallの速度の違いを見てみましょう。<br></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins class="diffchange diffchange-inline">いずれもA</ins>.mrcの情報をそれぞれ5回出力している処理ですが、(3)ではSizeOutをall出力とし、(4)<ins class="diffchange diffchange-inline">ではSizeOutをeach出力としています。<br></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins class="diffchange diffchange-inline">eachを実行するときは</ins>[[pione-client]]のオプション-t 5として5つの並列処理を行って、動作を比較してみます。<br></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div> </div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div><table border="1"></div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div><table border="1"></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div> <tr></div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div> <tr></div></td></tr>
<tr><td colspan="2" class="diff-lineno">行130:</td>
<td colspan="2" class="diff-lineno">行135:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div> </tr></div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div> </tr></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div><table></div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div><table></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>eachによる並列処理により、時間が大幅に削減されていることが確認できます。<br></div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>eachによる並列処理により、時間が大幅に削減されていることが確認できます。<br></div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div><del style="font-weight: bold; text-decoration: none;"><br></del></div></td><td colspan="2"> </td></tr>
</table>
Takahiro
https://www.yasunaga-lab.bio.kyutech.ac.jp/EosJ/index.php?title=%E5%9F%BA%E6%9C%AC%EF%BC%94%E3%81%AE%E8%A3%9C%E8%B6%B3%EF%BC%88each%E3%81%A7%E3%81%AE%E9%80%9F%E5%BA%A6%E6%A4%9C%E8%A8%BC%EF%BC%89&diff=14835&oldid=prev
2016年4月14日 (木) 02:43にTakahiroによる
2016-04-14T02:43:26Z
<p></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr style='vertical-align: top;'>
<td colspan='2' style="background-color: white; color:black; text-align: center;">←前の版</td>
<td colspan='2' style="background-color: white; color:black; text-align: center;">2016年4月14日 (木) 02:43時点における版</td>
</tr><tr><td colspan="2" class="diff-lineno">行1:</td>
<td colspan="2" class="diff-lineno">行1:</td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div><del class="diffchange diffchange-inline">eachを利用すれば、各々のファイル毎で並列処理を行うことができます。このとき、各タスクごとに入力ファイルがコピーされ、処理が進んでいきます。</del><br></div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins class="diffchange diffchange-inline"> eachを利用すれば、各々のファイル毎で並列処理を行うことができます。このとき、各タスクごとに入力ファイルがコピーされ、処理が進んでいきます。</ins><br></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>しかし、異なるタスクで同じ入力ファイルを使うときでも毎回コピー処理が行われると、無駄なコピー処理が発生する、という問題があります。<br></div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>しかし、異なるタスクで同じ入力ファイルを使うときでも毎回コピー処理が行われると、無駄なコピー処理が発生する、という問題があります。<br></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>そこで[[PIONE]]では、同じファイルについてはリンクを作成・使用することによって、逐次コピーする時間を削減しています。<br></div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div>そこで[[PIONE]]では、同じファイルについてはリンクを作成・使用することによって、逐次コピーする時間を削減しています。<br></div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div><del style="font-weight: bold; text-decoration: none;"><br></del></div></td><td colspan="2"> </td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div><del class="diffchange diffchange-inline">例えば、下記のようなmrcファイルの情報を出力する2つのコードがあったとします。</del>(1)は全てのファイル(A.mrc, B.mrc, C.mrc, D.mrc, E.mrc)について1回ずつSizeOutを呼び、(2)は1つのA.<del class="diffchange diffchange-inline">mrcファイルについて5回SizeOutを呼ぶ仕組みとしています。サイズの大きいファイル(512×512×512の</del>[[mrc]]画像:[[ mrcImageNullImageCreate]]を使用)を入力として動作を比較します。<br></div></td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins class="diffchange diffchange-inline"> 例えば、下記のようなmrcファイルの情報を出力する2つのコードがあったとします。<br></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>(1)は全てのファイル(A.mrc, B.mrc, C.mrc, D.mrc, E.mrc)について1回ずつSizeOutを呼び、<ins class="diffchange diffchange-inline"><br></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>(2)は1つのA.<ins class="diffchange diffchange-inline">mrcファイルについて5回SizeOutを呼ぶ仕組みとしています。<br></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins class="diffchange diffchange-inline">サイズの大きいファイル(512×512×512の</ins>[[mrc]]画像:[[ mrcImageNullImageCreate]]を使用)を入力として動作を比較します。<br></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div> </div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div><table border="1"></div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div><table border="1"></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div> <tr></div></td><td class='diff-marker'> </td><td style="background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;"><div> <tr></div></td></tr>
</table>
Takahiro
https://www.yasunaga-lab.bio.kyutech.ac.jp/EosJ/index.php?title=%E5%9F%BA%E6%9C%AC%EF%BC%94%E3%81%AE%E8%A3%9C%E8%B6%B3%EF%BC%88each%E3%81%A7%E3%81%AE%E9%80%9F%E5%BA%A6%E6%A4%9C%E8%A8%BC%EF%BC%89&diff=14833&oldid=prev
Takahiro: ページの作成:「eachを利用すれば、各々のファイル毎で並列処理を行うことができます。このとき、各タスクごとに入力ファイルがコピーされ...」
2016-04-14T02:40:45Z
<p>ページの作成:「eachを利用すれば、各々のファイル毎で並列処理を行うことができます。このとき、各タスクごとに入力ファイルがコピーされ...」</p>
<p><b>新規ページ</b></p><div>eachを利用すれば、各々のファイル毎で並列処理を行うことができます。このとき、各タスクごとに入力ファイルがコピーされ、処理が進んでいきます。<br><br />
しかし、異なるタスクで同じ入力ファイルを使うときでも毎回コピー処理が行われると、無駄なコピー処理が発生する、という問題があります。<br><br />
そこで[[PIONE]]では、同じファイルについてはリンクを作成・使用することによって、逐次コピーする時間を削減しています。<br><br />
<br><br />
<br />
例えば、下記のようなmrcファイルの情報を出力する2つのコードがあったとします。(1)は全てのファイル(A.mrc, B.mrc, C.mrc, D.mrc, E.mrc)について1回ずつSizeOutを呼び、(2)は1つのA.mrcファイルについて5回SizeOutを呼ぶ仕組みとしています。サイズの大きいファイル(512×512×512の[[mrc]]画像:[[ mrcImageNullImageCreate]]を使用)を入力として動作を比較します。<br><br />
<table border="1"><br />
<tr><br />
<th></th><br />
<th>コード</th><br />
<th>入力ファイル</th><br />
<th>1ファイル毎のSizeOut</th><br />
<th>処理結果([[ProM]])</th><br />
</tr><br />
<tr><br />
<td>(1)</td><br />
<td><br />
<pre><br />
Rule Main<br />
input '*.mrc'<br />
output '*.txt'.all<br />
Flow<br />
rule SizeOut {val:1}<br />
End<br />
<br />
Rule SizeOut<br />
input '*.mrc'<br />
output '{$I[1][1]}{$val}.txt'<br />
param $val<br />
Action<br />
wc {$I[1]} > {$O[1]}<br />
End<br />
</pre><br />
</td><br />
<td><br />
A.mrc<br><br />
B.mrc<br><br />
C.mrc<br><br />
D.mrc<br><br />
E.mrc<br><br />
</td><br />
<td>1回</td><br />
<td>[[画像:Outdata-PIONE-Advanced4-1.png]]</td><br />
</tr><br />
<tr><br />
<td>(2)</td><br />
<td><br />
<pre><br />
Rule Main<br />
input 'A.mrc'<br />
output '*.txt'.all<br />
Flow<br />
rule SizeOut {val:1.upto(5)}<br />
End<br />
<br />
Rule SizeOut<br />
input 'A.mrc'<br />
output 'A{$val}.txt'<br />
param $val<br />
Action<br />
wc {$I[1]} > {$O[1]}<br />
End<br />
</pre><br />
</td><br />
<td><br />
A.mrc<br><br />
</td><br />
<td>5回</td><br />
<td>[[画像:Outdata-PIONE-Advanced4-2.png|255px]]</td><br />
</tr><br />
</table><br />
いずれにしてもSizeOutは5回処理されていますが、(2)の場合は(1)に比べ時間が削減されています。同じマシン内においてeachの処理ではリンクを利用することにより同じ入力ファイルを何度もコピーすることを避けていることが確認できます。つまり入力ファイルのサイズを特に気にすることなくeachで並列処理を行えることが分かります。<br><br />
<br><br />
<br />
では、eachとallの速度の違いを見てみましょう。いずれもA.mrcの情報をそれぞれ5回出力している処理ですが、(3)ではSizeOutをall出力とし、(4)ではSizeOutをeach出力としています。eachを実行するときは[[pione-client]]のオプション-t 5として5つの並列処理を行って、動作を比較してみます。<br><br />
<table border="1"><br />
<tr><br />
<th></th><br />
<th>コード</th><br />
<th>処理結果([[ProM]])</th><br />
</tr><br />
<tr><br />
<td>(3) all</td><br />
<td><br />
<pre><br />
Rule Main<br />
input 'A.mrc'<br />
output '*.txt'.all<br />
Flow<br />
rule SizeOut<br />
End<br />
<br />
Rule SizeOut<br />
input 'A.mrc'<br />
output '*.txt'.all<br />
Action<br />
for (( i=1; i<6; i++ ))<br />
do<br />
wc {$I[1]} > "{$I[1][1]}$i.txt"<br />
done<br />
End<br />
</pre><br />
</td><br />
<td>[[画像:Outdata-PIONE-Advanced4-3.png]]</td><br />
</tr><br />
<tr><br />
<td>(4) each</td><br />
<td><br />
<pre><br />
Rule Main<br />
input 'A.mrc'<br />
output '*.txt'.all<br />
Flow<br />
rule SizeOut {val:1.upto(5)}<br />
End<br />
<br />
Rule SizeOut<br />
input 'A.mrc'<br />
output '{$I[1][1]}{$val}.txt'<br />
param $val<br />
Action<br />
wc {$I[1]} > {$O[1]}<br />
End<br />
</pre><br />
</td><br />
<td>[[画像:Outdata-PIONE-Advanced4-4.png|410px]]</td><br />
</tr><br />
<table><br />
eachによる並列処理により、時間が大幅に削減されていることが確認できます。<br><br />
<br></div>
Takahiro