2012-06-16 3 views
0

우분투 12.04에서 CPU 시간 측정에 관한 질문이 있습니다.우분투에서 CPU 시간을 얻고 싶습니까?

일부 루프에서는 CPU 시간을 정지 조건으로 사용하고 싶습니다. 가장 좋은 방법은 무엇입니까? 나는 시간의 해상도에 대해 너무 많이 걱정하지 않는 경우

while(....) 
{ 
    //main part 
    // get CPUTIME 
    if(CPUTIME>= Given_Time) 
    { 
     break;   
    } 

} 

1) 나는 clock()를 사용할 수 있습니다.

time_t begin=clock(); 
.... 
time_t end=clock(); 

CPUTIME=(double)(end-begin)/(double)(CLOCKS_PER_SEC); 

그러나, time_t 많은 수 오버 플로우, 실행 시간 이후 (시간 이상) 길이 될 수있다. 이 문제를 어떻게 해결할 수 있습니까?

2) 두 번째 옵션 사용 getrusage(int who, struct rusage *usage) 루프에서이 함수를 호출하는 데 비용이 많이 드나요?

3) 세 번째 옵션은 int clock_gettime(clockid_t clk_id, struct timespect *tp) 입니다. 지금까지는 제 선택의 여지가 있습니다.

의견이나 제안이 도움이 될 것입니다.

답변

1

루프가 실행되는 속도에 따라 매 사이클마다 확인 기능을 호출하지 않을 수도 있습니다. 아마도 루프 카운터를 추가하고 CPU 시간을 확인하십시오 (예 : (i % 1000) == 0).

질문에 대답 :이 기능이있는 라이브러리 인 librt이 이와 같은 작업을 위해 특별히 만들어 졌기 때문에 개인적으로 clock_gettime(CLOCK_PROCESS_CPUTIME_ID, ...)을 사용하고 싶습니다. 그러나 다른 두 가지를 사용할 수없는 이유는 없습니다.으로 오버플로를 쉽게 감지 할 수 있습니다. 값이 랩핑되면 랩핑 횟수를 세는 별도의 카운터가 있습니다.

+0

감사합니다. 나는 clock_gettime()을 시도했다. 잘 작동한다. – user1460060

관련 문제