RUST BENCHMARK

Rust 성능 비교 조건

Rust가 빠르다는 말이나 반복문과 iterator를 느낌으로 비교하는 것은 근거가 약하다. Criterion 같은 벤치 도구, release 최적화, black_box, 입력 크기 분포, allocation 수, 경계값 점검 제거 여부를 고정해야 비교가 의미를 가진다.

01

질문 고정

비교하려는 대상이 반복문 문법인지, 할당 수인지, 알고리즘 복잡도인지 먼저 정한다.

다른 알고리즘을 문법 비교로 착각하지 않는다
02

Release 측정

debug 빌드가 아니라 최적화가 켜진 release 조건에서 측정한다.

debug는 경계값 점검와 최적화 차이가 크게 보인다
03

black_box 사용

컴파일러가 계산을 제거하지 못하도록 입력과 결과를 black_box로 감싼다.

너무 똑똑한 최적화를 막는다
04

입력 분포 반복

작은 입력, 큰 입력, 이미 정렬된 입력, 랜덤 입력처럼 실제 사용 조건을 나눈다.

한 케이스만 빠른 코드는 위험하다
05

원인 해석

allocation, cache locality, iterator fusion, 경계값 점검, inlining 중 무엇이 차이를 만드는지 본다.

수치만 있고 원인이 없으면 재현성이 약하다
debug
개발용 빌드 최적화가 약해 성능 판단 기준으로 쓰기 어렵다.
기능 확인에는 좋다
release
최적화 빌드 실제 배포 성능에 가까운 비교 기준이다.
target-cpu 설정도 영향을 준다
Criterion
통계 기반 측정 warmup, 반복, 분산, 회귀 비교를 도와준다.
단발 시간 측정보다 낫다
black_box
최적화 제거 방지 컴파일러가 벤치 대상 계산을 없애지 못하게 한다.
입력과 결과 양쪽을 본다

벤치 확인

release 실행 벤치가 debug가 아니라 release 조건으로 실행되는지 확인한다.
입력 다양성 한 가지 크기만이 아니라 실제 사용 범위를 대표하는 입력을 둔다.
할당 확인 속도 차이가 allocation 수 차이인지 계산 차이인지 분리한다.