스크립트에서 프로그램의 시간을 측정하는 방법은 무엇입니까? [복사]

스크립트에서 프로그램의 시간을 측정하는 방법은 무엇입니까? [복사]

저는 이 스크립트를 작성 중이고 프로그램을 실행하고 시간을 측정한 다음 그 시간을 텍스트 파일에 써야 합니다. 소수점 이하 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를 실행합니다. 날짜가 있는 이 솔루션을 보았지만 소수점 이하 자릿수 없이 초만 기록하므로 파일에 0만 기록합니다. 프로그램이 1초도 채 걸리지 않았기 때문입니다. 완벽한. 십진수를 쓰도록 날짜를 수정하는 방법은 무엇입니까?

답변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관련 출력을 별도의 파일로 가져올 수 있도록 해당 명령을 개별적으로 리디렉션해야 할 수도 있습니다.

관련 정보