2012-01-26 1 views
0

CLOCK_MONOTONIC 시계와 함께 clock_getres 및 clock_gettime으로 프로그램의 일부분을 측정하려고합니다.clock_getres and clock_gettime

정확하게 이해하면 clock_gettime은 일종의 외부 시계 (cpu가 아닌)를 측정하여 통과 한 시간을 가져오고 paramer로 참조되는 struct timespec 인스턴스에서 업데이트합니다 (즉,

내가 알아야 할 것은 실제 시간이 아니라 시계의 클록 수 (CLOCK_MONOTONIC)입니다.

어떻게 할 수 있습니까? 그것은 clock_getres와 관련이 있을지 모르지만 정확히 어떻게 작동하는지 이해할 수는 없습니다.

주기 수를 얻는 방법을 아는 사람이 있습니까?

답변

0

Clock_gettime은 에포크 (또는 플랫폼의 특정 구현에 따라 과거의 다른 고정 시간)와 선택한 시계 (CLOCK_MONOTONIC의 경우)의 현재 시간 사이의 경과 시간을 가져옵니다.

프로세스가 걸리는 시간을 측정하려면 두 번 호출하여 차이를 계산해야합니다. 뭔가 같이 : 그건 아니지만

#include <stdio.h> 
#include <intrin.h> 

#pragma intrinsic(__rdtsc) 

int main() 
{ 
    unsigned __int64 i; 
    i = __rdtsc(); 
    printf_s("%I64d ticks\n", i); 
} 
+0

감사 : 당신이 CPU 사이클을 알고 싶다면

int main() { timespec start, finish; clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start); //code you want to profile clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &finish); //calculate the difference between start and finish return 0; } 

참고

, 이것은 당신에게 시간 값을 줄 것이다, 당신은 RDTSC 같은 것을 사용해야합니다 내가 뭘 물었는지. CLOCK_MONOTONIC의 사이클 수를 얻는 방법을 이해하지 못합니다. 또는 clock_getres는 무엇입니까? 그 시계의 주파수를 알려주지? – kakush

+0

CLOCK_MONOTONIC doesn; 사이클 정보를 알려주지 않으면 시계 정보를 얻을 수 있습니다. 대신 rdtsc를 사용해보십시오 (intrin.h). clock_getres는 플랫폼에 의존하는 지정된 시계의 해상도를 알려주는 역할 만합니다. – StevieG

+4

대부분의 컴퓨터가 요즘 가변 속도로 작동하므로주기 수를 원하지 않을 것입니다 (절전 기능). clock_getres는 측정 할 수있는 가장 작은 시간 델타를 가져옵니다 (이론적으로 이것은 1/주파수가 될 수 있습니다. 실제로는 모르겠지만 POSIX는 그것에 대해 명확하지 않은 것 같습니다) –