x86和ARM中移动内存的最佳方式



我很想知道在x86体系结构上进行大容量内存复制的最佳方法。我意识到这取决于机器的特定特性。主要目标是过去4-5年生产的典型台式机。

我知道在过去,带REPE的MOVSD名义上是最快的方法,因为你可以一次移动4个字节,但我读到现在的MOVSB同样快,写起来更简单,所以你也可以移动一个字节,忘记4字节移动的复杂性。

一个围绕的问题是MOVxx指令是否值得。如果CPU的运行速度比内存总线快得多,那么使用CISC移动可能毫无意义,您还可以使用普通MOV。这将是最有吸引力的,因为这样我就可以在其他处理器架构(如ARM)上使用相同的算法。这就引出了一个类似的问题,即ARM用于大容量内存移动的专用指令(与整数完全不同)是否值得。


注意:我已经阅读了《英特尔优化参考手册》的第3.7.6节,因此我对基础知识很熟悉。我希望有人能在这本手册之外的领域讲述实际经验。

现代英特尔和AMD处理器对REP MOVSB进行了优化,使其在可能的情况下一次复制整个缓存线,成为复制大容量数据的最佳方法(可能不是最快,但非常接近)。

至于ARM,它取决于体系结构版本,但通常使用展开的循环将是最有效的。

最新更新