首页 文章

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

提问于
浏览
12

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

  • 是否有任何现代x86(32位或64位)机器 rep movsbrep movsd (或 rep movsq )慢?

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

我想从这个问题的角度来看这个问题是为了避免货物结果,为了使用 rep movsdrep movsq ,为了使用 rep movsdrep movsq ,如果这样做没有实际的好处,可以将一堆测试分解为未对齐的头/尾和对齐的中间 . .

1 回答

  • 15

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

    我没有发现任何可以被认为是新的东西的巨大差异 .

相关问题