关于x86字符串指令性能的可靠信息?

时间:2012-09-10 20:48:20

标签: performance optimization assembly x86

常见的widsom是rep movsb在执行相同操作时比rep movsd(或在64位,rep movsq上慢得多)。但是,我已经在一些现代机器上进行了测试,并且在大量缓冲区大小(10字节到2兆)之间运行时间相同(达到测量噪声)。到目前为止,我刚刚在2台机器(32位Intel Atom D510和64位AMD FX 8120)上进行了测试。

  • 是否有任何现代x86(32位或64位)计算机rep movsb慢于rep movsd(或rep movsq)?

  • 如果没有,差异显着的最后一台机器是什么,它有多重要?

我想从这个问题的角度提出这个问题,为了使用rep movsd或{{1},我希望避免使用大量的测试来将记忆分解为未对齐的头/尾和对齐的中间位置如果这样做没有实际的好处......

1 个答案:

答案 0 :(得分:15)

这里有很多基准:instlatx64.atw.hu

例如(Intel Core 2 Duo E6700):

REP MOVSB   BW in L1D:13.04 B/c  34829MiB/s
REP MOVSW   BW in L1D:13.29 B/c  35493MiB/s
REP MOVSD   BW in L1D:13.40 B/c  35783MiB/s

这表明 是一个区别,但它很小。

SandyBridge的这个有点奇怪:

REP MOVSB   BW in L1D:25.50 B/c  86986MiB/s
REP MOVSW   BW in L1D:18.09 B/c  61721MiB/s
REP MOVSD   BW in L1D:27.47 B/c  93693MiB/s

似乎某些Atoms存在很大差异(似乎已经与D5xx一起消失了,所以你只是错过了它):

REP MOVSB   BW in L1D: 0.53 B/c    990MiB/s
REP MOVSW   BW in L1D: 1.93 B/c   3598MiB/s
REP MOVSD   BW in L1D: 3.74 B/c   6960MiB/s

我还没有发现其他任何可以被认为是新的东西。