私はこのスクリプトを書いており、プログラムを実行して時間を測定し、その時間をテキストファイルに書き込む必要があります。小数点以下 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
date
GNUバージョンを想定すると:
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
のファイルにインポートできるように、コマンドを個別にリダイレクトする必要があるかもしれません。