[C/C++] clock vs gettimeofday Linux와 Windows의 코드 실행 시간 측정 방법
반응형
windows program을 주력으로 개발하다 보니 자연스럽게 사용하던 clock을 이용하여 시간을 측정했습니다. 그런데 linux에서도 똑같이 시간을 측정했는데 system() API를 사용한 부분이 예상 시간이랑 너무나도 차이가 있더라고요... 확인해보니 리눅스에서의 시간 측정 방법이 잘못된 거였습니다.
LINUX에서 실행 시간 측정
clock()
CPU의 시간을 측정하는 API입니다. 즉, 프로세스가 CPU를 점유하지 않을 때는 시간이 측정되지 않게 되는데요, sleep(), system() API 등 CPU가 점유하지 않는 API를 사용한 시간은 측정이 되지 않습니다.
gettimeofday()
wall clock time이라고 하여 동작 시간을 측정하는 방식입니다. CPU의 동작 시간만을 확인하는 거와 달리 sleep(), system() 등 모든 동작의 시간을 측정할 수 있습니다.
#include<stdio.h>
#include<unistd.h>
#include<sys/time.h>
struct timeval start = {};
gettimeofday(&start, NULL);
...
usleep(1000 * 1000);
...
struct timeval end = {};
gettimeofday(&end, NULL);
//
// 실제 동작시간을 측정하는 공식.
//
double time = end.tv_sec + end.tv_usec / 1000000.0 - start.tv_sec - start.tv_usec / 1000000.0;
printf("%lf sec", time);
결과는 아래와 같이 표현됩니다.
> 0.3 sec
> 1.0 sec
WINDOWS에서 실행 시간 측정
GetProcessTimes
Linux에서처럼 CPU시간을 측정하기위한 API입니다. MSDN을 참조하세요.
clock()
windows는 기본적으로 wall clock time을 측정하기 때문에 visual studio를 이용한 빌드시 clock() API만을 사용하면 전체적인 동작 시간을 측정할 수 있습니다.
#include<iostream>
#include<ctime>
clock_t start = clock();
...
Sleep(1000);
...
clock_t end = clock();
//
// 실제 동작시간을 측정하는 공식.
//
double time = (double)(end - start) / CLOCKS_PER_SEC;
printf("%lf sec", time);
결과는 아래와 같이 표현됩니다.
> 0.3 sec
> 1.0 sec
반응형
'⌨ DEVELOPMENT > C++' 카테고리의 다른 글
[C/C++] InternetReadFile Simple File Download. (6) | 2020.03.04 |
---|---|
[Solved] Resolver error: The VS Code Server failed to start (3) | 2019.12.14 |
[C/C++] Get Process Name by Process Id 3가지 방법 (0) | 2019.12.12 |
[MFC] Dialog based - class name 지정하는 간단한 방법 (3) | 2019.09.08 |
[C++] Boost ASIO를 이용한 안전한 TCP/IP 비동기 소켓 서버 예제 (5) | 2019.08.07 |
[MFC] Dialog Load GIF image (5) | 2019.07.28 |
[C++] How to use GDIPlus Library in c++ (0) | 2019.07.28 |
[MFC] 다이얼로그의 윈도우 소멸자 호출 순서 (1) | 2019.07.28 |
댓글
이 글 공유하기
다른 글
-
[C/C++] InternetReadFile Simple File Download.
[C/C++] InternetReadFile Simple File Download.
2020.03.04 -
[Solved] Resolver error: The VS Code Server failed to start
[Solved] Resolver error: The VS Code Server failed to start
2019.12.14 -
[C/C++] Get Process Name by Process Id 3가지 방법
[C/C++] Get Process Name by Process Id 3가지 방법
2019.12.12 -
[MFC] Dialog based - class name 지정하는 간단한 방법
[MFC] Dialog based - class name 지정하는 간단한 방법
2019.09.08