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