(コマンドラインではなく)bashスクリプトでコマンドを実行すると、パフォーマンスの点で違いがありますか?

(コマンドラインではなく)bashスクリプトでコマンドを実行すると、パフォーマンスの点で違いがありますか?

次の違い(例:パフォーマンスの側面)は何ですか?

$ make && cp bin/myexecutable inputfile.txt $workdir && cd $workdir
$ <series of sed commands to modify inputfile.txt>
$ mpirun -n 12 ./myexecutable [args]

スクリプトでこれを行うのと比較すると、次のようになります。

myscript.sh:

#!/bin/bash
make && cp bin/myexecutable inputfile.txt $workdir && cd $workdir
<series of sed commands to modify inputfile.txt>
mpirun -n 12 ./myexecutable [args]

+

$ ./myscript.sh

質問する理由は、ワークステーションで複数(10〜100以上)のシミュレーションジョブを実行することが多いからです。各ジョブは異なるジョブディレクトリで実行されます(異なる入力ファイルと異なるパラメータセットがあります)。したがって、実行スクリプトを作成すると、多数のパラメータに対して多くのテストを実行するのが簡単になります。一部のシミュレーション実行は数日間続くことがあります。

パフォーマンスの違いは無視できますか(例:<5〜10%)?スクリプト(コマンドラインと反対)が異なる環境を認識し、結果として問題を引き起こしますか?

ベストアンサー1

mpirunコマンドラインまたはスクリプトで実行しても、mpirunコマンドのパフォーマンスはまったく変わりません。唯一のパフォーマンスの違いは開始時間です。起動時にスクリプトを実行するのに数ミリ秒かかり(シェル実行可能ファイルがディスクキャッシュにない場合は時間がかかります)、コマンドラインにすべての内容を入力するのに数秒かかります。

最後のコマンドが完了するのを待ってすぐに終了するのではなく、実行中の最後のコマンドと交換するようにシェルに指示することで、少量のメモリーを節約できます。mpirun …に交換してくださいexec mpirun …

Bashの代わりにダッシュを使用すると、開始時間を少し節約できます。 mpirun などの長期実行タスクの場合、パフォーマンスの利点は、Linux ブートなど、多数の小さなシェルスクリプトを実行するタスクでのみ表示されます。

コマンドをスクリプトに入れることには大きな利点があります。一連のコマンドを設定でき、そのコマンドをいくつか調整するには、ファイルを編集するだけです。

おすすめ記事