概述
代码优化综述
使用simulink代码生成之后,如果需要进一步对执行效率或者内存优化,可以看下面提到的方法。具体可从以下几个方面考虑:
- remove initialization code
- removing termination code
- removing unnecessary data support
- conditional input branch execution
- optimizing data storage
- inlining parameter
- block reduction
- removing wrapping code”、“exception handing”和code generation objectives等
下面详细说明下。
代码优化选项
static code metric
用来统计生成代码的概况,如:代码行数、全局变量、入口函数等。
选择该选项后,生成代码的报告会有个统计页:
remove initialization code
用来把I/O初始化和内部变量初始化等代码优化掉。
优化前:
优化后,将I/O和内部数据的初始化优化掉了:
该优化项的影响:
removing termination code
用来把变量的中止赋值等代码优化掉:
优化前:
优化后:
该优化项的影响:
removing unnecessary data support
此处各个选项的意义大致如字面意思,详细意思和注意事项待补充。
该优化的影响:
conditional input branch execution
该选项针对于switch等if判断模块,不激活时,代码会计算switch每个分支的结果,然后判断输出。激活该选项后,先进行switch判断,在输出分支结果。
如下面这个模型:
不选择该选项时,生成的代码如下,先进行分支结果计算,然后再用if-else判断输出:
勾选该项代码如下,先进行if-else进行判断要输出哪个分支,然后计算该分支的结果。这个选项有点类似于预编译,谨慎使用:
该优化项的影响:
optimizing data storage
激活第一个选项后(signal storage reuse),下面几个选项会激活
这里有3个地方需要详细说一下:
1)激活“signal storage outputs”和“enable local block outputs”前:
激活“signal storage outputs”和“enable local block outputs”后如下图,生成了模型中的3个中间变量(local block outputs)
2)在上述激活“signal storage outputs”和“enable local block outputs”的基础上,再激活“reuse local block outputs”代码如下图,代码中部分中间变量被省略了。(对比上上图)
3)在上述激活“signal storage outputs”、“enable local block outputs”和“reuse local block outputs”的基础上,再激活“eliminate superfluous local variable(expression folding)”代码如下图,代码中部分中间变量进一步被省略了。(对比上图中的红字)
inlining parameter
这个是很常用的选项,但如果该模型有标定量(storage class为volatile)时慎用。
选择为tunable时:
选择为inlined且conditional input branch execution勾选后,代码如下图。
block reduction
该选项主要优化3个地方:
- 多余的数据类型转换模块(data type conversation)
- 死逻辑代码(无用代码,覆盖度问题)
- 单任务中的执行速率转换模块(fast-to-slow transition block in a single-tasking system)
如上图,将switch设置为inlined后,代码会被优化如下,
该选项的影响:
另外还有“removing wrapping code”、“exception handing”和code generation objectives
1)removing wrapping code是数据溢出时的操作,建议在模型测试时发现,而不是在代码生成中解决。
2)exception handing是数据类型检测,如两个uint8相除后可能会出现single,此处也应该在模型测试时发现,而不应在代码生成中解决。
3)code generation objectives是simulink自动帮助开发者优化,可以自行设置优化目标,也比较常用。
总结
可以用measuring changes in performence进行评估,这块的详细使用方法待补充。
上述各种选项,总结如下:
最后
以上就是笑点低滑板为你收集整理的Simulink自动代码生成3——优化生成的代码(optimizing generated code)的全部内容,希望文章能够帮你解决Simulink自动代码生成3——优化生成的代码(optimizing generated code)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复