前端进度条性能优化、仿真结束后后处理优化;后端C代码生成流程优化:先识别来源,再按照已知未知量需求排序,最后局部求解
This commit is contained in:
1 parent
0dcb465d84
commit
91bd9fb252
77 files changed
+11223
-551
No files matched your search
@@ -25,3 +25,64 @@
|
||||
- 删除未接入当前 C 路径的旧 IR Python 包、专属 schema、规范、冻结示例与测试,同步移除 CI 测试入口。C 生成继续直接使用校验后的网络结构,求解算法未改动。
|
||||
- 删除旧求解器优化任务清单、后端效率调研、2026-08-15 性能评估及 Python/C 迁移可行性计划,清理文档索引。保留 C 实现记录和数值回归基准,新优化计划后续重列。
|
||||
- 本地 37 项相关测试中 36 项通过、1 项 Linux 锁定环境检查按配置跳过,包含 50 个网络的冻结数值对照。`skill-test` 完成 10 s,RK45 最大步长 0.001 s、rtol 1e-7,单次纯求解 0.293462 s;本次用于确认清理后正常运行,不作为性能优化结论。
|
||||
|
||||
## 18:58
|
||||
|
||||
- 新增独立的连接线子模型交互 demo:按“绘图 → 子模型 → 参数 → 检查”操作,固定 P4NODE2,通过连线选择兼容管路并自动确定方向。演示包含四条连接、连续选型、参数保留和恢复初始示例。
|
||||
- 使用独立页面与浏览器存储键,未修改主应用、正式工程、组件或求解器。演示只检查局部接口和参数,不执行仿真;移除 `frontend/public/demos/amesim-submodels/` 即可撤回。
|
||||
- Edge 浏览器检查通过:兼容筛选、连续选型、反向接口、参数校验、刷新恢复、更换型号保留共同参数、删除重连、独立重置及窄屏布局;确认未发起后端 API 请求。
|
||||
|
||||
## 19:19
|
||||
|
||||
- 新增 `frontend/public/demos/pipe-submodels/` 管路子模型 demo,采用左侧管路库、中间固定模型图、右侧属性/参数表和底部检查信息的布局。默认进入子模型模式,只开放 PNL00R、PNL0001/2/3;上一版保留用于对照。
|
||||
- 固定部件坐标及连接关系,禁止拖动、改路由、删除和重新连接;缩放/空白区平移仅改变观察视口。子模型阶段参数只读,参数阶段可编辑,使用独立浏览器存储。
|
||||
- Edge 验证位置锁定、兼容筛选、预览/应用、连续选型、参数校验和保留、反向端口映射、刷新/重置、三种窗口宽度通过;未调用后端,不执行仿真。正式应用与求解内核未改动。
|
||||
|
||||
## 20:14
|
||||
|
||||
- 为气动端口新增温度、压力、质量流率和能量流率的供需声明;Amesim 三通/四通节点采用固定参考口校验,普通方程端口保留联立求解能力。多级节点会追溯参考来源,拒绝无来源的循环引用和中断链。
|
||||
- 同一合同贯通组件目录、画布目标筛选与悬停提示、模型检查、JSON/XML/API 和 C 编译入口。旧工程供需错误连线保留供修正,禁止靠旧端口快照绕过校验。
|
||||
- 未改用户浏览器工程、正式 test-mql-8 输入、积分/管流公式或计算顺序。旧测试文件中的错误参考口会被拒绝,此前独立实验中调整参考口的副本通过校验。
|
||||
- 后端全量 269 项中 268 项通过、1 项锁定环境检查跳过,包含 50 个冻结网络的 C 数值对照;4 项 Chrome 测试及前端 TypeScript/生产构建通过。说明见 `docs/standard/port-computation-contract.md`。
|
||||
|
||||
## 20:38
|
||||
|
||||
- 对照 Amesim 2404 的气动、机械和信号子模型端口表,补充接口一致性边界:核心气动四量供需方向已对齐;容积与容积变化率、机械逐变量方向/加速度、常量与别名等尚未完整进入新供需合同。
|
||||
- 更新元件建模规范第 7 节,要求新增元件先列逐变量接口、单位与符号映射、输出来源和计算依赖,并区分当前可执行元数据与后续需扩展的能力。说明中明确固定开度 PNVO001 是本项目变体。
|
||||
- 本次仅更新规范和过时的模型说明文字,未改数值实现或用户工程;文档差异格式检查通过。
|
||||
|
||||
## 21:14
|
||||
|
||||
- 管流摩擦计算中的粗糙度常量提到内部循环外;生成的 C 在单次系统状态求值内复用完全相同输入的管流结果,每次积分器试算重新初始化缓存,不改变公式、迭代上限、计算顺序或雅可比策略。
|
||||
- 修正参考口的独立模型副本在 30 次求值中,132 个导数和 1784 个输出逐值一致;原 14 组状态的实际管流求解次数从 2352 降至 672。14 项相关回归通过,包含 50 个冻结网络及无气动端口模型。
|
||||
- 单独审计确认原 PNL0001/2 的 16 轮方法存在收敛不足,本次没有更换求根算法。系统层面仍应优先开发通用依赖排序与局部循环识别,缓存不替代该工作。未运行本轮完整轨迹或网页/Amesim 对比;范围和微基准限制见 `docs/other/管路重复计算优化核查-2026-09-10.md`。
|
||||
|
||||
## 22:40
|
||||
|
||||
- 扩展 C 生成器新增计算关系的来源检查、依赖排序与局部循环划分;参考别名与能量计算拆分,未耦合关系直接执行,压力试算只刷新本块残差所需的流量。循环初值和压力边界来自所在区域,构建清单保存 `evaluationSchedule` 供核查。
|
||||
- 修正参考口的独立模型生成 484 条计算关系、0 个系统代数循环块,30 次求值中每条关系均执行一次,132 个导数及 1784 个输出逐值一致。BDF 同样完成 0.02 s 时,采样与最终状态完全相同,单次纯求解从 2.368098 s 降至 1.645752 s;独立 C 求值基准约提速 1.459 倍。
|
||||
- 新增长链、独立循环隔离、反向流、连接顺序打乱、压力与混合焓耦合及守恒测试,定向 29 项通过。全量 276 项中 1 项环境检查跳过,遇到进程偶发空输出的相关网络已单独复核通过;保留全量未一次全绿的记录。
|
||||
- `skill-test` 完整完成 10 s。大模型两版完整 10 s 尝试均触及 30 s 执行限额,本轮不宣称已完成其全程速度或 Amesim 曲线对齐。管流求根、积分器、雅可比及用户接线保持不变;规范与详情见 `docs/standard/native-evaluation-schedule.md`、`docs/other/C计算依赖排序验证-2026-09-10.md`。
|
||||
|
||||
## 21:17 前端仿真期间性能优化(第 1、2 项)
|
||||
|
||||
- 结果流采用增量 NDJSON 解码:仅扫描新分块,跨块长行保留片段,在换行/结束时一次合并,避免对完整结果反复扫描和复制。保留 UTF-8 跨字节、CRLF、空行、末行无换行及解析错误传播行为。
|
||||
- 进度与日志迁入控制台独立订阅的状态容器,不再触发顶层建模工作区渲染。普通进度每 250 ms 合并显示最新值;阶段变化、异常、停止、完成及关键操作日志即时更新。重复可见状态不通知,结束时清除待刷新进度,日志保留既有 400 条上限。
|
||||
- 活动监测仍逐条处理原始消息,30 秒数据流超时和接受步/内部活动停滞规则未调整;后端接口、C 求解器、数值精度、采样和原始结果未改动。本轮不实施第 3、4 项(结果复制/存储、曲线绘图),后续实施时同样补充压力与数据一致性测试。
|
||||
- 新增 `frontend/tests/e2e/simulation-performance.spec.ts`,9 项测试覆盖百万数值、1 KiB/64 KiB 分块、10 万条进度合并、300 元件/300 连接下的 1 万条进度冲击、终止状态不被旧进度覆盖,以及真实停滞恢复流程;所有后端响应均为测试模拟,不运行实际求解器。
|
||||
- 隔离 Chrome 中,同一 18,565,846 字节结果按 64 KiB 分块,旧/新解析三次耗时分别为 1854.5/128.1、1929.5/81.1、1720.8/76.7 ms;逐项比对 100 万个数值一致。300 元件页面的 1 万条进度没有触发工作区重新渲染。100 变量 × 10000 采样点的应用接收至可用检查约 429 ms(包含现有结果复制/存储尝试和测试检查延迟,不含真实网络传输与求解)。
|
||||
- 33 项相关回归全部通过,覆盖新增压力测试、活动监测、超时、原生/旧结果恢复以及控制台/复制粘贴。TypeScript 与生产构建通过,仍有原有主包超过 500 kB 的提示。测试服务器启动偶发超时后,使用临时配置直接启动 Vite 完成测试,临时配置已移除。
|
||||
- 上述耗时是本机合成数据的前端专项测试,不代表完整工程求解时间或端到端仿真的加速比例。
|
||||
|
||||
## 22:25 结果保存与曲线性能优化(第 3、4 项)
|
||||
|
||||
- 发布仿真结果时直接使用本次请求独占的数值结果,不再对整份结果执行 `structuredClone`;工程快照仍独立复制,防止后续建模修改污染结果。
|
||||
- 新结果改用 IndexedDB 后台分块保存:每块最多 32768 个双精度数值,每批约 1 MiB,并在批次间让出主线程。全部写入成功后才更新 sessionStorage 中不足 200 字节的恢复指针,避免同步序列化整份结果及原有小容量限制。
|
||||
- 兼容读取旧版 sessionStorage 结果;后台恢复不覆盖新生成/新载入的结果,过期保存不能覆盖更新结果。保存失败保留内存中的结果和上次完整缓存,控制台提示导出;后台保存未完成时离开页面会触发浏览器提示。只清理本页产生的过期/未完成缓存,不清理用户工程或结果文件。
|
||||
- 曲线样本、坐标范围、单位换算和按视口选取的绘图点增加缓存;移除对大样本数组使用 `Math.min(...数组)` / `Math.max(...数组)` 的写法,以及多曲线全样本拼接。缓存使用弱引用或有限条目,避免无限保留历史视口和单位切换数据。
|
||||
- 单曲线、同单位多曲线、上下分区曲线均按可见时间区间和像素列保留首点/最小值/最大值/末点,保持原顺序、线段断点和窗口边界外的相邻点。完整原始数据继续用于游标读数、结果文件及 CSV,不减少后端采样,不改变求解公式或精度;既有机械事件孤立力尖峰的连续曲线显示规则保留。
|
||||
- 新增 `results-performance.spec.ts` 的 6 项压力/一致性测试:百万点极值与像素路径上限、断点和重复时刻、百万双精度数值保存/恢复、保存失败和新旧请求竞争、每条 25 万点的三种曲线窗口及完整导出、浏览器新旧路径生成对照。更新原生结果恢复测试适配异步缓存。
|
||||
- 本机 Chrome 专项测试:1,000,000 个数值对应 JSON 约 18.6 MB,后台保存约 47.8 ms、恢复约 32.4 ms,保存期间其他定时任务运行 16 次,整份结果 JSON 序列化调用为 0,恢复指针 84 字节,逐值精确一致。25 万点路径旧方式约 111 ms,新方式首次约 27 ms、100 次缓存重绘平均约 0.688 ms;路径命令从 250000 降至 1679,原始 250000 点全部保留。这些是数据处理/路径生成耗时,不等同于浏览器实际帧率或求解器加速比例。
|
||||
- 三个实际结果窗口同时显示五条 25 万点曲线,路径点数分别为 722、1002、1001、1001、1000;单位切换、游标读数、滚轮缩放、刷新恢复和完整结果导出通过。导出按浏览器保存的原始数据逐项精确比对,而不是在 Node 中重新计算三角函数。
|
||||
- 相关 59 项测试均已通过(一次组合运行 58 项通过,修正导出测试基准后补跑相关 14 项全部通过);包含上一轮 1、2 项压力测试、活动监测/停止恢复、建模交互和结果系统图回归。TypeScript 与生产构建通过,保留原有主包体积提示;临时直接启动 Vite 的测试配置已移除。
|
||||
- 本轮不运行真实求解器,未修改后端。压力测试仅使用隔离浏览器和合成数据,不影响用户浏览器工程。
|
||||
@@ -0,0 +1,49 @@
|
||||
# 2026-09-11:C 管路验证版合入网页后端
|
||||
|
||||
后续网页检查补充:LSTP00A 接口力在新增碰撞事件点存在极短高峰,原有共同采样点回归没有覆盖该现象。详情及对原曲线一致性结论的限定见 [接口力对比报告](../other/test-mql-4网页仿真与LSTP00A接口力对比-2026-09-11.md)。
|
||||
|
||||
在 `system-optimization` 工作区,将 test-mql-4 验证版的修正合入正式原生编译和求解路径,并重启本机 `127.0.0.1:8000` 后端。网页通过 `5173` 端口代理调用的新仿真已经使用这些修正。未提交或推送 Git。
|
||||
|
||||
## 合入内容
|
||||
|
||||
- PNL0003 的两段储气状态之间,采用与 PNL0001/2 相同的可压缩管流关系及小压差平滑处理,移除独立 Darcy 反求和固定 48 次二分分支。
|
||||
- PNL0001 按实际流向选择上游温度;流量计算和雷诺数、摩擦系数、流速诊断使用同一侧的温度。
|
||||
- 氦气管流与诊断统一使用已有 NASA 黏度表达式;理想空气等介质保留原有黏度模型。
|
||||
- 两条 C 代码生成路径统一生成按物理量区分的绝对误差限:质量 `1e-14 kg`、内能 `1e-8 J`、速度 `1e-12 m/s`、位移 `1e-12 m`。这是本轮验证的默认值,尚未实现按模型尺寸自动缩放或用户自定义绝对误差限。
|
||||
- 网页后端默认相对误差限从 `1e-6` 调整为 `1e-7`,与此次对照设置一致,并在结果诊断中返回实际 `rtol`。积分方法、最大步长和输出间隔仍取自用户模型。
|
||||
|
||||
雅各比算法、求解器类型和前端操作流程未修改。构建缓存会根据模型及 C 源文件内容自动生成新的键,无需手动删除旧缓存。用户仍需导入修正后的 JSON;内核更新不会自动改动已保存模型的接线或参数。
|
||||
|
||||
## 验证结果
|
||||
|
||||
经真实 HTTP 请求 `http://127.0.0.1:5173/api/system-xml/simulate-stream`,修正后的 test-mql-4 以 BDF、相对误差限 `1e-7`、最大步长 `1e30` 完成 0~10 s:
|
||||
|
||||
| 指标 | 本次运行 |
|
||||
|---|---:|
|
||||
| 纯求解墙钟 | 4.4088 s |
|
||||
| 求解 CPU | 4.1719 s |
|
||||
| HTTP 全程 | 9.3444 s |
|
||||
| 模型计算次数 | 24941 |
|
||||
| 接受步数 | 5137 |
|
||||
| 进度事件数 | 50 |
|
||||
|
||||
HTTP 全程包含进程启动、结果整理、序列化和传输等,不应把它与纯求解的差额全部归因于进度条。本次是后端合入验证,未测量浏览器绘图时间。
|
||||
|
||||
72 条物理曲线在共同的 1001 个时间点上,与重新编译的 Amesim 四支路模型比较。最大压力差 `198.2697 Pa`、温度差 `0.009626 K`、位移差 `0.646855 μm`、速度差 `3.41015 μm/s`、质量流量差 `0.0160272 g/s`,与先前 C 验证版一致。剩余局部差异仍按原报告记录,未声称完全消除。闭合气路总质量最大漂移约 `1.20e-14 kg`。
|
||||
|
||||
另外,通过同一 HTTP 路径运行仓库 `native-skill-test.xml`:RK45、最大步长 0.001 s,完成 10 s 仿真,纯求解墙钟 `0.5205 s`,CPU `0.4531 s`。
|
||||
|
||||
29 项相关测试通过,包括两种积分器、完整元件目录、依赖排序、管流缓存、正反向上游温度、平衡附近管流、守恒和网页流式求解。目录测试中与旧 Python 管流公式有关的断言,改为保留独立热力学基准并校验守恒;其他模型继续进行完整旧基准对照。新增 Amesim 曲线基准覆盖 72 条曲线、57 个选定时间点,用于持续回归;本次 HTTP 核验使用完整的 1001 个共同时间点。
|
||||
|
||||
## 文件
|
||||
|
||||
- 正式代码:`native/components/kernels.c`、`app/simulation/native_codegen/{compiler,extended,tolerances,runner}.py`、`app/simulation/backends.py`。
|
||||
- 回归:`tests/test_native_pipe_physics.py`、`tests/test_native_catalog.py`、`tests/data/test-mql-4-corrected.xml`、`tests/data/test-mql-4-amesim-reference.json`。
|
||||
- 执行记录:`test/mql4-backend-integration-20260911/` 内的 `http-verification.json`、`http-result.json`、`http-events.json`、`skill-test-http-summary.json`、`physics.log`、`regression-final.log`。
|
||||
- 用户输入文件仍为 [test-mql-4-corrected.json](../../test/mql4-20260910/test-mql-4-corrected.json)。
|
||||
|
||||
复核命令:
|
||||
|
||||
```powershell
|
||||
./.venv-win/Scripts/python.exe -m unittest tests.test_native_pipe_physics tests.test_native_codegen tests.test_native_pipe_cache tests.test_native_catalog tests.test_native_schedule tests.test_amesim_pnl0001_xml tests.test_amesim_pnl0002_pnl0003_xml tests.test_native_only_backend -v
|
||||
```
|
||||
Reference in new issue
Block a user