Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C/C++에서 chrono 라이브러리로 나노초 단위 실행 시간 정밀하게 측정하기

C/C++에서 코드의 실행 시간을 아주 정밀하게 측정해야 할 때가 있습니다. 이럴 때 유용한 것이 바로 C++11부터 표준에 포함된 chrono 라이브러리입니다.

chrono 라이브러리란?

chrono는 시간 관련 기능을 다루는 C++ 표준 라이브러리로, 그중 high_resolution_clock은 운영체제가 제공하는 가장 높은 해상도의 클럭입니다. 이 클럭은 나노초(nanosecond) 단위까지 측정할 수 있어, 짧은 코드 구간의 성능을 분석하는 데 적합합니다.

측정 원리

측정 방식은 간단합니다. 측정하려는 코드가 시작되기 직전에 현재 시각을 한 번 기록하고, 코드가 끝난 직후 다시 시각을 기록한 뒤 두 값의 차이를 계산하면 경과 시간을 얻을 수 있습니다.

예제 코드

아래 예제에서는 2억 번 반복되는 빈 루프를 실행하여 의도적으로 시간을 소모시키고, 그 동안 걸린 시간을 나노초 단위로 출력합니다.

#include <iostream>
#include <chrono>

typedef std::chrono::high_resolution_clock Clock;

int main() {
    // 시작 시점 기록
    auto start_time = Clock::now();

    // 빈 반복문으로 시간 지연 발생
    for (int i = 0; i < 200000000; i++) {
        ;
    }

    // 종료 시점 기록
    auto end_time = Clock::now();

    // 두 시점의 차이를 나노초 단위로 변환하여 출력
    std::cout << "Time difference: "
              << std::chrono::duration_cast<std::chrono::nanoseconds>(end_time - start_time).count()
              << " nanoseconds" << std::endl;

    return 0;
}

실행 결과

Time difference: 536395307 nanoseconds

출력 결과를 보면 약 5억 3천만 나노초, 즉 약 0.53초가 걸렸음을 알 수 있습니다. 실행 환경이나 컴파일러 최적화 옵션에 따라 값은 달라질 수 있습니다.

핵심 정리

  • high_resolution_clock: 나노초 수준의 고해상도 시간 측정에 사용되는 클럭입니다.
  • Clock::now(): 호출 시점의 현재 시각을 반환합니다.
  • duration_cast<std::chrono::nanoseconds>: 두 시점의 차이를 나노초 단위로 변환합니다.
  • .count(): 변환된 duration 값을 정수 형태로 얻습니다.

참고로 밀리초나 마이크로초 단위가 필요하다면 std::chrono::milliseconds, std::chrono::microseconds로 변경하기만 하면 되므로, 상황에 맞게 단위를 조절해 사용하면 됩니다.