Assembly ASM使用循环更快?
汇编程序中的代码循环是否比只写x次指令更快/相等/更慢,这是必需的?还是依赖于代码? 但是,机器什么时候执行二进制文件更快:如果16位cpu直接向前读取16位,还是向后读取32位Assembly ASM使用循环更快?,assembly,Assembly,汇编程序中的代码循环是否比只写x次指令更快/相等/更慢,这是必需的?还是依赖于代码? 但是,机器什么时候执行二进制文件更快:如果16位cpu直接向前读取16位,还是向后读取32位 最后,;asm中的循环是什么意思?视情况而定。重复一些指令可能会更快。这种技术通常被称为。未展开的循环也会变得更有效,因为代码会更小,而且许多CPU都有能力识别循环模式并预测它。也可以有一个部分展开的循环。例如,与直接执行20条指令或执行20次循环迭代不同,可以执行5次循环迭代,每次执行4条指令 通常,如果不知道您的目
最后,;asm中的循环是什么意思?视情况而定。重复一些指令可能会更快。这种技术通常被称为。未展开的循环也会变得更有效,因为代码会更小,而且许多CPU都有能力识别循环模式并预测它。也可以有一个部分展开的循环。例如,与直接执行20条指令或执行20次循环迭代不同,可以执行5次循环迭代,每次执行4条指令 通常,如果不知道您的目标体系结构(即CPU的品牌和型号),就很难判断什么是最好的。这就是为什么人们不经常编写汇编代码的原因——分析不同方法的优缺点、执行成本以及为不同的CPU品牌和型号生成不同的代码是编译器开发人员要做的事情。其他人则用自己选择的语言编写代码,编译器为目标平台生成可能的最佳程序集,这在99%的情况下都是可行的 要回答您的问题,您可能需要自己编写这两个版本,并对它们进行分析,以确定哪一个版本获胜。或者,您可以用C编写代码,并为您的平台启用优化(即使用
-O3
,-march
开关),然后查看编译器生成的内容—它肯定做了正确的事情
希望能有帮助。祝你好运 asm中的循环通常表示分支(如果相等或类似)。如果您使用的是HLE,而不是在一条指令中执行比较和分支的平台上工作,那么它可能是一条伪指令,相当于x86
cmpl
,然后是je
MIPS分支说明:
另外,请查看以下问题:
loop
不一定是循环的最快指令。第三,你应该检查和神秘的优秀答案。同意,这在很大程度上取决于。展开循环只有在展开的代码不会影响CPU缓存的各级指令的大小时才是有益的。如果缓存未命中的惩罚高于分支/分支预测未命中的惩罚,则至少是这样。正如您所说,部分展开通常是有益的,例如,一次迭代处理至少一个缓存线的数据,或一个“整行”向量寄存器。部分展开的循环通常比紧密的循环提供更多的“延迟隐藏”(即加载/存储操作与ALU操作混合)机会。