循环ASM更快?

k t*_*k t 3 assembly

汇编程序中的代码循环是更快/更慢/更慢,然后只是编写指令x次,需要什么?还是代码依赖?但是什么时候机器执行二进制文件的速度更快:如果16位CPU直接读取16位或者返回32位?

最后; 是什么意思在asm循环?

小智 6

这取决于.重复执行一些指令可能会更快.这种技术通常称为循环展开.未展开的循环也可以变得更有效,因为代码将更小,并且许多CPU能够并且通常可以识别循环模式并预测它.也可以具有部分展开的循环.例如,不是直接执行20个指令或进行20个循环迭代,而是可以进行5次循环迭代,在每个循环中执行4条指令.

通常,如果不知道您所针对的架构(即CPU的型号和型号),很难说出什么是最好的.这就是为什么人们不会真正编写汇编代码的原因 - 分析不同方法的优缺点,执行成本,以及为不同的CPU品牌和模型生成不同的代码是编译器开发人员所做的事情.然后其他人用他们选择的语言编写代码,编译器为目标平台生成最好的程序集,这在99%的情况下都有效.

要回答你的问题,你可能要么自己编写两个版本并对它们进行分析以查看哪一个获胜.或者,您可以用C编写代码并为您的平台打开优化(即使用-O3,-march切换)并查看编译器生成的内容 - 它肯定是正确的.

希望能帮助到你.祝好运!

  • 同意,这很大程度上取决于.只有当展开的代码不会破坏CPU执行的各种指令级别的大小时,展开循环才有用.至少如果缓存未命中的惩罚高于分支/分支预测未命中的惩罚,那将是如此.正如你所说的那样,部分展开通常是有益的 - 例如,一次迭代处理至少一个高速缓存行的数据,或者一个"完整行"的向量寄存器.部分展开的循环通常比紧密循环提供更多"延迟隐藏"的机会(即具有ALU操作的混合加载/存储操作). (2认同)