1. 윈도우즈
QueryPerformanceCounter와 QueryPerformanceFrequency를 이용하면 된다.#include <windows.h> int main(void) { LARGE_INTEGER start, end, frequency; double runTime; QueryPerformanceFrequency(&frequency); // 초당 틱 수 QueryPerformanceCounter(&start); // 시작 틱의 개수 ... // 수행할 내용 QueryPerformanceCounter(&end); // 종료 틱의 개수 runTime = ((double)(end.QuadPart - start.QuadPart) / freq.QuadPart) * 1000; // 단위는 ms }
2. 리눅스
1) gettimeofday 이용 방법 - Wall-clock Time 방식Reference 2번과 man page의 "conforming to"에 따르면 이 함수는 폐기예정(obsolete)로 지정 되었다. 대신 clock_gettime을 사용을 권장하고 이는 nano seconds 까지 측정 할 수 있다. clock_gettime의 사용법은 3번 항목에 적어두었다.
#include <sys/time.h> int main(void) { struct timeval start, end; double runTime; gettimeofday(&start, NULL); // 시작 시간 ... // 수행할 내용 gettimeofday(&end, NULL); // 종료 시간 runTime = (end.tv_sec - start.tv_sec) * 1000.0 + (end.tv_usec - start.tv_usec) / 1000.0; // 단위는 ms }2) getrusage 이용 방법 - Process Time 방식
#include <sys/time.h> #include <sys/resource.h> int main(void) { struct timeval start, end; struct rusage usage; double runTime; getrusage(RUSAGE_SELF, &usage); // start = usage.ru_stime; // 이것은 system CPU time start = usage.ru_utime; // 이것은 user CPU time ... // 수행할 내용 getrusage(RUSAGE_SELF, &usage); // end = usage.ru_stime; end = usage.ru_utime; runTime = (end.tv_sec - start.tv_sec) * 1000.0 + (end.tv_usec - start.tv_usec) / 1000.0; // 단위는 ms }3) clock_gettime 이용 방법 - Wall-clock Time 및 Process Time 방식
주의: 링크 시에 rt 라이브러리가 필요하다. gcc에서는 -lrt 옵션을 주면 된다.
#include <time.h> int main(void) { struct timespec start, end; double run_time; clock_gettime(CLOCK_REALTIME, &start); // Wall-clock time // clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start); // Process time ... // 수행할 내용 clock_gettime(CLOCK_REALTIME, &end); // Wall-clock time // clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &end); // Process time run_time = (end.tv_sec - start.tv_sec) * 1000.0 + (end.tv_nsec - start.tv_nsec) / 1000000.0; // 단위는 ms }Reference
댓글 없음:
댓글 쓰기