-
Notifications
You must be signed in to change notification settings - Fork 0
Performance
GitHub Actions edited this page Feb 11, 2026
·
2 revisions
벤치마크 결과와 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 포함) |
변경: 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%를 차지하여 효과 미미
변경:
-
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 절감 효과 누적
변경: 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% 개선
변경:
- 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 | 최종 | 누적 개선율 |
|---|---|---|---|
| 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% |
| 지표 | 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 교차 테스트 수
-
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 통계 계산
- S2 regression 해소: Shadow BVH any-hit의 소규모 씬 오버헤드 최적화 (iterative traversal)
- Plane shadow 최적화: S4의 83.7M shadow tests 중 plane 4개 전수 검사 비중이 큼. Normal 기반 early reject 가능
- SAH 기반 split: 현재 median split → Surface Area Heuristic으로 전환 시 트리 품질 개선 기대
Version: v2.3.0
Last Updated: 2026-02-11
Auto-generated from: docs/