我很想知道x86架构上批量内存副本的最佳方法。我意识到这取决于机器特有的特性。主要目标是过去4 - 5年制造的典型台式机。
我知道在过去,带有REPE的MOVSD名义上是最快的方法,因为你一次可以移动4个字节,但是我已经读到MOVSB现在同样快速且写入更简单,所以你也可以这么做做一个字节移动,忘掉4字节移动的复杂性。
一个周围的问题是MOVxx指令是否值得。如果CPU的运行速度比内存总线快得多,那么使用CISC移动也许毫无意义,你也可以使用普通的MOV。这将是最有吸引力的因为我可以在其他处理器架构上使用相同的算法,如ARM。这就提出了类似的问题:ARM的大容量存储器移动专用指令(与Intels完全不同)是否值得。
注意:我已阅读英特尔优化参考手册中的第3.7.6节,因此我对基础知识非常熟悉。我希望有人可以将本领域的实践经验与本手册中的内容联系起来。
答案 0 :(得分:4)
现代英特尔和AMD处理器对REP MOVSB进行了优化,使其能够一次复制整个缓存行,使其成为复制批量数据的最佳(可能不是最快但非常接近)的方法。
至于ARM,它取决于架构版本,但通常使用展开的循环将是最有效的。