반응형
왜 설정 별 벤치마크가 필요할까?
CMake를 사용하는 프로젝트에서 개발을 하다 보면, 다음과 같은 설정을 종종 바꾸게 됩니다.
- SIMD 명령어를 사용할지 여부
- 스레드 수를 몇 개로 설정할지
- 디버그 vs 릴리즈 빌드
- 특정 기능의 ON/OFF
이런 설정들이 프로그램의 성능에 어떤 영향을 주는지 알고 싶지만, 매번 수동으로 빌드하고 테스트하는 건 꽤 번거로운 작업입니다.
이번 글에서는 CMake 빌드 옵션을 활용해서 다양한 설정 조합을 자동으로 빌드하고, 벤치마크까지 자동 수행하는 방법을 소개합니다.
CMakeLists.txt에서 벤치마크용 옵션 정의 방법
먼저 CMake에서 사용할 옵션을 정의해 줍니다.
CMakeLists.txt에 아래와 같이 작성합니다
option(USE_SIMD "Enable SIMD optimization" ON)
set(THREAD_NUM 8 CACHE STRING "Number of threads")
그리고 코드에서는 해당 옵션을 사용하여 조건문을 구성할 수 있습니다.
#ifdef USE_SIMD
run_simd_version();
#else
run_scalar_version();
#endif
run_with_threads(THREAD_NUM);
설정 조합 자동 빌드 + 실행 스크립트 (Bash 예시)
여러 설정을 테스트하려면 조합이 많아지기 때문에, 자동화가 필요합니다.
다음은 Bash 스크립트 예시입니다:
#!/bin/bash
for simd in ON OFF; do
for thread in 4 8 16; do
build_dir="build_${simd}_${thread}"
cmake -B $build_dir -DUSE_SIMD=$simd -DTHREAD_NUM=$thread
cmake --build $build_dir
echo "Running benchmark: SIMD=$simd, THREAD_NUM=$thread"
./$build_dir/my_benchmark >> result.txt
done
done
실제로 프로젝트를 운영하면서 이렇게 실험을 해보면, 정확한 기준을 가지고 성능 최적화를 논의할 수 있는 장점이 있습니다.
자동화된 벤치마크 환경을 만들어두면, 새로운 기능을 추가하거나 시스템이 바뀌었을 때도 빠르게 영향을 파악할 수 있습니다.
반응형
'프로그래밍' 카테고리의 다른 글
NeRF를 뛰어넘는 차세대 3D 재현 기술, Gaussian Splatting 완벽 해설 (0) | 2025.05.06 |
---|