在应用经过全面调试并正常工作之后,就该开始优化过程了。首先,您需要选择适当的编译器选项。以下编译器选项会影响性能。有关命令行选项的更多详细信息,请参阅 C7000 C/C++ 编译器用户指南 (SPRUIG8)。
- --opt_level=3 (-o3)。编译器在 -opt_level=2 下执行函数级优化,并在 -opt_level=3 下执行文件级优化和函数内联。在 --opt_level=2 和 --opt_level=3 下,编译器执行各种循环优化,例如软件流水线、矢量化和循环合并。默认情况下,--opt_level 开关会对性能进行优化。此类优化可增加代码大小。如果代码大小构成问题,请勿降低优化级别。相反,使用 --opt_for_speed (-mf) 开关更改优化目标(性能与代码大小之间的对比关系)并使用 –oi 选项控制自动内联的数量。
- --opt_level=4 (-o4)。考虑使用此选项在链接时对所有文件执行优化。使用此选项可显著增加编译时间。如果在任何步骤中使用此选项,则必须在所有编译和链接步骤中使用该选项。只要源文件是使用 --opt_level=4 进行编译的,则都可以单独编译。此优化级别无法与 --program_level_compile (-pm) 一起使用。
- --gen_func_subsections (-mo)。如果源代码使用许多从未调用的函数,请考虑使用此选项。此选项将每个函数放在自身的输入子段中,因此,如果该函数从未被引用,则链接器可以从可执行文件中排除该函数。但是,这种优化可增加代码大小,因为编译器必须应用最小的段对齐要求。
- --opt_for_speed=0 (-mf0) 或 --opt_for_speed=1 (-mf1)。如果代码大小构成问题,那么在编译包含不常执行的函数或对性能微不足道的函数的文件时,请使用这些选项。这会告诉编译器优化代码大小,而非性能。请勿为了减小代码大小而降低优化级别 (--opt_level)。
如果您关心性能,请勿使用 --disable_software_pipelining (-mu) 选项。此选项会关闭软件流水线。软件流水线对于在大多数循环上实现高性能至关重要。此选项可以作为调试工具,因为其使汇编代码更容易理解。
以下选项提供了用于调试和性能评估的附加信息:
-
--src_interlist (-s)。此选项使编译器在编译器生成的汇编文件中发送经过高级优化的源代码副本。此输出作为汇编代码中的注释置于汇编文件中。优化器的注释输出看起来像 C 代码,并显示了已应用的高级转换,例如内联、循环合并和矢量化。此选项有助于您理解汇编代码以及编译器为优化代码性能所做的一些工作。此选项会开启 --keep_asm (-k) 选项,因此编译器生成的汇编文件 (.asm) 将不会被删除。
--debug_software_pipeline (-mw)。此选项提供有关软件流水线循环的额外信息,包括循环的单次调度迭代。本文档后续介绍的循环调优示例中将使用此信息。此选项会开启 --keep_asm (-k) 选项,因此编译器生成的汇编文件 (.asm) 将不会被删除。
--gen_opt_info=2 (-on2)。此选项创建 .nfo 文件,其基本名称与 .obj 文件相同。此文件包含有关已应用的高级优化的摘要信息以及提供建议。