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

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

私はこのスクリプトを書いており、プログラムを実行して時間を測定し、その時間をテキストファイルに書き込む必要があります。小数点以下 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)

おすすめ記事