더북(TheBook)

1.10 벤치마킹

각각의 컨테이너는 다양한 장단점을 가지고 있으며, 모든 상황에 안성맞춤인 컨테이너는 존재하지 않습니다. 가끔은 주어진 상황에서 여러 컨테이너가 평균적으로 비슷한 성능을 내기도 합니다. 이러한 경우에는 벤치마킹(benchmarking)이 좋은 해결책일 수 있습니다. 벤치마킹은 통계 데이터를 기반으로 더 나은 접근 방식을 결정하는 방법입니다.

연속적인 메모리에 데이터를 저장하고, 다양한 함수를 이용하여 저장된 데이터에 접근하여 처리하는 시나리오를 생각해보겠습니다. 이러한 상황이라면 std::vector 또는 std::deque을 떠올릴 수 있습니다. 하지만 두 개 중 어느 것이 더 적합할지는 확신할 수 없습니다. 얼핏 보면 두 가지 모두 주어진 상황에서 좋은 성능을 낼 것 같습니다. 원소 접근, 삽입, push_back(), 특정 원소 수정과 같은 다양한 작업 중에서 몇몇은 std::vector를 사용하는 것이 좋으며, 어떤 작업은 std::deque이 더 나은 선택일 수 있습니다. 그럼, 어떻게 결정해야 할까요?

이러한 경우라면 실제 모델과 비슷한 작은 프로토타입을 만들고, 이를 std::vectorstd::deque 각각을 이용하여 구현해보는 것이 좋습니다. 그런 다음 각각의 성능을 측정합니다. 성능 테스트 결과에 따라 전반적으로 더 나은 결과를 나타내는 구현 방법을 선택하는 것이죠.

성능 측정을 위해 각각의 방법으로 구현한 프로토타입에 대해서 여러 작업을 실행해보고, 각각의 수행 시간을 비교해볼 수 있습니다. 다만 운영 체제의 스케줄링, 캐시, 인터럽트 등의 영향으로 인해 같은 작업을 수행한다 하더라도 매번 실행할 때마다 수행 시간이 조금씩 달라질 수 있습니다. 이러한 영향으로 인해 한 번 작업을 수행할 때 수백 나노초(nanosecond)만큼의 수행 시간 차이가 발생할 수 있으므로 부정확한 결과를 얻을 수 있습니다. 이러한 문제를 극복하기 위해 두 측정 시간에서 상당한 시간 차이가 발생할 때까지 작업을 여러 번(많게는 수백만 번) 반복하여 수행 시간을 측정하는 것이 좋습니다.

http://quick-bench.com/ 사이트처럼 벤치마킹을 쉽게 수행할 수 있는 벤치마킹 프로그램의 도움을 받을 수도 있습니다. 여기서 std::vector 또는 std::deque을 사용하여 구현한 소스 코드를 실행하고, 그 결과를 쉽게 비교할 수 있습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.