本节摘要:仿真慢没有单一元凶,它是模型结构、求解器配置、数据管理三类问题记在同一本账上的总数。本节给出诊断——剖析器定位热点、诊断统计看清步长与事件行为——再给出提速的五级次序:砍计算、调求解、改结构、动配置、上并行。次序是本节的灵魂:每一级有它的性价比与适用面,跳级是提速失败的头号原因。
拿到一个"跑一夜"的模型,第一动作不是改任何东西,是让模型自己交代时间去哪了。两个诊断工具配合使用。剖析器(Profiler):仿真结束后给出时间在模块层面的分配表——哪几个模块吃掉了大半计算、求解器花在哪个环节。求解器诊断统计:步数、过零次数、最小步长、失败重试次数——3.1 到 3.3 节讲过的所有引擎行为,这里给出量化读数。
小林的"一夜模型"诊断读数:剖析器显示三成时间在一个以 10 微秒采样的测量子系统上(它其实只需要 1 毫秒的数据)、两成耗在过零事件(某个理想的滞环比较器每步都在切换)、两成是日志缓冲的内存搬运、剩下三成是正常的电机瞬态计算。四条线索指向四个不同的修复动作——这就是"总账"的含义:不诊断就提速,等于不做体检就开药。
% 诊断会话:剖析器 + 求解器统计 load_system('overnight_model'); set_param('overnight_model', 'Profile', 'on'); % 开剖析 set_param('overnight_model', 'Diagnostics', 'on'); % 求解器统计 tic; sim('overnight_model', 'StopTime', '10'); toc; % 读数清单: % 1 剖析表头部模块 —— 计算热点 % 2 步数与最小步长 —— 判断步长坍缩(3.2 节刚性信号) % 3 过零计数 —— 判断事件风暴(3.3 节) % 4 日志信号数量与点数 —— 内存与搬运开销 % 5 失败重试计数 —— 容差与求解器匹配度

一级:砍不必要的计算。 采样率错配是头号惯犯——测量与监控通路按最快速率跑,数据量与计算量双双虚胖;砍到实际需要的速率,收益立竿见影。采集量同理:全信号全时长日志是调试期的习惯残留,正式实验只收关键量(6.2 节的记录纪律在此兑现)。
二级:调求解器与容差匹配。 确认求解器家族与模型刚性匹配(3.2 节的路径走一遍),容差按"关键量精度契约"设置而不是越紧越好——容差收紧十倍,耗时常常翻三倍,买来的却是没人需要的第五位小数。事件风暴场景按 3.3 节的次序缓解。
三级:改模型结构。 平均模型替代开关级(4.2 节的两段式)、降阶替代冗余动态、冻结慢动态(机械热惯性在短时程仿真里近似为常值)。这一级动的是物理假设,每个动作都要配等效性验证——它是五级里唯一"动了模型本身"的级别,也因此在次序上刻意排在配置与并行之前:模型错了,配置与算力都在加速错误。
四级:动配置。 日志限流限量、模型引用的编译缓存、加速模式(重用上次的编译结果)、数据接口的内存预分配。这一级不改变任何行为语义,是纯白送的提速——但只值两成,别指望它拯救错误的设计。
五级:并行与加速。 参数扫描的并行(6.2 节的 parfor)属于"多次仿真"层面的并行,收益按核数线性;单次仿真的加速则要模型分区并行执行,工程门槛高、适用面窄。加速硬件(实时机、GPU 求解)是 HIL 与大规模场的装备。五级是最后手段,不是默认选项——把浪费乘上核数的笑话,说的就是跳过前四级直奔并行的人。
提速之后防回弹,把诊断读数写进项目常规:每次大型实验前跑一遍诊断五项(剖析头部、步数、过零数、日志量、重试数),读数异常再走五级次序。把它加进 10.2 节的评审清单,性能就从"救火项目"变成"常规体检"。
💡 关键直觉:仿真速度是模型质量的体温计。一个常年跑得快的模型群,几乎必然伴随干净的结构、合理的容差与克制的日志——速度从来不只是速度问题。
时间诊断之外,内存是长时程仿真的第二瓶颈,症状有两个:仿真中途报内存不足、以及随仿真推进速度逐渐变慢(日志缓冲扩容与垃圾回收的隐性开销)。源头几乎都是日志策略:几百路信号全时长记录,动辄数十 GB 的缓冲。治理三招:限量(只记录分析需要的信号,其余用示波器在线看)、限长(观测稳态特性的实验,跳过暂态段再开始记录)、限频(记录网格粗于求解步长,变步长模型配细粒度输出时尤其注意两者独立设置)。三招落地后,长仿真的内存占用通常降一个数量级,速度的"越跑越慢"也随之消失。
一个容易混淆的点在此澄清:记录网格与求解步长是两套独立配置。求解器按误差控制内部步长,输出按记录网格落盘,两者不必一致也无需强制对齐——混淆它们的人常犯两类错:为多出图把求解步长人为压小(白白变慢),或以为记录点密就代表求解精度高(并不)。把两套旋钮分开认识,是 3.1 节时间轴概念的一次实用复习。
加速模式在数值上与普通模式等价(同一套求解逻辑),差异主要在两点:诊断信息变少(部分运行时检查被省略),以及某些调试手段不可用。所以推荐的工作节奏是调试期用普通模式要诊断要断点,实验期用加速模式吃速度——若发现两种模式下结果有差异,这本身就是模型存在隐含问题的信号(常见于依赖求解器副作用的建模),值得立案排查而不是绕过去。
性能有了体检制度,最后一件日常大事是秩序:模型群的版本与协作。全册收官。