2012-09-10 11 views
11

一般的なwidsomは、同じ操作を実行する場合、rep movsbrep movsd(または64ビットの場合、rep movsq)よりもはるかに遅いということです。しかし、私はいくつかの最新のマシンでテストを行ってきましたが、実行時間は膨大な範囲のバッファサイズ(10バイトから2メガ)にわたって同一(測定ノイズまで)になっています。これまでは、2つのマシン(32ビットIntel Atom D510と64ビットAMD FX 8120)でテストしました。x86文字列命令のパフォーマンスについての信頼できる情報?

  • rep movsbrep movsd(またはrep movsq)よりも遅い現代の任意のx86(32ビットまたは64ビット)のマシンはありますか?

  • もしそうでなければ、その差が重要だった最後のマシンは何でしたか、それはどれぐらい重要でしたか?

私は何があるかどうrep movsdrep movsqを使用してのために整列していないヘッド/テールと並ぶ中央にメモリを分割しないためにテストの貨物culting束を回避したいというの観点から、この質問を聞いていますのよこれを行うに実際の利益...ここベンチマークの

+0

最新の機械のパフォーマンス結果は正しいです。 –

+1

これは、CPUではなくメモリバスの帯域幅によって抑制されます。 –

+0

理論的にはそうかもしれませんが、他のコピー方法(例:Cループ)は2〜8倍遅くなります。したがって、消費されたCPU時間が差をつけています。 –

答えて

15

ロット:たとえばinstlatx64.atw.hu

(インテル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 

これは、であることを示していますが、それは小さいです。 (あなたはそれを逃したので、D5xxで消えてしまったようだ)

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 

は、いくつかの原子に大きな差があるようです:

SandyBridgeのためのこの1つは少し奇妙です

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 

私は、新しいものとみなすことができる他のものに大きな違いは見つけていません。

関連する問題