Skip to content

Performance

GitHub Actions edited this page Feb 11, 2026 · 2 revisions

Performance

벤치마크 결과와 4라운드 최적화 히스토리를 정리합니다.


측정 환경

항목
CPU Apple M1
해상도 1440 x 900
컴파일 -O0 (최적화 플래그 없음)
측정 방식 1회 측정 (프레임 렌더 시간)

테스트 씬

오브젝트 설명
S1 1 sphere 최소 씬
S2 20 spheres 중규모 sphere-only
S3 50 spheres 대규모 sphere-only
S4 7sp + 7cy + 3pl (18) 혼합 오브젝트 (plane 포함)

최적화 라운드 요약

Round 1: BVH fallback 제거 (028-bvh-fallback-removal)

변경: trace_ray()에서 BVH 유효 시 check_all_objects() 이중 탐색 삭제

Baseline (ms) Optimized (ms) 개선율
S2 1,835.7 1,142.4 37.8%
S3 3,366.0 1,775.8 47.2%
S4 27,173.7 26,784.4 1.4%
  • S2/S3: BVH miss에서 brute-force 이중 탐색이 제거되어 58~61% 교차 테스트 감소
  • S4: shadow brute-force가 전체의 98.2%를 차지하여 효과 미미

Round 2: 수학 연산 최적화 (029-math-optimizations)

변경:

  • pow(spec, 32.0)fast_pow32() (곱셈 5회)
  • Sphere sqrt 캐싱 — sqrt(discriminant) 저장 후 재사용
  • Shadow magnitude/normalize 통합 — sqrt 1회로 통합
Round 1 (ms) Optimized (ms) 개선율
S3 1,775.8 1,767.9 0.4%
S4 26,784.4 26,178.2 2.3%
  • S4에서 369M shadow tests × sqrt 절감 효과 누적

Round 3: Shadow Offset LUT (030-shadow-offset-lut)

변경: Shadow offset의 cos/sin/sqrt을 LUT로 사전 계산

Round 2 (ms) Optimized (ms) 개선율
S1 466.2 438.3 6.0%
S2 1,142.8 1,122.9 1.7%
S4 26,178.2 25,583.8 2.3%
  • S1: 단순 씬에서 삼각함수 오버헤드 비율이 높아 최대 개선
  • 누적: Baseline → R3 = S4 5.9% 개선

Round 4: Plane 분리 + BVH pruning (031-perf-bottleneck-optimization)

변경:

  • Plane BVH 분리 (무한 AABB 제거)
  • Shadow BVH any-hit (early exit)
  • BVH threshold 20 → 5 하향
  • inv_dir 사전 계산, BVH child ordering
Round 3 (ms) Optimized (ms) 개선율
S3 1,753.4 1,432.2 18.3%
S4 25,583.8 6,066.8 76.3%
  • S4: 가장 큰 병목이었던 shadow brute-force → BVH any-hit 전환
  • S2: +8.5% regression (20개 오브젝트에서 BVH 순회 오버헤드 > brute-force)

전체 누적 결과 (Baseline → Round 4)

Baseline 최종 누적 개선율
S2 1,835.7ms 1,218.5ms 33.6%
S3 3,366.0ms 1,432.2ms 57.4%
S4 27,173.7ms 6,066.8ms 77.7%

핵심 지표 변화 (S4)

지표 Baseline Round 4 변화
Shadow tests 369.6M 83.7M -77.4%
BVH skip rate 32.9% 82.0% +49.1pp
Primary tests/ray 5.2 4.1 -21.2%
Frame time 27,173.7ms 6,066.8ms -77.7%

메트릭 수집 방법

miniRT는 프레임마다 다음 메트릭을 자동 수집합니다:

프레임 메트릭

  • t_frame_timing: 프레임 시작/종료 시간, 60-프레임 히스토리
  • FPS 계산: 1,000,000 / render_time_us

레이 메트릭

  • rays_traced: 추적된 전체 레이 수
  • intersect_tests: primary 교차 테스트 수
  • shadow_intersect_tests: shadow 교차 테스트 수

BVH 메트릭

  • nodes_visited: 방문한 BVH 노드 수
  • tests_skipped: AABB 단계에서 스킵된 테스트 수
  • Skip rate = tests_skipped / (nodes_visited + tests_skipped)

픽셀 타이밍

  • Full quality 모드에서 각 픽셀의 렌더 시간 측정 (get_time_ns)
  • min, max, average, median, p95, p99 통계 계산

향후 최적화 여지

  1. S2 regression 해소: Shadow BVH any-hit의 소규모 씬 오버헤드 최적화 (iterative traversal)
  2. Plane shadow 최적화: S4의 83.7M shadow tests 중 plane 4개 전수 검사 비중이 큼. Normal 기반 early reject 가능
  3. SAH 기반 split: 현재 median split → Surface Area Heuristic으로 전환 시 트리 품질 개선 기대

Version: v2.3.0
Last Updated: 2026-02-11
Auto-generated from: docs/

Clone this wiki locally