C++ 실행 시간 측정하기


C++ 실행 시간 측정하기


내가 만든 함수가 얼마나 빠른지를 보기 위해서 실행 시간 측정하는 방법에 대해 알아보겠다.


vector를 이용해서 동적 배열로 10개를 만든 다음

무작위로 순서를 섞어서 std::sort 를 얼마 만큼의 시간이 들어가는지 측정을 해 볼 것이다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream>
#include <vector>
#include <algorithm>
#include <random> 
#include <chrono>
using namespace std;
 
class Timer
{
    using clock_t = std::chrono::high_resolution_clock;
    using second_t = std::chrono::duration<doublestd::ratio<1>>;
 
    std::chrono::time_point<clock_t> start_time = clock_t::now();
public:
    void elapsed()
    {
        std::chrono::time_point<clock_t> end_time = clock_t::now();
        cout << std::chrono::duration_cast<second_t>(end_time - start_time).count() << endl;
    }
};
 
int main()
{
    random_device rnd_device;
    mt19937 mersenne_engine{ rnd_device() };
 
    vector<int> vec(100000);
    for (unsigned int i = 0; i < vec.size(); i++)
        vec[i] = i;
 
    std::shuffle(begin(vec), end(vec), mersenne_engine);
    // 순서를 섞음.
    for (auto &e : vec) cout << e << " ";
    cout << endl;
 
    Timer timer; //시간측정
    std::sort(begin(vec), end(vec));
    timer.elapsed(); // 측정 끝
 
    for (auto &e : vec) cout << e << " ";
    cout << endl;
 
    return 0;
}
cs

일단 Timer 함수를 보면 엄청 복잡하게 되어 있다.
이 함수는 굳이 외우지 않아도 된다. 그냥 그때그때 마다 인터넷에 찾아서 적으면 된다.
Timer 함수는 실행 측정하는 class 이다.

class Timer가 실행이 되면 자동으로 실행 시간 측정이 들어간다.
그리고 timer.elapsed() 함수가 실행이 되면 시간 측정이 끝나게 된다.

27행을 보면 vector로 100000개의 동적 배열을 만들어 준다.
28행은 값을 1~10까지 값을 넣어주는 것이고,
31행은 배열의 처음과 끝까지 순서를 마구 섞어 준다.
33~34행은 어떻게 섞였는지 출력해주고
36행에서 시간 측정이 시작된다.
37행에서 sort 함수가 시작이 되고
38행에서 측정이 끝나게 된다.
40~41행은 정렬된 것을 출력하게 해준다.

< 출력 결과 >
(100000개는 출력이 오래 걸려서 출력 부분은 주석 처리하고 돌렸다.)





댓글

Designed by JB FACTORY