常见的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},我希望避免使用大量的测试来将记忆分解为未对齐的头/尾和对齐的中间位置如果这样做没有实际的好处......
答案 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
我还没有发现其他任何可以被认为是新的东西。