查看: 1672|回复: 0

[经验] TI C6000 导致软件流水编排失败的因素

[复制链接]

该用户从未签到

发表于 2021-3-2 09:25:38 | 显示全部楼层 |阅读模式
分享到:
在CCS开发环境中,开启-O2/-O3优化选项,编译器将自动为合适的代码进行软件流水编排,因此编程者需要注意的是使设计的循环体符合软件流水编排的条件。



下列一些因素将可能引起软件流水编排失败:

汇编语句嵌入到C/C++代码中

出现复杂的流控制语句如goto、break等

循环中包含一个调用(内嵌函数除外)

需进行软件流水编排的指令太多

没有初始化循环计数器

循环变量在循环过程中被修改

软件流水被关闭:没有使用-O2或-O3选项;使用了-ms2或-ms3选项;使用-mu关闭了软件流水





理解编译器反馈信息
1. 编译器优化循环的几个步骤

循环的运算性能主要取决于编译器能否编排出恰当的软件流水,编译器优化一个循环的过程大致分为三个步骤:



获取循环次数信息。这些信息能帮助编译器判断是否要对循环做自动展开等操作。有时编译器无法从代码中获得完整的这些信息,编译器将会对循环采取保守的优化策略。因此,若要获得最佳的优化性能,编程者应尽可能地提供这些信息给编译器,可通过 MUST_ITERATE 、UNROLL 等 pragma语句。

几个关键参数如下:

最小可能循环次数(Minimum Trip Count)

最大可能循环次数(Maximum Trip Count)

循环倍数系数(Max Trip Count Factor)



收集循环资源和相关图信息。CPU完成一次循环迭代所需的cycle数称为迭代间隔(iteration interval,ii),编译器的优化目标就是最小化ii。

几个关键参数如下:

循环执行相关限(Loop Carried Dependency Bound),指循环体中最大的一条依赖路径的距离,而所谓依赖是指当前指令的开始依赖于前面指令的结束。

以下面一段代码为例:

  1. <span style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">void simple_sum(short *sum, short *in1, unsigned int N)</span>

  2. <span style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">{</span>

  3. <span style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">int i;</span>

  4. <span style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">for (i = 0; i < N; i++)</span>

  5. <span style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">{</span>

  6. <span style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">sum[i] = in1[i] + 1;</span>

  7. <span style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">}</span>

  8. <span style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei";"="">}</span>
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /4 下一条



手机版|小黑屋|与非网

GMT+8, 2024-11-25 01:48 , Processed in 0.122129 second(s), 15 queries , MemCache On.

ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

苏公网安备 32059002001037号

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.