常见的是widsom rep movsb
比...慢得多 rep movsd
(或64位, rep movsq
)执行相同的操作时。但是,我一直在测试一些现代机器,并且在大范围的缓冲区大小(10个字节到2兆)之间运行时间相同(达到测量噪声)。到目前为止,我刚刚在2台机器(32位Intel Atom D510和64位AMD FX 8120)上进行了测试。
我想从这个问题的角度提出这个问题,希望避免货物过多的测试将记忆分解成未对齐的头/尾和对齐的中间,以便使用 rep movsd
要么 rep movsq
如果这样做没有实际的好处......
这里有很多基准: instlatx64.atw.hu
例如(英特尔酷睿2双核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
我还没有发现其他任何可以被认为是新的东西的巨大差异。