Intel 最適化マニュアルを見ると、Haswell ではシャッフル関係命令が遅くなっているようです。せっかく AVX2 で SIMD-int が 256bit 幅で使えるようになったのに遅くなったのでは意味が無いのですが、ともあれ前回と同様に計測してみます。あと、正確にはシャッフル関係命令ではありませんが、PMOV[ZS]X 系命令も計測します。

いつも通りハイフンの前がレイテンシで後がスループット(1クロックに何命令発行できるか)の逆数です。

命令 Nehalem Sandy Haswell Haswell
(AVX2)
PS[LR]LDQ 1-0.5 1-0.5 1-1 1-1
PALIGNR 1-1 1-1 1-1 1-1
PSHUFB 1-0.5 1-0.5 1-1 1-1
PUNPCK[LH]{BW,WD,DQ,QDQ} 1-0.5 1-0.5 1-1 1-1
PACK{US,SS}{WB,DW} 1-0.5 1-0.5 1-1 1-1
PBLENDVB 2-1 ※ 2-1 ※ 2-2 2-2
PMOV[ZS]X{BW,BD,BQ,WD,WQ,DQ} 1-1 1-1 1-1 3-1

Nehalem: Core i3-380M (Arrandale なので厳密には Westmere)
Sandy: Core i7-2600K
Haswell: Core i7-4770
※ ただし、デスティネーションオペランドが確定してからのレイテンシだけは 2 ではなく 1 になる。

やっぱ遅ぇよ。

AVX2 を使って倍速処理してようやくスループットが Sandy と同じになります。AVX2 では大抵の命令で上位128bitと下位128bitが別々に処理されるため一般的に使いづらく、別々に処理されない VPMOV[ZS]X 系命令は使いやすい(分かりやすい)代わりにレイテンシが大幅に増えています。

難しいですねぇ。

Trackback

only 1 comment untill now

  1. 新しい命令ベンチマークツールと以前のツールの問題

    最近、命令ベンチマークツールをもうちょっと汎用的に組めるように作りなおしているのですが、さっき試しに計測したら Sandy 上で pmovzxbw のスループットが 0.5 と出てきました。以前の…

Add your comment now