该技能提供一套系统化的 MATLAB 性能优化 7 步工作流,用于寻找并修复代码中的性能瓶颈。适用场景:用户要求加速或优化 MATLAB 代码、想知道代码为何慢、有运行过久的函数或脚本、需要对 MATLAB 代码做基准计时或改动前后对比、询问 MATLAB 性能最佳实践。不适用场景:优化 Simulink 模型仿真速度(应使用 Simulink Profiler)、瓶颈位于不可修改的 C/MEX 编译代码、问题纯粹是 I/O 受限(文件读写、网络、数据库)、用户想编写性能测试(应使用 writing-matlab-perf-tests 技能)。
工作流步骤:第一步建立基线,单函数用 f = @() targetFunction(input1, input2); baseline = timeit(f);,GPU 代码用 gputimeit,脚本或多步流程需先做预热运行再用 tic/toc 计时,优先使用 timeit 因其自动处理预热并多次采样。第二步剖析分析,用 profile on; targetFunction(...); profile off; profile viewer;,关注 self-time(自身耗时)而非总时间,查看逐行细节与调用次数,代码很快时可循环多次以收集足够样本。第三步根据剖析结果识别优化模式,如向量化、预分配、消除重复计算、discretize/histcounts、persistent 缓存、逻辑索引、arguments 块、代数化简,并判断目标是否值得优化(self-time 是否超过总时间 10%、是否在高频循环中被调用)。第四步实施优化,把不变工作移出循环、用数组运算替代逐元素循环、使用专用函数、大数据分批向量化。第五步用与第一步相同的方法重新测量,计算加速比;1.2 倍及以上才视为显著,低于该值难以与噪声区分。第六步验证正确性,数值结果用 max(abs(original(:) - fast(:))) 与容差比较,非数值结果用 isequal。第七步报告结果,包括目标、基线、优化后耗时、加速比、最大误差与所用模式;多处优化需分别报告并给出端到端整体提升。
关键规则包括:优化前必须剖析而非猜测;每次只改一处并测量;必须验证输出等价;GPU 计时前后需 wait(gpuDevice);基准避免使用原始 tic/toc。常见错误有未剖析就优化、单次 tic/toc 未预热、GPU 计时未同步、循环中增长数组未预分配、盲目向量化超大数组超出内存、只报告子函数加速、认为更快即正确。参考文件包括 references/optimization-patterns.md(优化模式完整目录)与 references/measurement-templates.md(各步骤可用的 MATLAB 脚本模板)。