【发布时间】:2012-01-15 12:53:40
【问题描述】:
我最近一直在编写 x86 程序集(为了好玩),想知道以 rep 为前缀的字符串指令是否真的在现代处理器上具有性能优势,或者它们是否只是为了向后兼容而实现的。
我可以理解为什么英特尔最初会在处理器一次只运行一条指令时实现 rep 指令,但现在使用它们有什么好处吗?
通过编译成更多指令的循环,有更多指令要填满管道和/或乱序发出。现代处理器是为优化这些以 rep 为前缀的指令而构建的,还是在现代代码中很少使用 rep 指令,以至于它们对制造商来说并不重要?
【问题讨论】:
-
我已经有 5 年没有研究过这个了,但当时我的个人经验是,至少 rep movsd 和 rep stosd 比简单循环快,而一些扫描变体是不是。不过,从那以后,情况可能会发生重大变化。
-
在不同的处理器上进行测试,自己看看。
-
感谢您的意见,伙计们。 Alex:我可能最终会,但我没有很多不同的 proc 可以尝试,所以它只会在真正的 proc 上与没有管道的模拟器上进行。另外,我很懒,如果其他人可能已经做过,我宁愿不做这项工作。 :)
-
相关:lots of detail about x86 memory bandwidth,NT 存储与常规存储,以及单核如何无法始终使内存带宽饱和的内容(请参阅那里的答案中的“延迟绑定平台”)。还有一些
rep movs/stos与向量循环的比较。
标签: performance assembly x86 pipeline