0

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

我知道在过去,带有 REPE 的 MOVSD 名义上是最快的方法,因为您一次可以移动 4 个字节,但我读到现在 MOVSB 一样快并且更易于编写,所以您不妨做一个字节移动并忘记 4 字节移动的复杂性。

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


注意:我已阅读《英特尔优化参考手册》中的第 3.7.6 节,因此我熟悉基础知识。我希望有人能将本手册中没有的领域的实践经验联系起来。

4

1 回答 1

5

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

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

于 2012-12-10T00:12:43.350 回答