Files
FESADev/docs/abaqus-tolerance/results.md
T

17 KiB
Raw Blame History

외부 수렴 정책 실험 결과 — T2 기준과 T6 후보 보존

기록일: 2026-10-19. 정상 strict 기준은 확보했으나 전체 실험·물리 검증은 미완료다. T6 후보는 별도 1증분 개발 진단과 계측 OFF Release 실행물 보존까지 수행했다. 공식 100증분 후보 실행·reference 비교·성능 비교는 미성립이며 가속률이나 채택 가능성을 주장하지 않는다.

기준과 원시 증거

측정 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를 정리해도 아래 자료는 별도로 남는다.

.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은 기록을 유지하며 재실행/해결한 것으로 보고하지 않는다. U 통과는 V/a/energy의 외부 검증이나 기존 물리 실패의 해결을 뜻하지 않는다.

T2 판정은 기준 보존 완료·개발 진단 한정 확보·전체 검증 미완료다. 후보 측정, 전체 100증분 개발 비용, 정확 parity 원인 분리와 필수 전체 물리/회귀 검증은 남았다.

T6 후보 실행물과 공식 측정 미실행

T6 source는 0c88cb24c84abc4b3561a1e7975df7a4125134f1, branch는 dryforge/tolerance-t6다. 제품 source와 probe·판정 기준은 수정하지 않았다. T4 최종 parent dd54b0a와 src/include/msvc 및 CMake 설정의 Git identity가 같고, T4 manifest의 제품 source 5개와 cached probe ON CLI SHA256 6C9264282B117A35A46C3550CAE215B096F60B46F0105B929BA9A1979EBF547F가 일치한다. T5는 검사와 문서만 변경했다. Source ZIP, 파일 hash, 실행물과 DLL, 실제 명령, 환경·전원 및 raw 자료는 부모 작업공간의 다음 위치에 별도 보존했다.

.build/tolerance-experiment/go-20261018/
  candidate/source/                    # pinned source ZIP·SHA256
  candidate/development-runtime/       # cached probe ON EXE·7 DLL·PDB
  candidate/development-one-increment/ # 새 짧은 입력·native exit·로그·HDF5·probe
  candidate/runtime/                   # 새 full Native Release probe OFF 실행물
  candidate/build/                     # ON/OFF compile 기록·OFF 명령·raw·exit
  candidate/official-input/            # 정식 INP·CSV의 새 hash 확인 복사, 미실행
  T6/                                 # preflight·진단 script·metadata·검토 기록

T5 물리 검증의 Release153 결과는 144PASS/8FAIL/1SKIP, native exit1이다. 독립 D3 두 검사, drilling gradient, C08 pointwise 및 strict algebra 시간 controller 네 실패와 후보 비선형 시간 정확도 R8 미충족이 남는다. 보존 strict C08 대조도 5FAIL이며 이를 후보 정확도 통과로 해석하지 않는다. 계획의 명시된 실패 분기에 따라 같은 긴 실행을 근거 없이 반복하지 않았고, 공식 dt=.1/T=10/100증분 후보 실행은 시작하지 않았다. 따라서 후보 공식 elapsed, strict 대비 Δ·speedup, 729 nodes/101 frames 완결 결과와 정식 9-node U blocking/UR warning reference 판정은 모두 not-established다. T2 strict 공식 6350.7895521초와 아래 개발 시간을 비교하지 않는다.

T6 초기화와 1증분 개발 진단

T2 baseline/development-final의 T=.1/dt=.1 입력을 새 경로에 복사했고 SHA256 79D1C09FC5AFB792312F1908E13D71ABC228D98D10B438B91412A9BFA4C95A50가 같다. 공식 100증분 입력과 별개다. KOKO/Ryzen 7 5800H, 고성능 전원, 기존 thread 환경과 동일 local polar1/inertia3/mass gate1e-3 및 cached MSVC Release probe ON을 사용했다. 짧은 고유 TMP/TEMP C:/ft6d와 새 FESA_HHT_PROBE_OUTPUT=.../probe.txt를 설정했다. 상속 GoogleTest 선택 환경은 제거했다. 실행 전 guard는 오래된 MSBuild PID5112를 발견해 native launch 전에 중단했다. CPU2.640625초 불변·cl/link/solver/test 부재와 T4/T5 종료 확인 후 idle worker만 제외했고 프로세스는 종료하지 않았다. 두 preflight와 근거를 T6에 보존했으며 guard 대기는 elapsed에 포함하지 않는다.

실제 native 실행은 1회다. UTC 2026-10-18T18:07:36.7511886Z부터 18:08:41.2302276Z까지 64.4754692초, native exit0이며 새 HDF5는 2851989 bytes, frame0/1 두 frame이다. 이는 계측 ON 초기화+1증분 개발 시간이고 공식 시간·전체 비용·후반 증분 비용으로 외삽하지 않는다.

동일 계수 정의의 1증분 진단 T2 strict ON T6 candidate ON
outer / inner applied correction 3 / 1 2 / 1
assembly calls 14 12
internal evaluation / failure 9464 / 3 8112 / 3
inertia evaluation 9461 8109
constraint internal evaluation 6760 5408
logical factor 1274 1271
logical solve / RHS 7516 / 7516 7513 / 7513

실제 호출 경계와 forwarding 의미는 T2와 같다. Internal=assembly×676, inertia=internal−failure, solve=RHS와 exclusive ns 합=procedure inclusive를 counter-comparison.json에서 확인했다. 내부 실패3은 대체 시작 trial의 실패이며 최종 해석 실패가 아니다. 카운터 감소를 공식 가속률로 변환하지 않는다.

같은 짧은 입력의 strict ON과 후보 ON HDF5 frame0/1의 40개 numeric dataset을 shape/type/finite 및 inventory 확인 후 비교했다. 22개는 정확 byte 일치하고 frame1의18개는 달라 정확 byte parity는 미통과다. nodal q/v/physical a/A의 최대 절대차는 각각 2.0328790734103208e-20, 3.552713678800501e-15, 5.684341886080802e-14, 5.684341886080802e-14이며 energy는 8.171241461241152e-14다. Angular velocity/acceleration·triad·director와 force/reaction/residual·element 결과도 전체 dataset별 차이를 state-differences.json에 보존했다. 이는 정책 차이의 진단 숫자이며 외부 truth, 정확도 승인 또는 새 parity tolerance가 아니다. T2 ON/OFF의 기존 ULP 차이도 미해결이다.

T6 계측 OFF Release 보존과 정적 확인

개발 진단 종료 후 VS18.11.0/MSVC14.51.36231 x64에서 전체 MSBuild FESA.sln /m:2 /p:Configuration=Release /p:Platform=x64 /p:FesaHhtDevelopmentProbe=false 를 실행했다. 실제 명령에는 /verbosity:minimal만 추가했고 native exit0이다. 기존 Hex8 검사 C4334 경고1개를 보존했으며 검사 실행을 빌드 통과로 세지 않는다. 새 OFF CLI의 SHA256은 449196EB79EFAB3C62B8DAC4B73C3C76E97EC76F6A77F9D80CE1EE5C8C1F0CFA, pinned source ZIP은 BF2D12688F778A8F9010C3FE086AA9D5E226209AAF1893AE84EBE841BF0F9C9B다. EXE/PDB/7개 DLL을 candidate/runtime에 보존했으며 DLL SHA는 T2 strict와 모두 같다. ON/OFF solver·CLI compile tlog를 각각 보존했다. OFF solver compile에 probe define이 없고 /O2 /Ob2 /MD /fp:precise를 확인했으며 102개 solver 객체에 FESA_HHT_PROBE_OUTPUT 문자열이 없음을 검사했다.

OFF unit discovery native exit0,883개이며 ON887개에서 probe4개가 빠진 목록이다. Field21개와 T4 후보 종료/물리 후속 gate 및 T5 강체 oracle identity가 존재한다. 이는 discovery 확인이며 unit 실행 통과가 아니다. T6/verification.json, verify-artifacts.raw.txt, commands.txt에 실제 범위·exit·미실행 상태를 남겼다. 정식 INP/CSV 새 복사 hash는 각각 기존 T2의 B8922243...DFFF5, 422ECF17...8C56C5와 같고 원본 전후 hash도 같다. 공식 복사본은 실행하지 않았다. 문서 diff/링크/기록 숫자를 정적으로 검토했으며 tracked 변경은 이 문서뿐이다.

T6은 공식 장시간 성능과 reference 통과를 확정하지 못한 DONE_WITH_CONCERNS다. 수치 부적합 해결·기준 완화는 수행하지 않았다. T7의 전체 Native Debug·CMake CTest· 별도 Python·필수 reference 검증은 후속 범위이며 이 한정 진단이 대체하지 않는다.