docs(performance): retain inline codegen, profile identities and remaining costs

This commit is contained in:
KOKO\Mimi
2026-10-14 19:59:24 +09:00
parent 7c888ee271
commit b474d127d8
@@ -365,6 +365,55 @@ identity가 전후 같았고 종료 후 관련 프로세스가 없음을 확인
호출이 inline되었다는 증거로 확대하지 않는다. 이 후보도 100초 목표 미달이며,
제한 시간에 중단된 이전 후보들과의 전체 시간 개선 비율을 계산하지 않는다.
## Inline 후보의 실제 codegen과 후속 profile
별도 승인으로 같은 binary의 software sampling 30초를 한 번 수집했다. Collector
actual native 4와 outer wrapper 1을 유지한다. 기존 raw 자료만 함수·전체 callstack·
summary로 export했고 세 report와 export wrapper는 모두 native 0이다. 이번에는
collection과 export 각각의 metadata/native/before/after 파일을 분리했다.
[Collection native](../../.harness/performance/t3/vtune-dynamic-inline-collection-native.json),
[export native](../../.harness/performance/t3/vtune-dynamic-inline-export-native.json),
[collection metadata](../../.harness/performance/t3/vtune-dynamic-inline-collection-metadata.json)를
보존한다. Target native는 unknown이며 관련 owned PID는 모두 종료했다.
Source/input/header/exe/build/DLL/thread/power는 전후 같았다. 환경을 수집한 uv의
임시 Python Scripts PATH 첫 entry만 달랐으며 나머지 entry는 같았다. 실제 profiler가
상속한 parent PATH를 독립 필드로 저장하지 않았으므로 전체 runtime PATH equality는
false라는 한계를 유지한다. [Identity 검사](../../.harness/performance/t3/vtune-dynamic-inline-collection-identity-checks.json)는
이 차이를 포함하며 개발 profile을 공식 환경 합격으로 표시하지 않는다.
[Summary](../../.harness/performance/t3/vtune-dynamic-inline-summary.csv)는 elapsed
29.871824초, CPU 222.433211초, effective 173.657543초, spin 43.736681초,
overhead 5.038986초다. [함수 자료](../../.harness/performance/t3/vtune-dynamic-inline-functions.csv)의
Multiply 12.163382초, TwoProduct 11.910763초, MultiplyPair 9.367977초가 남는다.
TwoSum은 여러 inline 위치로 보고되어 다른 finite attribution의 같은 주소와
별도 비용으로 합산하지 않는다.
Hex8 paired TU 하나만 read-only dumpbin symbols/disasm으로 확인했으며 두 명령과
wrapper native는 0이다. [실제 codegen 명령](../../.harness/performance/t3/inline-codegen-native.json)과
[disassembly](../../.harness/performance/t3/inline-codegen-disasm.txt)를 보존한다.
이 TU의 direct call TwoSum/LowestBitExponent는 0개이며 TwoProduct 내부에 BSF와
TwoSum 식이 펼쳐진 명령을 확인했다. 독립 COMDAT symbol은 남아 있으므로 전체
binary의 모든 호출이 inline되었다고 주장하지 않는다. 이전 TU의 동일한 해시 object를
별도로 보존하지 않아 정확한 function-byte 크기 변화는 비교하지 않았다.
TwoProduct에는 실제 `call fma`가 남는다. Profile의 UCRT fma self는 0.975742초,
import thunk는 0.044582초이며 fma를 ancestor로 가진 다른 leaf 경로는 없었다.
단독 hardware residual dispatch는 좁지만 현재 주 병목에 대한 영향 근거가 작아
우선 후보로 선택하지 않았다. Scalar graph나 guard를 제거하는 대안으로 쓰지 않는다.
libiomp worker self 37.973383초 중 spin은 32.949078초다. Callstack은
OpenMP worker→BaseThreadInitThunk→RtlUserThreadStart만 보인다.
[FMA·spin 경로 자료](../../.harness/performance/t3/vtune-dynamic-inline-fma-spin-paths.json)는
이를 보존한다. Global PARDISO 뒤 dormant worker인지, paired TBB와 실제 시간상
겹친 resource 비용인지는 이 stack만으로 확정하지 못한다. Model을 작은 equation
system으로 가정하거나 전역 PARDISO threshold/thread 정책을 바꾸지 않았다.
`geo*point.weight`의 동일 결과를 diagonal 세 곳에서 재사용하는 작은 후보는 원래
식·누적 순서를 유지할 수 있는 별도 검토 사항으로만 남겼고 구현하지 않았다.
후속 4-column 특수 pair packet도 아직 구현·검증 전이며 이 profile의 통과 결과로
표시하지 않는다.
84개 실행과 추가 두 검사 실행은 서로 다른 검사 범위다. 이를 하나의 최종 전체
검사 실행으로 표시하지 않는다. 최종 전체 Debug/CTest, Hex8 필수 원본 5개 비교,
동적 101-frame 비교, 최종 VTune과 공식 단일 시간 측정은 아직 이 작업의 개발