본문 바로가기
IT/programming

[C/C++] C언어 프로그램/함수 실행 시간 측정, us 마이크로초 기준

by 어느해겨울 2022. 1. 18.

C언어 프로그램/함수 실행 시간 측정

C언어에서 사용할 수 있는 프로그램/함수 실행 간 시간 측정 방법을 공유한다.

timeval 구조체를 이용하여 작성하였고 마이크로초(us) 단위로 측정하였다.

단위의 변환이 필요하다면 코드를 고쳐서 사용하도록 하자.

 


소스코드

-  sleep 하여 1000000 us(1초)에 근사한 측정치를 보여주는지 확인하자.

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


double calc_diff_time(struct timeval _x, struct timeval _y) {
    double x_us, y_us, diff;

    x_us = (double)_x.tv_sec * 1000000 + (double)_x.tv_usec;
    y_us = (double)_y.tv_sec * 1000000 + (double)_y.tv_usec;

    diff = (double)y_us - (double)x_us;

    return diff;
}


int main(int _argc, char *_argv[]) {
    struct timeval t_time_begin, t_time_end;

    // 측정 시작
    gettimeofday(&t_time_begin, NULL);

    for( int idx = 0 ; idx < 10 ; idx++ ) {
        usleep(100000); // 100ms * 10
    }

    // 측정 종료
    gettimeofday(&t_time_end, NULL);

    printf("time diff : %.0lf us\n", calc_diff_time(t_time_begin, t_time_end));


    return 0;
}

 

컴파일 및 실행결과

- gcc로 컴파일하고 별도의 옵션은 필요없다.

muabow@muabow:~/dev/cpp_file$ gcc -o time_diff2 time_diff2.c ; ./time_diff2
time diff : 1001683 us
muabow@muabow:~/dev/cpp_file$ ./time_diff2
time diff : 1001311 us
muabow@muabow:~/dev/cpp_file$ ./time_diff2
time diff : 1001409 us
muabow@muabow:~/dev/cpp_file$ ./time_diff2
time diff : 1001424 us
muabow@muabow:~/dev/cpp_file$ ./time_diff2
time diff : 1001296 us
muabow@muabow:~/dev/cpp_file$ ./time_diff2
time diff : 1001492 us
muabow@muabow:~/dev/cpp_file$ ./time_diff2
time diff : 1001285 us

결과로 1000000의 근사치에 가깝게 나오는 걸 확인할 수 있다.

아래 포스팅에서도 언급했듯 sleep은 환경과 시스템의 영향을 받기 때문에 단위가 정밀해질수록 정확한 값을 얻기 어렵다.

https://muabow.tistory.com/299

 

[C/C++] C++ 프로그램/함수 실행 시간 측정, ms 밀리초 기준

C++ 프로그램/함수 실행 시간 측정 C++ 에서 사용할 수 있는 프로그램/함수 실행 간 시간 측정 방법을 공유한다. chrono 를 이용하여 작성하였고 밀리초(ms) 단위로 측정하였다. 더 작은 단위가 필

muabow.tistory.com

어쨌든 이 정도 결과면 사용하는데 크게 무리가 없다고 생각된다.

 

끝.

 

 

댓글