1360|0

6931

帖子

0

TA的资源

五彩晶圆(高级)

楼主
 

通过编译指示(pragma)提供信息 [复制链接]

可以在代码中插入一些特定语法的编译指示指令,来告知编译器有关代码的一些信息。因为编译器在缺少信息的情况下,总是以最坏的打算来优化代码,如果编程者能提供一些关键信息,会大大帮助编译器做出好的决策。最常用的有MUST_ITERATE和UNROLL两种。

MUST_ITERATE:提供关于循环次数的一些确切信息:最小可能循环次数、最大可能循环次数以及循环次数为某个factor的倍数。它的使用语法如下:


当不能确定某些参数时,允许对其缺省:


UNROLL:展开指示告诉编译器可以对循环代码进行适当的展开,其使用语法如下:


在展开指示之前,也最好用MUST_ITERATE指令告诉编译器循环次数为展开系数的倍数,这样可以避免产生额外的代码来处理异常情况,如:


展开的好处有两点:一是使得编译器可以更加均衡地利用各运算单元;二是编译器有更多的机会使用SIMD指令。但有一点需要注意的是:展开将会使得循环体增大。


4. 循环体优化的注意事项
循环的优化关键在于使得循环能够被编排成软件流水。

For complex loops, such as nested loops, conditional branches inside loops, and function calls inside loops, the effectiveness of the compiler may be compromised. When the situation becomes too complex, the compiler might not be able to pipeline at all.
编译器仅对内部循环执行软件流水。
软件流水循环可包含instrinsics,但不能包含函数调用。
循环结构中不可有break和goto语句,不可有条件中止,使循环提前退出的指令。
条件代码应尽量简单,在C64XX中,条件代码需要超过6个寄存器时,循环不可进行软件流水。
避免循环体内容过于复杂,造成寄存器组不够用。
如果要求一个寄存器的生命太长,这个代码不能进行软件流水。
循环结构中不要包含改变循环计数器数值的代码。


 
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
【回帖赢京东卡】说说无线技术那些事儿
即日起—2月28日,参与回帖讨论都有机会赢取【30元京东卡】

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表