スクリプトでプログラムの時間を測定する方法は? [コピー]

スクリプトでプログラムの時間を測定する方法は? [コピー]

私はこのスクリプトを書いており、プログラムを実行して時間を測定し、その時間をテキストファイルに書き込む必要があります。小数点以下 6 桁まで秒単位で入力する必要があります。これまで私はこれを持っています:

#!/bin/bash

MAX_THREADS=8   #2 x number of cores

if [ $# -ne 2 ]; then                  #checks number of arguments
    echo Invalid number of arguments
    exit 1
else
    NUM_THREADS=$1
fi

if [ $NUM_THREADS -gt $MAX_THREADS ]; then     
    echo Invalid number of threads
    exit 1
fi    

make clean
make
start=$(date +%s)
./CircuitRouter-SeqSolver $2
end=$(date +%s)

 cat > $2.speedup.csv << EOF
 $((end-start))
 EOF

スクリプトの他の部分では、NUM_THREADSに関連するすべてのコンテンツを無視できます。だからきれいにし、$2を引数としてCircuitRouter-SeqSolverを実行します。日付があるこの解決策を見ましたが、小数点以下の桁なしで秒のみを記録するため、ファイルにゼロのみを記録します。プログラムが1秒もかからなかったからです。完璧。 10進数を書き込むように日付を変更する方法は?

答え1

dateGNUバージョンを想定すると:

start=$(date +%s.%N)
./CircuitRouter-SeqSolver $2
end=$(date +%s.%N)

%N他のバージョンにはナノ秒部分がある場合とない場合があります。解像度を小数点以下6桁に制限するにはいくつかの操作を実行できますが、最も簡単な方法はおそらく次のとおりです。

printf "%0.6f\n" $((end-start))

bash編集:浮動小数点数学を実行しない問題を修正する:

printf %0.6f\n" $(echo $end-$start | bc)

答え2

私の小包を見ましたboshか?http://schilytools.sourceforge.net/bosh.html?現在 Bourne Shell が管理しているバージョンです。

マイクロ秒精度のタイミングをサポートします。マニュアルページをご覧ください。http://schillix.sourceforge.net/man/man1/bosh.1.htmlパラメータセクション(約25ページ)に変数の説明がありますTIMEFORMAT

LinuxのシステムCPU時間とユーザーCPU時間は1ミリ秒までしか正確ではありませんが、ウォールクロック時間はマイクロ秒精度で検索できます。

time各コマンドの組み込みまたは自動タイムアウト出力がデフォルトのシェルにstderr移動することに注意してください。関連する出力を別々stderrのファイルにインポートできるように、コマンドを個別にリダイレクトする必要があるかもしれません。

関連情報