Main Content

提升性能的方法

要提升代码的性能,请考虑使用这些方法。

环境

请注意,共享计算资源的后台进程会降低 MATLAB® 代码的性能。

代码结构

在组织您的代码时,请注意以下几点:

  • 使用函数代替脚本。函数的速度通常更快。

  • 优先使用局部函数,而不是嵌套函数。当函数不需要访问主函数中的变量时,尤其应当使用这种方法。

  • 使用模块化编程。要避免产生大文件或者包含不常使用代码的文件,请将代码拆分为简单的综合函数。这种做法可降低首次运行的成本。

针对性能的编程做法

考虑使用以下编程做法可改进代码的性能。

  • 预分配 - 您可以考虑预分配数组所需的最大空间量,而不用持续调整数组大小。有关详细信息,请参阅预分配

  • 向量化 - 请考虑使用 MATLAB 矩阵和向量运算,而不是编写基于循环的代码。有关详细信息,请参阅向量化

  • 将独立运算放在循环外 - 如果代码不使用每个 forwhile 循环迭代进行不同计算,请将其移到循环外以避免冗余计算。

  • 当数据类型更改时创建新变量 - 创建一个新变量,而不是将不同类型的数据分配给现有变量。更改现有变量的类或数组形状需要额外时间进行处理。

  • 使用短路运算符 - 如果可能,请尽量使用短路逻辑运算符 &&||。短路运算符更有效,因为仅当第一个操作数不能完全确定结果时,MATLAB 才会计算第二个操作数。有关详细信息,请参阅 Short-Circuit ANDShort-Circuit OR

  • 避免使用全局变量 - 尽量少使用全局变量是一种良好的编程做法,因为全局变量可能会降低 MATLAB 代码的性能。

  • 避免重载内置函数 - 避免对任何标准 MATLAB 数据类重载内置函数。

  • 避免使用“代码形式的数据”- 如果您有用于生成包含常量值的变量的大段代码(例如,超过 500 行),请考虑构造变量并将其保存在文件(例如 MAT 文件或 .csv 文件)中。然后,您可以加载变量而不是执行代码来生成这些变量。

  • 在后台运行代码 - 将 parfevalbackgroundPool 结合使用以在后台运行函数。您可以同时运行 MATLAB 中的其他代码,使您的 App 响应更快。有关详细信息,请参阅在后台运行函数

  • 在 GPU 上或以并行方式运行代码 - 如果您有 Parallel Computing Toolbox™ 许可证,可以通过将 gpuArray 数据传递给支持的函数来在 GPU 上运行代码,或使用 parfor 循环等方式并行运行代码。有关详细信息,请参阅Choose a Parallel Computing Solution (Parallel Computing Toolbox)

有关特定 MATLAB 函数的提示

在编写性能关键代码时,请考虑有关特定 MATLAB 函数的以下提示。

  • 请避免清除不是必须清除的代码。请不要以编程方式使用 clear all。有关详细信息,请参阅 clear

  • 请避免使用查询 MATLAB 状态的函数,例如 inputnamewhichwhosexist(var)dbstack。运行时自检会耗费大量计算资源。

  • 请避免使用 evalevalcevalinfeval(fname) 等函数。尽可能使用到 feval 的函数句柄输入。从文本间接计算 MATLAB 表达式会耗费大量计算资源。

  • 请尽可能避免以编程方式使用 cdaddpathrmpath。在运行时更改 MATLAB 路径会导致重新编译代码。

相关主题