13

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

  • rep movsb有没有比rep movsd(或)慢的现代 x86(32 位或 64 位)机器rep movsq

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

我问这个问题是为了避免为了使用而进行大量测试以将内存分解为未对齐的头/尾和对齐的中间,rep movsd或者rep movsq这样做没有实际好处......

4

1 回答 1

16

这里有很多基准: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

似乎在某些 Atom 上有很大的不同(似乎随着 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

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

于 2012-09-10T20:53:20.117 回答