线性汇编随记

本文介绍了线性汇编中的一些技巧,包括如何合理使用并行指令提高程序运行速度,在特定条件下循环展开优于软件流水线,避免手动指定功能单元及寄存器组以充分利用编译器的优化能力,以及条件指令的正确使用方式。
部署运行你感兴趣的模型镜像
 
 

1.在线性汇编中是可以加入"||"的,虽然TI文档里说在线性汇编里并行指令是非法,

如果加入位置正确的话,是可以提高速度的

2.在没有编排流水而将循环展开,有时候得到的性能比不采用循环展开,由CCS软件流水的性能要好.(特别是对于循环次数少如4次的情况

3.不需要指定功能单元,寄存器组,交叉通道.分配哪个寄存器, 即如使用LDNDW .D1T2 A_s1,中d1t2是不需要的,.2X,.1X这样的也不需要指定,要reg而不是rega或regb分配寄存器,因为目前来说,CCS自动分配的比我分配的要好

4.用.reg tmp1:tmp0,在生成的asm文件中没有发现编译器没有MAP给它分配寄存器,调用它的代码也没有执行,要考虑程序编写的问题,有可能是因为上下相似功能的代码使用了相同的中间寄存器

4.多写些线性汇编指令

5.EXTU的功能

6这样的线性汇编:
     CMPGT theta,cond,if_0
      LDH *a++,ai
[if_0] ADD sum,ai,sum
[!if_0] SUB    sum,ai,sum
想实现的效果是当theta>cond时,执行ADD sum,ai,sum,反之则反
但是现在在调试程序时发现if_0=1时,
这两个加了条件指令的语句"都会执行",

还有,在if_0=0时,
这两个加了条件指令的语句也是"都会执行",
请问可能是什么原因?
谢谢
开飞机的贝塔(79675460) 17:01:20
理论上这是一个条件指令,
应该只执行一个语句啊...

实际上是执行的"两个"条件语句(中括号里的),而只执行一条中括号后面的代码

实际上是相当于if(if_0)和if(!if_0),满足条件的就才进去执行,但两个if还是执行了的

 

转自http://hi.baidu.com/ecice/blog/item/0ecb311298c071cbc2fd7879.html谢谢原作者(如霜的天空?)。

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值