docs(performance): adopt approved single-run timing protocol

This commit is contained in:
KOKO\Mimi
2026-10-14 12:21:30 +09:00
parent 560ccf8e6b
commit 80e88999c0
3 changed files with 31 additions and 14 deletions
+13
View File
@@ -7,6 +7,7 @@
## PERF-ADR-001 — 전체 실행 시간과 반복 판정
- 상태: 사용자 승인.
반복 횟수·워밍업 부분은 2026-10-14 PERF-ADR-004로 대체됐다.
- 결정: 현재 AMD Ryzen 7 5800H PC에서 최적화 빌드 전체 경과 시간을 측정한다.
정적 Hex8 2초·동적 Hex8 100초·shell 동적 100초를 모두 만족해야 한다.
모델마다 워밍업 1회 후 비계측 5회 모두 상한 이내여야 한다.
@@ -39,3 +40,15 @@
원본·시간 schedule·수치 기준·필수 출력은 그대로다. 완료 뒤 최신 전체 MSVC x64
Debug 및 필수 원본 비교·독립 검토를 수행하며 과거 중단을 PASS로 승계하지 않는다.
- 승인 근거: 기존 문서 유지 선택, 최신 dev 병합 요청, 아키텍처 보강 문서 승인.
## PERF-ADR-004 — 워밍업 없는 단일 성능 측정
- 상태: 2026-10-14 사용자 승인; PERF-ADR-001의 반복 횟수·워밍업 부분을 대체한다.
- 결정: 최적화 전후 각각 모델별 별도 프로세스로 워밍업 없이 1회만 공식 측정한다.
시간 목표·전체 경과 시간의 범위·MKL/VTune·정확성·필수 출력 계약은 유지한다.
- 이유: 사용자가 장시간 작업 중 PC 중단을 알리고 측정 횟수 변경과 작업 계속을 지시했다.
중단 원인은 별도 입증 없이 특정하지 않는다.
- 영향: 기존 raw 실행과 완료 표본은 과거 프로토콜 이력으로 보존한다. 중단된 표본은
성공으로 채우지 않으며, 이전 워밍업 뒤 표본이나 가장 빠른 값을 단일 판정에 대입하지 않는다.
수정된 측정 도구로 새 기준/최종 자료를 기록하고 각 결과를 타이머 밖에서 비교한다.
- 승인 근거: “성능 테스트에 워밍업+측정5회를 측정1회로 변경하겠습니다. 작업을 계속 진행하세요.”
@@ -25,7 +25,8 @@ assembly·procedure·backend·results·writer의 책임을 유지한다.
원본·물리식·질량·high+low·시간간격·수용 기준·필수 출력·schema·tolerance를
성능을 위해 바꾸지 않는다. 원본은 scratch에 byte-identical로 복사하여 실행한다.
전체 실행 경과 시간은 VTune 없이 워밍업 1회 뒤 5회 모두 목표 이내여야 한다.
전체 실행 경과 시간은 VTune 없이 워밍업 없는 모델별 1회가 목표 이내여야 한다.
측정 횟수는 PC 중단 후 사용자의 2026-10-14 변경 지시를 따르며 이전 raw 이력을 보존한다.
현재 AMD PC의 VTune 소프트웨어 수집과 공식 측정은 순차 실행한다.
## 소비할 상세 계약
+16 -13
View File
@@ -37,10 +37,11 @@ MSVC x64 최적화 Release 실행 파일을 사용한다. 기존 Debug 검증
프로파일링용 심볼을 포함하되 시간 평가와 프로파일링에는 같은 빌드 설정의
실행 파일을 사용한다. Debug 시간을 Release 목표에 대입하지 않는다.
각 모델을 별도 프로세스로 워밍업 1회 실행한 다음 5회 측정한다.
**측정한 5회 각각이 해당 시간 상한 이내여야 합격**이다. 평균·중앙값·최솟값은
참고로 기록할 수 있지만 합격 판정을 대체하지 않는다. 워밍업도 정상 해석과
결과 저장을 완료해야 하며 합격 표본에는 포함하지 않는다.
각 모델을 별도 프로세스로 **워밍업 없이 1회 측정**한다.
**측정한 1회가 해당 시간 상한 이내여야 합격**이다. 반복 실행 중 빠른 값을
선택하거나 과거 워밍업 뒤 측정값으로 현재 단일 측정을 대신하지 않는다.
2026-10-14 사용자가 장시간 작업 중 PC 중단을 알리고 기존 워밍업 1회·측정
5회를 측정 1회로 변경했다. 이전 raw 자료는 별도 이력으로 보존한다.
단조 증가 시계로 프로세스 시작 요청 직전부터 정상 종료를 확인한 직후까지
측정한다. 프로세스 시작, 입력 읽기, 모델 준비, 모든 계산·복구, 필수 로그와
@@ -59,8 +60,8 @@ MSVC x64 최적화 Release 실행 파일을 사용한다. 기존 Debug 검증
빌드·다른 해석·CTest·프로파일링과 공식 시간 측정을 동시에 수행하지 않는다.
Thread 수와 sampling interval은 조정 가능 값이며 baseline 전에 정하고 기록한다.
서로 다른 설정의 탐색 결과는 구분하고, 최종 설정에서 기준 소스도 다시 측정해
전후 비교의 조건을 맞춘다. OS 파일 캐시는 워밍업으로 준비하며 매 실행마다
강제 초기화하는 별도 요구는 없다.
전후 비교의 조건을 맞춘다. OS 파일 캐시를 위한 별도 워밍업이나 매 실행마다
강제 초기화하는 요구는 없다. 전원·재시작·캐시 준비 상태의 차이는 기록한다.
### FEM-REQ-PERF-003 — VTune 근거
@@ -172,7 +173,7 @@ Identity·row/component completeness·finite/schema 검사를 tolerance보다
적용한다. 현재 [공통 수치 정책](../TOLERANCE.md)의 near-zero 1%, 일반 행
상대오차 5%, family relative RMS 1%와 zero-scale exact-zero를 유지한다.
Eigen의 별도 MITC4 예외를 Hex8에 확대하지 않는다.
5회 시간 표본의 모든 결과를 기존 비교기로 확인하며 비교 시간은 타이머 밖이다.
모델별 1회 시간 표본의 결과를 기존 비교기로 확인하며 비교 시간은 타이머 밖이다.
Reference 파일 부재·identity 충돌·비교 실패는 완료를 차단한다.
### FEM-REQ-PERF-008 — 산출물과 완료 보고
@@ -183,12 +184,12 @@ MKL 적용·예외 목록, 검증/독립 검토 근거와 한국어 최종 보
정식 보고서는 `docs/calculation-performance/`에서 상대 경로로 연결한다.
실제로 없는 개인 artifact를 존재하는 근거처럼 링크하지 않는다.
시간 보고서에는 case별 target seconds, 워밍업/측정 구별과 측정 번호,
시간 보고서에는 case별 target seconds, 측정 종류와 측정 번호,
각 elapsed seconds, native exit, 입력/실행 파일/결과 identity와 SHA-256,
command/cwd, 로그 위치와 결과 검증 판정을 기록한다. 환경 기록은 source
commit 및 dirty 여부, MSVC/flags/build type, dependency/VTune 버전, CPU/OS,
전원 상태, MKL/TBB/OpenMP thread 및 관련 환경 설정을 포함한다.
전후 비교에는 각 5회 값·최댓값·개별 합격 여부와 전체 판정이 있어야 한다.
전후 비교에는 각 모델의 1회 값·개별 합격 여부와 전체 판정이 있어야 한다.
성능 판정과 수치/검증 판정을 별개로 표시하며 최종 완료는 둘 다 충족해야 한다.
측정 진입점은 `python scripts/performance/measure.py --exe <fesa.exe>
@@ -197,8 +198,9 @@ commit 및 dirty 여부, MSVC/flags/build type, dependency/VTune 버전, CPU/OS,
아래에 두고, 비어 있지 않은 기존 실행 디렉터리는 덮어쓰지 않는다.
보고서 `measurements.json`에는 `schema=fesa-performance-v1`, 환경 정보,
case별 `case`, `target_seconds`, `runs`, `all_measured_runs_within_target`을 둔다.
정상 완료한 `runs`는 워밍업 1개와 측정 5개이며 `kind`는 `warmup|measurement`,
`measurement_index`는 워밍업 0 또는 측정 1–5다. 각 행의 `elapsed_seconds`는
현재 정상 완료한 `runs`는 측정 1개이며 `kind=measurement`,
`measurement_index=1`이다. 이전 raw 이력의 `warmup`과 측정 2–5는 보존하되
현재 판정에 혼합하지 않는다. 각 행의 `elapsed_seconds`는
유한한 비음수, `native_exit`는 실제 정수 종료 코드 또는 시작 실패 시 null이다.
실행 상태 `execution_state`는 `completed|launch-failed|timed-out|interrupted`다.
중단/실패 시 이미 수집한 행과 실패 행을 보존하고, 누락 표본은 완료로 채우지 않는다.
@@ -346,7 +348,8 @@ VTune으로 초기 준비·정수 변환/handle 준비·local 계산·조립·
## 선택의 이유와 제외 범위
전체 경과 시간은 실제 사용자가 결과를 받기까지의 시간을 반영한다.
5회 모두 합격하는 기준은 우연히 빠른 한 번을 완료로 인정하지 않기 위한 것이다.
사용자가 PC 중단 후 승인한 단일 측정은 장시간 반복 부하를 줄이기 위한 것이다.
반복 중 빠른 값을 고르는 방식으로 단일 측정의 합격을 만들어내지 않는다.
현재 PC와 소프트웨어 샘플링을 고정하여 실제 작업 환경에서 평가한다.
MKL은 일반 행렬 연산에 필수로 사용하면서 작은 좌표 계산의 호출 비용과
특수 정밀도 계약을 보존하는 예외를 허용한다.
@@ -362,7 +365,7 @@ reference/tolerance 수정, 출력 축소 및 기존 다른 문제의 포괄적
- [ ] 일반 행렬 곱셈·선형 해법의 MKL 경계와 수명 검증, 적용·예외 목록 확보.
- [ ] Hex8 병목 개선·관련 행동/수치·원본 검증 완료.
- [ ] Reduced shell 병목 개선·관련 행동/수치·원본 검증 완료.
- [ ] 최종 세 모델의 워밍업 후 5회 전부 시간 목표 및 매 결과의 외부 비교 통과.
- [ ] 최종 세 모델의 워밍업 없는 1회 시간 목표 및 각 결과의 외부 비교 통과.
- [ ] 최종 전체 MSVC x64 Debug build/CTest와 필요한 Python 검사 완료·기존 예외 대조.
- [ ] 필요한 독립 수치·물리 검토 및 VTune 전후 결과, 최종 보고 완료.