提升性能的方法
要提升代码的性能,请考虑使用这些方法。
环境
请注意,共享计算资源的后台进程会降低 MATLAB® 代码的性能。
代码结构
在组织您的代码时,请注意以下几点:
使用函数代替脚本。函数的速度通常更快。
优先使用局部函数,而不是嵌套函数。当函数不需要访问主函数中的变量时,尤其应当使用这种方法。
使用模块化编程。要避免产生大文件或者包含不常使用代码的文件,请将代码拆分为简单的综合函数。这种做法可降低首次运行的成本。
针对性能的编程做法
考虑使用以下编程做法可改进代码的性能。
预分配 - 您可以考虑预分配数组所需的最大空间量,而不用持续调整数组大小。有关详细信息,请参阅预分配。
向量化 - 请考虑使用 MATLAB 矩阵和向量运算,而不是编写基于循环的代码。有关详细信息,请参阅向量化。
将独立运算放在循环外 - 如果代码不使用每个
for或while循环迭代进行不同计算,请将其移到循环外以避免冗余计算。当数据类型更改时创建新变量 - 创建一个新变量,而不是将不同类型的数据分配给现有变量。更改现有变量的类或数组形状需要额外时间进行处理。
使用短路运算符 - 如果可能,请尽量使用短路逻辑运算符
&&和||。短路运算符更有效,因为仅当第一个操作数不能完全确定结果时,MATLAB 才会计算第二个操作数。有关详细信息,请参阅Short-Circuit AND和Short-Circuit OR。避免使用全局变量 - 尽量少使用全局变量是一种良好的编程做法,因为全局变量可能会降低 MATLAB 代码的性能。
避免重载内置函数 - 避免对任何标准 MATLAB 数据类重载内置函数。
避免使用“代码形式的数据”- 如果您有用于生成包含常量值的变量的大段代码(例如,超过 500 行),请考虑构造变量并将其保存在文件(例如 MAT 文件或
.csv文件)中。然后,您可以加载变量而不是执行代码来生成这些变量。在后台运行代码 - 将
parfeval与backgroundPool结合使用以在后台运行函数。您可以同时运行 MATLAB 中的其他代码,使您的 App 响应更快。有关详细信息,请参阅在后台运行函数。在 GPU 上或以并行方式运行代码 - 如果您有 Parallel Computing Toolbox™ 许可证,可以通过将
gpuArray数据传递给支持的函数来在 GPU 上运行代码,或使用parfor循环等方式并行运行代码。有关详细信息,请参阅选择并行计算解决方案 (Parallel Computing Toolbox)。
有关特定 MATLAB 函数的提示
在编写性能关键代码时,请考虑有关特定 MATLAB 函数的以下提示。
请避免清除不是必须清除的代码。请不要以编程方式使用
clear all。有关详细信息,请参阅clear。请避免使用查询 MATLAB 状态的函数,例如
inputname、which、whos、exist(和var)dbstack。运行时自检会耗费大量计算资源。请避免使用
eval、evalc、evalin和feval(等函数。尽可能使用到fname)feval的函数句柄输入。从文本间接计算 MATLAB 表达式会耗费大量计算资源。请尽可能避免以编程方式使用
cd、addpath和rmpath。在运行时更改 MATLAB 路径会导致重新编译代码。
另请参阅
主题
- 衡量代码的性能
- 探查您的代码以改善性能
- 预分配
- 向量化
- 图形性能
- 测量并提高 GPU 性能 (Parallel Computing Toolbox)