许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  TASKING VX-toolset软件全局配置项详解

TASKING VX-toolset软件全局配置项详解

阅读数 130
点赞 0
article_banner

概述

本文主要描述如何基于TASKING进行代码优化,满足对于生成的代码尺寸的优化,或者对于代码运行速度的优化。

目标读者:软件工程师。

术语:section,表示函数或者变量。

对应编译链接后的结果是:.text、.bss或者.data。

代码优化设置

接下来我们分为4个部分,逐一介绍代码的优化设置,分别是:

  • C++代码优化
  • C代码优化
  • 汇编优化
  • 链接优化

在C/C++ Compiler、Assembler、Linker的option中都提供了配置选项,在编译、汇编和链接三个阶段可以进行代码的优化。

C++代码的相关选项

在TASKING VX-toolset中,C++代码首先要转换成.ic文件(C语言),然后同.c文件一起进行编译。C语言的的优化设置,同样会影响到C++,所以代码优化“Optimization”一栏中并没有专门针对C++代码的选项。但是,在“Language”选项大类中,C++语言的部分选项也会影响到生成的代码尺寸或者运行速度,也可以认为是C++代码的优化选项。

对代码尺寸影响巨大的Exception选项

C++语言选项当中的“Support for C++ exception handling ”选项,如果选择C++ 03 这个版本,该选项默认是禁止的;而选择C++ 11之后的版本,选项默认是使能的。这个选项会严重影响到生成代码的尺寸。禁止该选项,C++代码编译后的输出代码尺寸会缩减到原来的四分之一左右。所以,如果对于存储器的空间受限,可以禁止该选项。

使能和禁止该选项, 不能通过勾选来实现配置,需要在“Miscellameous Additional options”中添加指令:

添加“--no-exceptions”,禁止C++ exception选项。

添加“--exceptions”,使能C++ exception 选项。

图 1附加选项

这里需要注意,“--no-exceptions”与“--suppress-vtbl”选项相互冲突,如果同时使能之后会出现诸如“bad function call”的报错。

注:选项“--suppress-vtb”,使能“Suppress definition of virtual function tables”选项,抑制虚函数表格定义。

内联函数的使用

内联函数inline的使用可以加快代码的执行速度,不使用的话,会缩减生成的代码尺寸。默认情况下,C++代码中使用inline函数 。在这里是 “Minimal inlining of function calls (C++)”选项,通过“Miscellameous Additional options”中添加指令“--no-inlining”来实现。

经测试可以把生成的代码尺寸缩减到原来的70%左右。同时,这个选项会大幅增加软件的编译时间。

C代码优化选项

上文提到,“C/C++ Compiler”中的“Optimization”都是针对C代码。优化选项见下图 2。这里分为2个部分:

  • 代码优化,“Custom optimization”。
  • 编译速度, “Compilation Speed”。

代码优化选项当中,“Optimizition level”,优化等级设置;分为0~3,共4个等级可选。0表示无优化,3表示优化程度最高。也可以选择Custom,然后自定义各优化选项。

Trade-off between speed and size:0~4一共5个优化级别可选。其中2表示兼顾代码的尺寸和运行速度,1和0偏向代码运行速度,3和4表示侧重生成的代码尺寸。

图 2 C代码的优化选项

当 “Optimizition level” 选择Custom时,各优化选项处于可配置的状态,工程师可以根据实际的需要进行选择(见图 3)。

图 3自定义的优化选项

编译速度的优化见下图 4,可以通过缓存生成的代码的方式提高编译速度,设置缓存的路径,文件在缓存中保存的时间,以及工程执行“clean”指令时是否清缓存。如果对于编译速度有要求,可以通过设置这些选项提高编译速度。

图 4编译速度优化

汇编器(Assembler)优化选项

汇编器的优化只有2个选项(见图5)。

选项名称 长指令 短指令
Allow generic instructions +/-generics g/G
Optimize instruction size +/-instr-size s/S
图 5汇编器优化选项

使用短指令/Allow generic instructions

使用这个选项可以在汇编代码中使用“generic instructions”,汇编器会尝试使用更快、更小的指令。默认情况下这个选项是使能的,应为更短的指令可能影响循环的次数,如果使用手写的时间代码,可能需要禁止这个选项,这样汇编器会按照原本的样式去解码指令。

优化指令尺寸

Optimize instruction size

当这个选项使能时,汇编器会为了所有的指令尝试寻找最短的操作数解码方式,默认情况下这个选项也是使能的。

链接器(Linker)优化选项

链接器选项的优化,在“LinkerOptimization”中,共5个选项(见图 6)。

  • Delete unreferenced sections:删除未用到的Section
  • Use a 'first-fit decreasing' algorithm:使用“第一拟合递减”算法
  • Compress copy table: 压缩复制表格
  • Delete duplicate code:删除重复的代码
  • Delete duplicate data: 删除重复的数据
图 6链接器优化选项

命令行语法如下所示。

长指令:--optimize=flag,...

短指令:-Oflags

序号 长指令 短指令 描述
1 +/-delete-unreferenced-sections c/C Delete unreferenced sections from the output file
2 +/-first-fit-decreasing l/L Use a 'first-fit decreasing' algorithm to locate unrestricted sections in memory
3 +/-copytable-compression t/T Emit smart restrictions to reduce copy table size
4 +/-delete-duplicate-code x/X Delete duplicate code sections from the output file
5 +/-delete-duplicate-data y/Y Delete duplicate constant data from the output file

在链接器的优化选项设置时可以看到--optimize=2或 -O2等设置,其涵义如下所示。

无忧化选项,为0级。所有的优化选项都禁止。(大写字母为禁能,小写字母为使能)

对应的短指令设置: -OCLTXY

--optimize=0 或-O0

默认的选项设置,为1级。

对应的短指令设置:-OcLtxy

--optimize=1或 -O1

使能全部的优化选项,为2级。

对应的短指令设置: -Ocltxy

--optimize=2或 -O2

下面针对各项展开详细的论述。

删除代码中未用到的Section

这项优化从生成的对象文件中删除未被引用的Section,包括函数和变量,用于减小生成的代码尺寸。

如果满足两个条件中的任何一个,该优化选项就认为这是被引用了section(函数或变量),而不会被删除。

  1. 这个Section被保护起来,不会被删除,下列条件都认为是被保护:
  • 这个函数或变量分配了一个绝对地址。
  • LSL文件中使用了这个section的准确名字(而不是通配符模式*)。
  • LSL文件中引用了一个定义在这个section的符号。
  • 这个section中使用了受保护的标识,无论是在源代码文件或LSL中。

2. 这个section通过重定位被另一个section所引用,section被认为是被引用的。

第一拟合递减算法——优化代码定位

当物理内存被分割或地址空间被嵌套时,可能会出现以下情况,尽管可用的物理内存大于代码和数据的尺寸,但是特定程序无法定位。当这种情况发生时,需要启用“First fit decreasing”的优化,并重新链接你的应用程序。

链接器的默认行为是按照LSL文件中指定的顺序来放置各section(即从低内存地址到高内存地址或反之亦然)。这也适用于不受限制的组内的section。如果一个内存区域被部分地填满,剩余部分不足以定位一段特定的section,那么这段section和后续就会定位在临近的区域,这样做的结果就是存在内存的缝隙。

当启用“First-fit-decreasing”优化时,链接器将首先把最大的section放在可以容纳该section的最小内存区域内,小的section最后定位,并有可能被放在剩余内存的空隙当中。

压缩“ Copy table”

启动代码初始化应用程序的数据区域,应当清零的内存地址和需要从ROM复制到RAM中的内存区间的信息存储在copy table中。

当启动了“copy table-compression ”优化选项之后,链接器会以尽可能小的方式定位各个section,从而减少应用程序的ROM映像。

请注意,这个优化选项仅影响需要从copy table中进行初始化操作的非限制section,受影响的sections会得到一个簇状的限制。非限制section是指没有限制其绝对位置或与其他section相对位置的section。

删除重复的代码和数据

优化选项“delete-duplicate-code”,是用来移除目标文件中重复定义的代码(函数)。

优化选项“delete-duplicate-data”,是用来移除目标文件中重复定义的常量数据。

这里需要注意,当使用这两个优化选项,不同的数据对象或函数可能具有相同的地址。如果程序中需要使用相同定义的函数或者数据对象(数组、结构体)时,比如相同数据结构,不同内容的标定数据定义,可以根据实际需求禁止这两个选项中的一个或者全部。

本文主要参考《TASKING VX-toolset for TriCore User Guide》,更多内容请阅读原文。


联系我们

如有技术问题,请联系TASKING在国内的技术支持。

邮箱:support.china@tasking.com

官方网站:tasking.com

试用申请:tasking.com/trial

请关注官方订阅号,及时获取最新的TASKING信息资讯和技术文档。

http://weixin.qq.com/r/JhxCWnDEgy38rTQ590k0 (二维码自动识别)


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

武汉格发信息技术有限公司,格发许可优化管理系统可以帮你评估贵公司软件许可的真实需求,再低成本合规性管理软件许可,帮助贵司提高软件投资回报率,为软件采购、使用提供科学决策依据。支持的软件有: CAD,CAE,PDM,PLM,Catia,Ugnx, AutoCAD, Pro/E, Solidworks ,Hyperworks, Protel,CAXA,OpenWorks LandMark,MATLAB,Enovia,Winchill,TeamCenter,MathCAD,Ansys, Abaqus,ls-dyna, Fluent, MSC,Bentley,License,UG,ug,catia,Dassault Systèmes,AutoDesk,Altair,autocad,PTC,SolidWorks,Ansys,Siemens PLM Software,Paradigm,Mathworks,Borland,AVEVA,ESRI,hP,Solibri,Progman,Leica,Cadence,IBM,SIMULIA,Citrix,Sybase,Schlumberger,MSC Products...

相关文章
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空