Linux (및 POSIX 일반적으로)에서 높은 rez 시간을 위해 현재 권장되는 인터페이스는 clock_gettime입니다. 매뉴얼 페이지를 참조하십시오.
clock_gettime(CLOCK_REALTIME, struct timespec *tp) // for wall-clock time
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, struct timespec *tp) // for CPU time
맨 페이지를 읽으십시오. POSIX가 그렇게 말했기 때문에 -lrt로 링크해야한다는 것에주의하십시오. 아마도 자신의 clock_gettime을 정의한 오래된 프로그램을 위해 -lc에서 심볼 충돌을 피할 수 있을까요? 그러나 동적 라이브러리는 약한 기호를 사용합니다 ...
최상의 수면 기능은 nanosleep입니다. 그것은 신호 또는 usleep 같은 쓰레기 주위에 엉망이되지 않습니다. 그것은 잠자는 것으로 정의되며 다른 부작용이 없습니다. 또한 일찍 일어난 경우 (예 : 신호에서) 알려주므로 다른 시간 기능을 반드시 호출 할 필요는 없습니다.
어쨌든 시스템 호출과 관련된 짧은 메시지를 한 번 테스트하는 데 어려움을 겪을 것입니다. 다양성에 대한 엄청난 기회가 있습니다. 예 : 스케줄러는 다른 작업이 필요하다고 결정할 수 있습니다 (프로세스가 시작된 경우는 거의 없을 것이며, 아직 사용자의 타임 슬라이스를 사용하지 않았을 것입니다). CPU 캐시 (L2 및 TLB)는 쉽게 가능합니다.
멀티 코어 시스템과 최적화하려는 코드에 대한 단일 스레드 벤치 마크가있는 경우 코어 중 하나에 실시간 우선 순위를 고정시킬 수 있습니다. 인터럽트를 처리하지 않는 코어를 선택했는지 확인하십시오. 그렇지 않으면 키보드가 잠길 때까지 잠길 것입니다. taskset (한 CPU에 고정)과 chrt (실시간 prio 설정)를 사용하십시오. 이 트릭이 내가 할 보낸 메일 GMP-(STABLE)을 참조하십시오 http://gmplib.org/list-archives/gmp-devel/2008-March/000789.html
오, 그래, 가장 정확한 타이밍을 위해, 당신은 (86/AMD64에서) 자신 RDTSC 사용할 수 있습니다. 만약 당신이 벤치마킹하고있는 다른 시스템 콜을 가지고 있지 않다면 나쁜 생각이 아닙니다. 함수를 적용 할 벤치마킹 프레임 워크를 확보하십시오. GMP는 꽤 괜찮은 것을 가지고 있습니다. GMP가 아닌 mpn_whatever라고하는 벤치마킹 기능을 위해 잘 설정되지 않았을 수도 있습니다. 나는 기억하지 못한다. 그리고 그것은 가치가있다.