Clang 최적화의 비밀: 코드 스타일이 성능을 좌우한다
Your code is fast – if you're lucky
Quicksort를 최적화하던 중 발견한 놀라운 사실: Clang 같은 최신 컴파일러는 특정 코드 스타일에서만 분기 없는 빠른 명령어를 생성한다. 5000만 개의 double을 정렬하는 벤치마크에서, 초보자 친화적인 스타일로 작성된 코드는 4.39초가 걸리지만, 간결한 C 관용구로 바꾸면 C++ std::sort의 1.33초에 근접할 정도로 빨라진다. 이 글은 sorting network와 loop unrolling으로 이미 최적화된 Quicksort 구현에서 사소해 보이는 변경이 어떻게 3배 이상의 성능 차이를 만드는지 보여준다.
현대 컴파일러(특히 Clang)는 올바른 프로그래밍 스타일을 사용한다는 조건 하에 분기 없는 빠른 명령어를 사용해 루프를 최적화한다.