엄격 수렴 기준 실행 보존과 한정 HHT 개발 계측 기록
This commit is contained in:
@@ -0,0 +1,158 @@
|
||||
# 외부 수렴 정책 실험 결과 — T2 기준 보존
|
||||
|
||||
기록일: 2026-10-19. **정상 strict 기준은 확보했으나 전체 실험·물리 검증은 미완료**다.
|
||||
후보 정책은 아직 구현·측정하지 않았다. 가속률이나 채택 가능성을 주장하지 않는다.
|
||||
|
||||
## 기준과 원시 증거
|
||||
|
||||
측정 source는 `78cb33920742a91b4801788fbcc953d3306b0884`다.
|
||||
`d7f6d0c`와 제품 source·두 빌드 설정의 diff는 exit 0이다. 원래 조사 기준
|
||||
`43867d0`와 달리 사용자 승인 local kernel인 polar 1회, ExpSkew/Jacobian 3차,
|
||||
질량 gate와 관련 테스트 오차 `1e-3`을 사용했다. 외부 Newton은 잔차와
|
||||
q/v/a/A 보정 `1e-10`, 최대 100회인 기존 strict 경로다.
|
||||
|
||||
원시 자료는 **부모 작업공간**의 다음 ignored 위치에 보존했다. T2 worktree의
|
||||
`.build`를 정리해도 아래 자료는 별도로 남는다.
|
||||
|
||||
```text
|
||||
.build/tolerance-experiment/go-20261018/baseline/
|
||||
source/strict-source-78cb339.zip, source-hashes.json, revision.txt
|
||||
runtime/ # 공식 EXE·DLL·PDB
|
||||
runtime/tests/ # 같은 Release 검사 EXE·DLL·PDB
|
||||
build/ # 실제 명령·전체 로그·각 exit·선택 CMake compile 명령
|
||||
run/ # 새 INP·CSV 복사본·로그·새 HDF5
|
||||
execution.json, runtime-hashes.json, test-runtime-hashes.json
|
||||
input-hashes-before.json, input-hashes-after.json, environment-before.json
|
||||
reference-comparison.json, official-log-summary.json
|
||||
development-one-increment/ # 최초 ON 진단, 보완 전
|
||||
development-off-control/ # 보존된 공식 OFF EXE의 1증분 대조
|
||||
development-final/ # 보완 후 최종 ON 진단·카운터 관계 검증
|
||||
```
|
||||
|
||||
| 보존 대상 | SHA256 |
|
||||
| --- | --- |
|
||||
| strict source ZIP | `0B655E0257720AD9CEF31274931578FE17C4456B9988C158A61DF88D93792BED` |
|
||||
| 공식 fesa.exe | `3CDB5D9D35F6AD95781044BD311ECB35C9FB121780EF81FC535434BF3515172C` |
|
||||
| 정식 INP 및 공식 작업 복사 | `B8922243CA8DDFE20B1DD39F3123207F789A1A75F6B10DBB6B0BC0B5A40DFFF5` |
|
||||
| 정식 변위 CSV 및 복사 | `422ECF17609E14FD119D60A3D5AF7A0D1BC4A95E0F556608A7D791E2718C56C5` |
|
||||
| 새 공식 HDF5 | `55EF1FFAAE061311F3C1AE705824658B668A818D5F1F7D27BB538CA66EE4792C` |
|
||||
|
||||
원본 reference는 실행·수정하지 않았고 전후 hash가 같다. 기존 결과를 재사용하지 않았다.
|
||||
|
||||
## 계측 없는 공식 실행
|
||||
|
||||
`MSBuild FESA.sln /m:2 /p:Configuration=Release /p:Platform=x64`는 native exit 0이다.
|
||||
VS 18.11/MSVC 14.51 x64, `/O2 /Ob2 /fp:precise /MD`, staged MKL 2026.1,
|
||||
TBB 2023.1, HDF5 2.1.1, Intel runtime 2026.1을 사용했다.
|
||||
기존 Hex8 검사 source의 C4334 경고 1개가 있었고 오류는 없었다.
|
||||
|
||||
호스트는 KOKO, Ryzen 7 5800H(8코어/16논리), 전원은 고성능이다.
|
||||
관련 thread 환경변수와 PATH를 `environment-before.json`에 기록했고 변경하지 않았다.
|
||||
실제 worker 수를 고정·계측한 결과는 아니다. 후보 공식 측정도 같은 환경을 사용해야 한다.
|
||||
측정 중 다른 build/test/solver를 실행하지 않았다. 워밍업 없이 정확히 1회 실행했다.
|
||||
|
||||
| 항목 | 실제 결과 |
|
||||
| --- | --- |
|
||||
| 명령 | 보존된 `runtime/fesa.exe run/shellNL-dyn-meshfine.inp` |
|
||||
| 입력 | dt=.1, T=10, 100증분, 729 nodes, 676 elements |
|
||||
| 시작/종료 UTC | 2026-10-18 15:01:20.6895159 / 16:47:11.4199462 |
|
||||
| native / wrapper exit | 0 / 0 |
|
||||
| 공식 elapsed | **6350.7895521초** |
|
||||
| 프로세스 CPU | 18021.3125초; elapsed와 다른 값 |
|
||||
| 새 HDF5 | 126254676 bytes, schema2, 729 nodes / 101 frames |
|
||||
| peak working set | 종료 후 API가 null을 반환하여 미확보 |
|
||||
| 정식 비교 | comparator exit 0, 사전검사 통과, U blocking 실패 0, UR 경고 200 |
|
||||
| U 최대 family relative RMS | 0.002282424502275574 |
|
||||
|
||||
정식 비교는 기존 9-node U blocking/UR warning 정책 그대로 수행했다.
|
||||
전체 441774 변위 scalar의 identity/finite 확인 후 202 families를 평가했고
|
||||
near-zero 1%, 일반 상대 5%, RMS 1%, zero-scale exact-zero를 유지했다.
|
||||
Python의 로컬 uv cache를 child `PYTHONPATH`로 읽어 numpy 2.4.6/h5py 3.16.0을 사용했다.
|
||||
설치·다운로드·캐시 쓰기를 하지 않았다. 실제 argv와 exit는 원시 로그에 있다.
|
||||
|
||||
공식 hht-log-v1에서 양의 accepted 100건, 평가 204건이며 accepted iteration 합은
|
||||
**outer applied correction 204회**다. 96증분은 2회, 4증분은 3회다.
|
||||
잔차가 통과했지만 보정이 실패한 평가는 27건이다. 보정 채널별 실패 평가 건수는
|
||||
u의 q/v/a/A가 102/103/104/104, 회전은 100/100/102/102다.
|
||||
이는 중복을 허용한 로그 채널 진단이며 배타적 실행시간이나 후보의 절약 가능 회수가 아니다.
|
||||
|
||||
## 별도 1증분 개발 계측
|
||||
|
||||
기존 4개 물리·미분 검사 실패가 남은 상태에서 동일 100증분을 장시간 반복하지 않았다.
|
||||
승인된 별도 개발 입력 복사에서 T만 `.1`로 줄였고 dt=.1과 local kernel·strict 종료는 유지했다.
|
||||
이 입력 SHA256은 `79D1C09FC5AFB792312F1908E13D71ABC228D98D10B438B91412A9BFA4C95A50`다.
|
||||
|
||||
계측은 기본 컴파일 OFF다. Native는 `/p:FesaHhtDevelopmentProbe=true`, CMake는
|
||||
`-DFESA_HHT_DEVELOPMENT_PROBE=ON`으로 켜고, ON 실행에서만
|
||||
`FESA_HHT_PROBE_OUTPUT=<새 sidecar 경로>`를 설정한다. 정상 OFF 객체에는 해당 환경 키가 없다.
|
||||
추가 요소 평가·수치 보정·판정 완화 없이 기존 호출 앞의 계수와 serial scope의 정수 ns 타이머만 쓴다.
|
||||
단일 procedure 개발 실행용이며 동시 다중 procedure 계측을 지원한다는 주장은 없다.
|
||||
병렬 요소 callback은 atomic 계수만 쓰고 타이머/단계 배열은 serial thread만 수정한다.
|
||||
|
||||
최종 개발 실행 native exit 0, 개발 elapsed 77.5268139초다. 이는 공식 시간이 아니다.
|
||||
최초 ON, OFF 대조, 보완 후 최종 ON은 모두 별도 파일로 보존했다.
|
||||
|
||||
| 최종 sidecar 계수 | 값과 범위 |
|
||||
| --- | --- |
|
||||
| outer_applied_correction / inner_applied_correction | 3 / 1; 실제 좌표 갱신만 포함 |
|
||||
| assembly_calls | 14 |
|
||||
| assembly_internal_evaluation | 9464 = 14×676 |
|
||||
| assembly_internal_failure | 3; 대체 시작 trial 평가의 실패이며 최종 해석 실패가 아님 |
|
||||
| assembly_inertia_evaluation | 9461 = 9464−3; internal 실패 뒤 생략된 관성 호출 제외 |
|
||||
| constraint_internal_evaluation | 6760; cache miss의 실제 추가 EvaluateTrial만 포함 |
|
||||
| logical_factor_call / logical_solve_call / logical_rhs | 1274 / 7516 / 7516 |
|
||||
|
||||
Solver 수는 HHT 경계 forwarding wrapper의 논리 호출이다. 실패 시도도 세며 vendor의
|
||||
phase11/22/33 전체 호출수로 해석하지 않는다. inner correction도 stagnation 때문에
|
||||
계산만 하고 적용하지 않은 solve는 제외하지만 logical solve에는 포함한다.
|
||||
계수 관계와 공식 첫 증분의 outer 3회 일치는 `counter-check.json`에서 assert했다.
|
||||
|
||||
| 중복 없는 최종 단계 시간 | 초 |
|
||||
| --- | ---: |
|
||||
| procedure_other | 30.6919325 |
|
||||
| inner_graph | 26.6134860 |
|
||||
| assembly | 13.8891082 |
|
||||
| outer_linear | 0.1445448 |
|
||||
| physical_rates | 0.2650750 |
|
||||
| factor | 5.0312963 |
|
||||
| solve | 0.5715257 |
|
||||
| 합계 = procedure inclusive | 77.2069685 |
|
||||
|
||||
각 `_exclusive_ns`는 자식 시간을 뺀 값이고 합계가 `procedure_inclusive_ns`와 정확히 같음을
|
||||
assert했다. ExecuteReducedHht 경계이므로 CLI 입력·최종 HDF5 finalize·sidecar I/O를 제외한다.
|
||||
요소 kernel 시간은 병렬 wall-time을 포함한 assembly 범위이며 각 요소 CPU 시간의 합이 아니다.
|
||||
전체 100증분의 inner/요소/factor/solve 비용과 후반 채널 분포는 **계측하지 않았다**.
|
||||
첫 증분 계수·시간을 100배하거나 후보 전체 비용으로 외삽하지 않는다.
|
||||
|
||||
## 정확 byte parity와 검증 한계
|
||||
|
||||
공식 frame0/1과 개발 결과의 40개 numeric dataset을 identity/shape/type/finite 확인 후 비교했다.
|
||||
ON 최초·ON 최종·보존된 공식 OFF EXE의 짧은 입력 대조 모두 22개 dataset이 byte 일치하고
|
||||
frame1의 18개 dataset은 불일치했다. **정확 byte parity는 미통과**다.
|
||||
최종 ON의 q/v/physical a 최대 절대차는 각각 6.776263578034403e-21,
|
||||
2.168404344971009e-19, 6.938893903907228e-18이고 energy는 8.881784197001252e-16이다.
|
||||
거의 영인 값의 scalar 상대오차가 클 수 있으므로 최대 절대차만으로 통과 판정하지 않는다.
|
||||
|
||||
동일 보존 OFF EXE의 대조에서도 q/v/a 최대 절대차는 1.3552527156068805e-20,
|
||||
3.552713678800501e-15, 5.684341886080802e-14였다. T 단축·반복 실행·기본 thread 조건·
|
||||
컴파일/계측 영향을 완전히 분리하지 못했으며 원인을 하나로 단정하지 않는다.
|
||||
새 parity tolerance나 floor를 도입하지 않았다. dataset별 차이 수·최대 절대/상대차·첫 위치와
|
||||
원본/실제 bytes는 각 `parity-details.json`에 보존했다. NaN을 동일 처리하지 않고 finite를 요구했다.
|
||||
독립 source 검토에서 산술·평가·진단 순서 변경이 없다고 확인한 사실은 실행 parity 통과와 별개다.
|
||||
|
||||
계측 검사는 no-op에서 2FAIL/native1을 확인한 뒤 카운트·중첩 배타 시간·solver forwarding/
|
||||
실패 보존·실제 inner 1회/0회 갱신의 4개 검사를 native0으로 통과했다.
|
||||
실제 inner 계수 검사는 CMake OFF operators 객체를 연결하면 1FAIL/native1, ON이면 4PASS/native0다.
|
||||
Standalone 준비 중 link/include/MKL runtime 오류와 짧은 clock tick assertion 실패도 별도 보존했다.
|
||||
짧은 tick은 0ns를 허용하고 scope 진입 수와 시간 분할의 exact equality를 검사한다.
|
||||
Standalone에 필요한 기존 설치의 sequential DLL은 테스트 전용이며 공식 runtime에 추가하지 않았다.
|
||||
|
||||
Native ON CLI 최종 빌드는 exit0(경고0), CMake Release 기본 OFF의 변경 production 3개와
|
||||
새 검사 객체 compile은 exit0, ON 새 검사 객체 compile도 exit0이다. source 등록을 양쪽에 맞췄다.
|
||||
OFF에서는 새 검사 identity가 없고 ON에서는 4개다. 전체 CMake link/CTest나 전체 Debug 검사는
|
||||
이번 T2에서 실행하지 않았고 후속 전체 회귀를 대신하지 않는다.
|
||||
기존 local-kernel의 4FAIL은 [기록](local-kernel-experiment.md)을 유지하며 재실행/해결한 것으로 보고하지 않는다.
|
||||
U 통과는 V/a/energy의 외부 검증이나 기존 물리 실패의 해결을 뜻하지 않는다.
|
||||
|
||||
T2 판정은 **기준 보존 완료·개발 진단 한정 확보·전체 검증 미완료**다.
|
||||
후보 측정, 전체 100증분 개발 비용, 정확 parity 원인 분리와 필수 전체 물리/회귀 검증은 남았다.
|
||||
Reference in New Issue
Block a user