次の違い(例:パフォーマンスの側面)は何ですか?
$ 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 ブートなど、多数の小さなシェルスクリプトを実行するタスクでのみ表示されます。
コマンドをスクリプトに入れることには大きな利点があります。一連のコマンドを設定でき、そのコマンドをいくつか調整するには、ファイルを編集するだけです。
答え2
パフォーマンスの違いはわずかです。どちらの場合も、コード自体は遅くても速く実行されず、bashバイナリのコードがすでにメモリにある可能性が高いため、実行しても違いはありません。
答え3
本当に多くのコマンドを手動で実行することを検討していますか? ——とても無能なようですね。 (たぶんあなたの質問でこれをよりよく説明したいかもしれません。)
シェルからスクリプトを呼び出すには、追加のシェルプロセスが必要です。特にスクリプトにそのような多くのコマンドがある場合にはまったく問題にはなりません。ただし、コマンドを一緒に使用すると、処理と拡張が簡単になります。
持っているコマンドとそれを呼び出す方法によっては、コマンドを個別に呼び出すと、呼び出しシェル環境に影響を与える可能性があります。購入すべてのシェルスクリプトベースのコマンド。すべてのコマンドをスクリプトに入れると、変更はローカルに保持されます。
簡単に言えば、すべてのコマンドをスクリプトに入れるにはいくつかの理由があります。
答え4
他の人が言ったように違いがありますが、無視するほどです。確認する方法は次のとおりです。
macair:scripts $ time ps
PID TTY TIME CMD
437 ttys000 0:00.01 -bash
442 ttys001 0:00.43 -bash
real 0m0.009s
user 0m0.002s
sys 0m0.007s
macair:scripts $ time ./ps.sh
PID TTY TIME CMD
437 ttys000 0:00.01 -bash
442 ttys001 0:00.44 -bash
32559 ttys001 0:00.00 /bin/bash ./ps.sh
real 0m0.012s
user 0m0.004s
sys 0m0.008s
macair:scripts $ cat ps.sh
#!/bin/bash
ps
macair:scripts $ echo $SHELL
/bin/bash
ただし、パフォーマンスは実際にコマンドを1つずつ入力する方法に応じて自動および手動で異なります。