백만분의 1초 까지 계산할 수 있을 까요?
글쓴이: andysheep / 작성시간: 토, 2004/09/04 - 4:28오후
clock() 함수로
while loop 를 한번은 500,000 번 돌게,
다음 한번은 600,000 번 돌게 한 후
걸린 시간을 비교해 보니 결과 값이 똑같게 나오네요.
0.01 초인가 한계인 듯 하네요.
glibc 매뉴얼에서 시간에 관한 부분을 보니
struct timeval 은 변수 중 하나가 백만분의 1초 값을 저장한다고 설명이 되었더군요. 근데, 제가 사용하는 시스템의 CPU는 샐래론 450MHz 입니다.
450 MHz 의미처럼 는 시스템이 1초에 450, 000, 000 클럭을 만들어 내고, 리눅스 커널에서 이 클럭수를 1/100 간격으로 얻어내 준다면 충분히 백만분의 1초까지 시간 차이를 얻어낼 수 있다고 봅니다.
Forums:
보통 그런경우에는 루프회수를 좀 더 극적으로 늘려서 나눕니다만...
보통 그런경우에는 루프회수를 좀 더 극적으로 늘려서 나눕니다만...
더 낮은 시간 단위의 함수가 일부 라이브러리에 있었을겁니다. 잘은 기억 안나는데;
from bzImage
It's blue paper
man nanosleep
man nanosleep
Written By the Black Knight of Destruction
일반적인 PC 하드웨어에선 거의 불가능합니다만, 몇몇 하드웨어를 추가하면
일반적인 PC 하드웨어에선 거의 불가능합니다만, 몇몇 하드웨어를 추가하면 가능합니다. 속편하게 추가할 수 있는 범용장비중 하나가 GPIB 입니다. http://www.ni.com 가시면 사양을 볼 수 있습니다.
---------
귓가에 햇살을 받으며 석양까지 행복한 여행을...
웃으며 떠나갔던 것처럼 미소를 띠고 돌아와 마침내 평안하기를...
- 엘프의 인사, 드래곤 라자, 이영도
즐겁게 놀아보자.
glibc랑 인터넷 검색 해서 간단하게(?) 만들어 봤습니다.st
glibc랑 인터넷 검색 해서 간단하게(?) 만들어 봤습니다.
struct timeval 사용하면 마이크로초 (백만분의 1초) 단위로 시간 가져오는 것 같습니다.
예로,
current time: 2004 09 05 15:46:17.919181
current time: 2004 09 05 15:46:17.920041
는 while loop 안에서 한 루프 돌때마다 시간이 지난 결과입니다.
맨 아래 결과 보면 clock() 이용해서 CPU 시간차 가져온 값과
gettimeofday() 값의 차이를 보면 소숫점 3째자리 이하입니다.
Devuan 1.0 (Debian without systemd)
amd64 station: AMD FX(tm)-6100 Six-Core Processor, 8 GB memory, 1 TB HDD
amd64 laptop: HP Touchsmart
글쇠판: 세벌 최종식, 콜맥 (Colemak)
[quote="akpil"]일반적인 PC 하드웨어에선 거의 불가능합니다만
정보 감사합니다.
glibc를 사용해 리눅스에서 백만분의 1초 범위에서 시간 차를 소프트웨어적으로 보여주니까 일단 만족합니다. 진짜로 초정밀 시간이 필요한 하드웨어 관련 작업을 하면 특수한 계측기나 장비를 사용해야겠다는 생각이 드네요.
Devuan 1.0 (Debian without systemd)
amd64 station: AMD FX(tm)-6100 Six-Core Processor, 8 GB memory, 1 TB HDD
amd64 laptop: HP Touchsmart
글쇠판: 세벌 최종식, 콜맥 (Colemak)
RDTSC를 이용해보는건 어떨까요.
X86 계열의 PC는 RDTSC를 이용하여 Tick을 Count할 수 있습니다.
회사에서 Benchmark 프로그램을 작성할때 이용했었는데 PC의 성능이 좋다면 1nano sec 정도의 resolution으로 time을 측정할 수 있습니다.
Win32환경이라면 QueryPerformanceCounter를 이용한 코드들이 널려 있겠지만 Linux환경이라면 코드를 좀 손보셔야 할겁니다.
구글에서 검색해 보세요.
댓글 달기