diff --git a/docs/calculation-performance/hex8-performance.md b/docs/calculation-performance/hex8-performance.md index e827b83..2e6065a 100644 --- a/docs/calculation-performance/hex8-performance.md +++ b/docs/calculation-performance/hex8-performance.md @@ -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과 공식 단일 시간 측정은 아직 이 작업의 개발