저는 이 스크립트를 작성 중이고 프로그램을 실행하고 시간을 측정한 다음 그 시간을 텍스트 파일에 써야 합니다. 소수점 이하 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
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
관련 출력을 별도의 파일로 가져올 수 있도록 해당 명령을 개별적으로 리디렉션해야 할 수도 있습니다.