【Greenhills】GHS-S32DS集成GHS编译器优化等级设置

1、 文档目标


记录在NXP的开源环境S32DS中GHS编译器优化等级的查看和设置。后续节约解决客户问题所花费的时间。


2、 问题场景


客户咨询编译优化问题,他们在S32 Design Studio中调用GHS的编译器,以便减少授权的占用时间。他们不了解如何查看和设置GHS编译器的优化等级。


3、软硬件环境


1)、软件版本:S32 Design Studio

2)、电脑环境:Windows 11

3)、外设硬件:无


4、解决方法


1)、打开S32DS,选中项目点击右键,选中“Properties”,进入设置界面。



图4-1

2)、进入“Properties for test”,选择“C/C++Build” -->"Settings"-->"Optimization",在 Optimization Strategy框内,选择相应的优化等级进行使用。


图4-2-1

可以通过下面的表格去选择符合自己需求的优化等级。(该表格是以-Onone优化等级为基准来评定。”+”:表示相对于-Onone有所提升,”-”:表示相对于-Onone有所降低,”=”:表示相对于-Onone没有变化)


Automatic Vector Optimization:控制矢量优化。如果没有选择优化策略,该选项还启用-Ospeed。

Default Optimization Level:控制程序的整体优化配置文件。


Optimize for Speed and Size (-O1):优化构建的速度和大小,避免优化牺牲一个为另一个。

隐含 -Ogeneral -frigor=fast -delete .

Optimize for Speed (-O2) :为速度优化构建。

隐含 -Ospeed -Omax -OV -OI -Olink -frigor=fast.

Optimize for Additional Speed (-O3): 优化构建速度,与额外的优化,以提高速度启用。

隐含 -Ospeed -Omax -OV -OI -OB -Ointerproc -Olink -frigor=fast.

Optimize for Size (-Os) :根据大小优化构建。

隐含 -Osize -Omax -frigor=fast -delete .
Optimize for Additional Size (-Oz):针对大小进行优化构建,使用额外的优化来改进启用的大小。

隐含 -Osize -Omax -Olink -Ointerproc -frigor=fast.

Optimize for Improved Debugging (-Og):优化改进的调试,意味着- Omoredebug。

在使用此优化级别时,可以将命令行优化策略设置为-Odebug、-Omoredebug或-Omaxdebug。

Default Optimization Level (-Od) :删除任何当前优化级别,并将工具链返回到默认优化状态。

在使用此优化级别时,可以将命令行优化策略设置为任何值。

No Optimizations (-O0):没有优化,禁用构建的优化。

隐含 -Onone


Intermodule Inlining:启用两次内联。如果没有选择优化策略,该选项还启用-Ospeed。


Interprocedural Optimizations:

Wholeprogram Interprocedural Optimizations(-Owholeprogram):启用全程序优化可以在高水平上分析程序控制和数据流。执行了速度和大小优化,例如一个调用站点内联,过程间常量传播和死代码消除,以及过程间别名分析。这个选项可以同时提高程序的速度和大小。如果没有选择优化策略,则该选项启用-ospeed


Standard Interprocedural Optimizations(-Ointerproc)启用过程间优化允许基于被调用函数的知识进行优化,例如过程间别名分析。与 -Owholeprogram不同,-Ointerproc不要求整个程序在编译期间可用。然而,-Owholeprogram优化的一个严格子集应用于-Ointerproc。如果没有选择优化策略,该选项启用-Ospeed。


Analysis Without Optimizations(-Oip_analysis_only)执行过程间分析,但不应用任何优化。


Off( -Onoipa)[默认]禁用所有过程间优化。

Linker Optimizations:控制链接器优化中列出的链接器优化。

On(-Olink)根据您的整体优化策略启用某些链接器优化。许多这些优化都会对代码进行复杂的更改。这些更改可能会减慢链接阶段,产生更难调试的代码,或者有其他缺点。若要禁用单个链接器优化,请将其与此选项一起设置为“关闭”。

启用 -Olink 隐含-delete和-uvfd。此外,如果启用了-Osize,则启用-Olink会隐式启用-codefactor。在构建共享对象时,这可能导致无法解析的符号。

Off (-Onolink)[默认]


注意:设置-Olink可能会导致DWARF调试信息与内存中的程序不同步。


【更多软件使用问题请站内搜索或关注B站:亿道电子查看视频教学】


优化等级编程和调试能力代码内存优化编译速度执行速度
-Onone====
-Ospeed- - -+ + +- - -+ + + + +
-Osize- -+ + + + +- -+ + +
-Ogeneral- -+ + + +- -+ + + +
-Odebug=+ +-+ +
-Omoredebug+ ++-+
-Omaxdebug+ + +-=-