13

一般的な知恵は、同じ操作を実行する場合よりも(または64ビットで)rep movsbはるかに遅いことです。ただし、私はいくつかの最新のマシンでテストしており、実行時間は、膨大な範囲のバッファー サイズ (10 バイトから 2 メガバイト) にわたって (測定ノイズまで) 同一であることがわかりました。これまでのところ、2 台のマシン (32 ビット Intel Atom D510 と 64 ビット AMD FX 8120) でテストしました。rep movsdrep movsq

  • (または)rep movsbより遅い最新の x86 (32 ビットまたは 64 ビット) マシンはありますか?rep movsdrep movsq

  • そうでない場合、違いが顕著だった最後のマシンは何ですか?

rep movsd私は、使用するために、またはrep movsqこれを行う実際の利点がない場合に、メモリを整列されていない頭/尾と整列された中央に分割するために一連のテストをカーゴカルトすることを避けたいという観点から、この質問をしています...

4

1 に答える 1

16

ここにたくさんのベンチマークがあります: 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

一部の 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 に答える