밀리초 단위로 벤치마크하기

1 hour ago 3
  • 마이크로벤치마크는 입력 크기를 조절해 약 300ms 동안 실행되도록 맞추는 것을 경험칙으로 삼음
  • 1~999의 정수 밀리초는 작은 개선을 알아챌 정밀도를 갖추면서 눈으로 훑기 쉬워, 단위를 바꾸거나 소수를 쓸 필요가 없음
  • 10ms보다 짧은 실행은 인터프리터 시작 같은 고정 비용에 왜곡될 위험이 있으며, 수백 밀리초는 대체로 일회성 오버헤드의 영향을 무시할 만큼 긴 시간임
  • 수백 밀리초는 사람에게 빠르면서도 체감 가능한 시간이라, 숫자뿐 아니라 시간과 속도에 대한 직관으로 최적화 효과를 느낄 수 있음
  • 1초를 넘는 실행은 벤치마크 반복을 불필요하게 늦추며, 이 경험칙의 목적은 정밀 측정보다 올바른 판단에 필요한 직관을 얻는 데 있음

약 300ms를 기준으로 삼는 이유

  • 가독성과 정밀도를 함께 확보할 수 있음
    • 1~999 범위의 정수 밀리초는 작은 개선도 알아채기에 충분하고 눈으로 비교하기 쉬움
    • 1.31s와 239ms처럼 단위나 소수 표기가 달라지는 비교를 피할 수 있음
  • 고정 비용의 왜곡을 줄일 수 있음
    • 대략 10ms보다 짧으면 인터프리터 시작 같은 고정 비용이 결과를 왜곡할 위험이 있음
    • 수백 밀리초는 컴퓨터에 매우 긴 시간이며, 보통 일회성 오버헤드를 무시하기에 충분함
    • 오버헤드를 명시적으로 보정하는 더 복잡하고 덜 견고한 기법을 쓰지 않아도 됨
  • 사람이 체감할 수 있는 속도로 최적화 효과를 확인할 수 있음
    • 수백 밀리초는 빠르지만 알아챌 수 있어, 수치 해석에만 의존하지 않고 시간과 속도에 대한 직관을 활용할 수 있음
    • 최적화 후 굼뜨던 CLI 명령이 “즉시” 실행되는 듯 바뀌는 모습을 보는 재미도 있음
  • 반복 실행은 빨라야 함
    • 1초를 넘기면 벤치마크를 반복하는 데 필요 이상으로 시간이 걸림
    • 10번 연속 실행해 결과의 변동성을 눈으로 가늠하는 작업도 빠르게 할 수 있어야 함

정밀 측정보다 판단을 위한 직관

  • 이 경험칙은 벤치마크의 목적이 성능의 정밀 측정 자체보다는, 개발자가 올바른 결정을 내릴 충분한 직관을 얻는 데 있다는 전제를 둠
Read Entire Article