관리 메뉴

솜씨좋은장씨

[GCC/C] struct timeval 과 gettimeofday 를 활용하여 코드 실행 소요시간 구하는 방법! 본문

Programming/C | C++

[GCC/C] struct timeval 과 gettimeofday 를 활용하여 코드 실행 소요시간 구하는 방법!

솜씨좋은장씨 2023. 3. 5. 08:39
728x90
반응형

🧑🏻‍💻 timeval 구조체

strcut timeval
{
    __time_t tv_sec;          // Second - 초
    __suseconds_t tv_usec;    // Microseconds - 마이크로초
}

timeval 구조체는 tv_sec 과 tv_usec 로 구성되어있는데 

tv_sec 는 1초 2초 3초 할때 그 초 (Seconds) 정보를

tv_usec 는 1 / 1,000,000 초인 마이크로초 (Microseconds) 정보를 저장합니다.

timeval 구조체를 사용하기 위해서는 sys/time.h 헤더파일을 include 하면 됩니다.

🧑🏻‍💻 gettimeofday 

#include <sys/time.h>

int gettimeofday(struct timeval *tv, struct timezone *tz);

1970-01-01 00:00:00 +0000 (UTC) 이후 

gettimeofday 함수를 실행하는 이 시점까지

몇 초 (Second) 가 지났는지, 몇 마이크로초(Microsecond)가 지났는지 그 값을 얻을 수 있는 함수입니다.

- tv 는 현재 시간 값을 저장할 버퍼로 위의 timeval 구조체 형식을 사용합니다.

- tz 는 timezone 을 설정할때 사용하는데 현재는 사용하지 않아 NULL 값을 넣어주면 됩니다.

🧑🏻‍💻 마이크로초 단위까지 소요시간 구하는 방법

# elapsed_time.c

#include <stdio.h>
#include <sys/time.h>
#include <unistd.h>

int main() {
  struct timeval start_time, end_time;
  double elapsed_time;

  gettimeofday(&start_time, NULL);

  sleep(1);

  gettimeofday(&end_time, NULL);
  elapsed_time = (end_time.tv_sec - start_time.tv_sec) + ((end_time.tv_usec - start_time.tv_usec) / 1000000);

  printf("%fs\n", elapsed_time);
  return 0;
}

위 코드는 sleep(1); 작업을 수행하는 동안 걸린 소요시간을 계산하는 코드입니다.

 

위에서부터 보면 

 

시작시간과 종료시간을 저장하기 위해 timeval 구조체 변수로 start_time, end_time 을 선언하고

이 시작시간과 종료시간을 활용하여 계산한 소요시간을 저장할 double 형식의 elapsed_time 변수를 선언합니다.

struct timeval start_time, end_time;
double elapsed_time;

gettimeofday 함수를 활용하여 시작시간(start_time)을 구합니다.

gettimeofday(&start_time, NULL);

sleep(1); 작업을 수행하고 

sleep(1);

작업 수행 이후에 다시 gettimeofday 함수를 활용하여 종료시간(end_time)을 구합니다.

gettimeofday(&end_time, NULL);

이렇게 구한 시작시간, 종료시간을 활용하여 소요시간을 계산한 값을 elapsed_time 에 저장합니다.

elapsed_time = (end_time.tv_sec - start_time.tv_sec) + ((end_time.tv_usec - start_time.tv_usec) / 1000000.0);

 

end_time 과 start_time 의 tv_sec / tv_usec 의 차이 값을 각각 구한 뒤 더해주면 소요시간이 계산됩니다.

 

이제 이렇게 만든 코드를 컴파일하고 실행해 보면!

$ gcc elapsed_time.c -o elapsed_time
$ ./elapsed_time
1.000000 s

위와 같이 1.000000 s 가 출력되는 것을 볼 수 있습니다.

 

읽어주셔서 감사합니다.

Comments