From 727c3566f9c95e9f957fa7dede1b6645c33e53e9 Mon Sep 17 00:00:00 2001 From: "KOKO\\Mimi" Date: Wed, 14 Oct 2026 22:33:12 +0900 Subject: [PATCH] =?UTF-8?q?=EB=AA=85=EC=8B=9C=EB=90=9C=20shell=20=EC=98=81?= =?UTF-8?q?=20seed=EC=9D=98=20=EB=8F=84=ED=95=A8=EC=88=98=20provenance=20?= =?UTF-8?q?=EB=B3=B4=EC=A1=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../t4-shell-optimization.md | 45 +++++++++++++++++++ src/fesa/elements/nonlinear_mitc4_shell.cpp | 16 +++++-- 2 files changed, 57 insertions(+), 4 deletions(-) diff --git a/docs/calculation-performance/t4-shell-optimization.md b/docs/calculation-performance/t4-shell-optimization.md index c9bf769..1b001b7 100644 --- a/docs/calculation-performance/t4-shell-optimization.md +++ b/docs/calculation-performance/t4-shell-optimization.md @@ -313,3 +313,48 @@ worker/consumer FP·policy 일치는 실제 출력이 없다. 별도 diagnostic- 계획은 parent true-trial-production-hit-trace.md에 기록했다. 명시적인 local Constant0 builder seed 후보는 explicit-zero-seed-read-plan.md의 읽기 계획이며 아직 구현하거나 실행하지 않았다. 전체 shell100초 목표는 미달이며 최종 전체/reference 검증도 남아 있다. + +## 명시적인 local 영 seed의 provenance 보존 + +Identity의6 offdiagonal, Skew의3 diagonal과 Matrix×Matrix/Matrix×Vector Multiply의 +9/3 ordered accumulator만 Constant(0.0)으로 초기화했다. 세 matrix builder는 private +ConstantZeroMatrix를 공유하고 vector는 세 fresh Constant0을 사용한다. 기존 product/ +add 순서와 호출, Default Jet/Variable false, ExpSkew increment identity, 다른 seed/ +direct derivative write, ordinary MKL, API/precision/physics/gates/진단은 유지한다. +수정은 nonlinear_mitc4_shell.cpp의12삽입4삭제다. + +이 seed는 실제 정의된 numeric +0/영 도함수/null H에만 true provenance를 부여한다. +기존 Constant guard가 finite value/coeff/gradient와 implicit/allocated H를 구별하므로 +Inf/NaN×0 또는 singular Compose/Atan2 실패를 지우지 않는다. 입력 allocated alias는 +유지하고 fresh zero가 입력 alias를 반환하지 않는다. 후속 allocated-zero가 implicit +zero가 될 수 있어 arbitrary private Jet copy/write의 alias 동등성까지 주장하지 않는다. +현재 readonly derivative 소비자와 승인된 H numeric0 부호 의미에 한정한다. + +독립 actual source 검토 PASS를 받은 고정 manifest +700068D3C55DD5633BE51D3D0DD15562763E1788C9A4CADA667BD4ACA822E484에서 +corrected-prefix Debug3 edges build native0/2.90초, 실제 shell header deps26을 확인했다. +Actual production TU의 builder15+기존 frozen Jet33 oracle가 native0/0.08초로 통과했고 +H 영 부호 차이0이었다. Frozen0e5 전체 TU와 current 전체 TU의7 실제 응답·실패·재실행 +probe도 각각 native0(0.40/0.39초)이며20,126개 record의 identity/비영/diagnostic과 +H numeric0 부호까지 동일했다. Raw 출력 두 SHA는 +04153B2088E5C87FDBF043659028DBD17114C72775BEA59B984EEBB554163D5F다. + +이 비교는 frozen TU를 별도 fresh compile하고 동일한 변경 없는 header/common library +의존성에 연결한 callback oracle다. Frozen object를 복사하거나 전체 solver의 혼합 +source PASS로 사용하지 않는다. Frozen TU SHA8794F4D6D5C8F6988064F4651BABF0680525B86EDB5AC2120BFB4F94B4F2EF44, +current TU SHA74BC4079C9FFDB4083F9A63CAE56493A8D1F207BE2984919B04815C981AA7A03과 +실제 compiler/argv/native/library/driver/binary/output hash를 parent +zero-seed-source.json/zero-seed-debug-native.json/zero-seed-debug-built-hashes.json에 +보존했다. Related CTest57/57도 native0(CTest24.06초/native24.10초)이다. + +마지막 wrapper hash 수집은 잘못 복제한 jet-zero-seed-debug.exe 이름 때문에 외부 +PowerShell1로 끝났다. 실제 native 명령10개는 모두0이었고 실제 파일 zero-seed-debug.exe +및 frozen/current probe hash만 다시 수집했다(metadata-only native0, 검사 재실행 없음). +오류 기록과 원래 wrapper는 별도로 보존했다. Production1/dependency9/oracle8 hash +일치와 관련 프로세스0을 확인하고 CPU를 반환했다. + +Library SHA E6B0B4DD96093F1568A4A783E004EC7C205C33550413CD1262B7EA59A49926B2, +unit SHA5725E2E82B4A0AF530F68D9D9BF3ADF685C27CADF6A0F2B106A35A48147360C4다. +이번 source의 Release/whole-model/profile/절약률/전체 Debug/reference/C08는 미실행이며 +전체 shell100초 목표를 통과한 것으로 표시하지 않는다. 다음 계측은 원본에서 cache +실제 경로와 새 병목을 함께 확인하는 최소 SW VTune 계획으로 별도 결정한다. diff --git a/src/fesa/elements/nonlinear_mitc4_shell.cpp b/src/fesa/elements/nonlinear_mitc4_shell.cpp index e88ea3b..400d3e7 100644 --- a/src/fesa/elements/nonlinear_mitc4_shell.cpp +++ b/src/fesa/elements/nonlinear_mitc4_shell.cpp @@ -859,9 +859,17 @@ JetVector3 Cross(const JetVector3& left, const JetVector3& right) { left[0U] * right[1U] - left[1U] * right[0U]}; } +/// @brief Seeds only explicitly zero matrix entries with constant provenance. +JetMatrix3 ConstantZeroMatrix() { + JetMatrix3 result{}; + for (auto& row : result) + for (auto& entry : row) entry = Constant(0.0); + return result; +} + /// @brief Builds a Jet identity matrix. JetMatrix3 Identity() { - JetMatrix3 result{}; + JetMatrix3 result = ConstantZeroMatrix(); for (std::size_t index = 0U; index < 3U; ++index) { result[index][index] = Constant(1.0); } @@ -870,7 +878,7 @@ JetMatrix3 Identity() { /// @brief Forms a skew matrix from a Jet vector. JetMatrix3 Skew(const JetVector3& value) { - JetMatrix3 result{}; + JetMatrix3 result = ConstantZeroMatrix(); result[0U][1U] = -1.0 * value[2U]; result[0U][2U] = value[1U]; result[1U][0U] = value[2U]; @@ -882,7 +890,7 @@ JetMatrix3 Skew(const JetVector3& value) { /// @brief Multiplies two three-by-three Jet matrices. JetMatrix3 Multiply(const JetMatrix3& left, const JetMatrix3& right) { - JetMatrix3 result{}; + JetMatrix3 result = ConstantZeroMatrix(); for (std::size_t row = 0U; row < 3U; ++row) { for (std::size_t column = 0U; column < 3U; ++column) { for (std::size_t index = 0U; index < 3U; ++index) { @@ -896,7 +904,7 @@ JetMatrix3 Multiply(const JetMatrix3& left, const JetMatrix3& right) { /// @brief Multiplies a Jet matrix by a Jet vector. JetVector3 Multiply(const JetMatrix3& matrix, const JetVector3& vector) { - JetVector3 result{}; + JetVector3 result{Constant(0.0), Constant(0.0), Constant(0.0)}; for (std::size_t row = 0U; row < 3U; ++row) { for (std::size_t column = 0U; column < 3U; ++column) { result[row] = result[row] + matrix[row][column] * vector[column];