使ってるやつから軽くピックアップ。Intel Core 2 から Skylake アーキテクチャーまで一覧として見れるものがなかったので作成。cpuid は未掲載のものもあるかも。不正確な情報や,追加して欲しいものがあったら連絡くれれば随時追加します。
Sandy Bridge が一つの大きな境目とみなせると思いますし,その前後で別実装を用意するのもアリかもしれません。それ以前だと MMX の方が早いとかもあるかも。
以下のページの4番の PDF を引くことを推奨。AMD, Intel, VIA の CPU に関するものが全てまとめてあります。
1. SSE
1.1 _mm_add/sub_ps (ADD/SUBPS)
レイテンシー | スループット | |
---|---|---|
Yonah (06_0E) | ||
Conroe, Allendale, Merom (06_0F) | 3 | 1 |
Wolfdale, Penryn, Yorkfield (06_17) | ||
Nehalem (06_1A, 06_1E, 06_1F, 06_2E) | ||
Westmere (06_25, 06_2C, 06_2F?) | ||
Sandy Bridge (06_2A, 06_2D) | ||
Ivy Bridge (06_3A, 06_3E) | ||
Haswell (06_3C, 06_45, 06_46, 06_3F) | ||
Broadwell (06_3D, 06_47, 06_56) | ||
Skylake (06_4E, 06_5E) | 4 | 0.5 |
Bulldozer | 5-6 | 0.5 |
Piledriver | ||
Steamroller | 5-6 | 1 |
Excavator | ||
Bobcat | 3 | 1 |
Jaguar | ||
Ryzen | 3 | 0.5 |
1.2 _mm_mul_ps (MULPS)
レイテンシー | スループット | |
---|---|---|
Conroe, Allendale, Merom (06_0F) | 4 | 1 |
Wolfdale, Penryn, Yorkfield (06_17) | ||
Nehalem (06_1A, 06_1E, 06_1F, 06_2E) | ||
Westmere (06_25, 06_2C, 06_2F?) | ||
Sandy Bridge (06_2A, 06_2D) | 5 | 1 |
Ivy Bridge (06_3A, 06_3E) | ||
Haswell (06_3C, 06_45, 06_46, 06_3F) | 5 | 0.5 |
Broadwell (06_3D, 06_47, 06_56) | 3 | 0.5 |
Skylake (06_4E, 06_5E) | 4 | 0.5 |
Bulldozer | 5-6 | 0.5 |
Piledriver | ||
Steamroller | ||
Excavator | 5 | 0.5 |
Bobcat | 2 | 2 |
Jaguar | 4 | 2 |
Ryzen | 3 | 0.5 |
1.3 _mm_div_ps (DIVPS)
最新アーキテクチャーだと Newton Raphson による逆数より DIV 使った方が早いかもですね。ただ,実質 AVX が使える環境になるので,Sandy Bridge を境目にするなら VEX エンコーディングで書き出す環境向けコードとそうでないコードで分けると綺麗な気がします。
レイテンシー | スループット | |
---|---|---|
Conroe, Allendale, Merom (06_0F) | < 21 | < 16 |
Wolfdale, Penryn, Yorkfield (06_17) | < 21 | < 14 |
Nehalem (06_1A, 06_1E, 06_1F, 06_2E) | < 16 | < 12 |
Westmere (06_25, 06_2C, 06_2F?) | ||
Sandy Bridge (06_2A, 06_2D) | 14 | 14 |
Ivy Bridge (06_3A, 06_3E) | 10-14 | 14 (6) |
Haswell (06_3C, 06_45, 06_46, 06_3F) | < 13 | 6 |
Broadwell (06_3D, 06_47, 06_56) | < 11 | 3 |
Skylake (06_4E, 06_5E) | 11 | 3 |
Bulldozer | 9-24 | 4.5-9.5 |
Piledriver | 9-27 | 5-10 |
Steamroller | 9-17 | 4-6 |
Excavator | 8-22 | 4-8 |
Bobcat | 38 | 38 |
Jaguar | 19 | 19 |
Ryzen | 10 | 3 |
1.4 _mm_min/max_ps (MIN/MAXPS)
Intel は ADD/SUB と同じ
レイテンシー | スループット | |
---|---|---|
Conroe, Allendale, Merom (06_0F) | 3 | 1 |
Wolfdale, Penryn, Yorkfield (06_17) | ||
Nehalem (06_1A, 06_1E, 06_1F, 06_2E) | ||
Westmere (06_25, 06_2C, 06_2F?) | ||
Sandy Bridge (06_2A, 06_2D) | ||
Ivy Bridge (06_3A, 06_3E) | ||
Haswell (06_3C, 06_45, 06_46, 06_3F) | ||
Broadwell (06_3D, 06_47, 06_56) | ||
Skylake (06_4E, 06_5E) | 4 | 0.5 |
Bulldozer | 2 | 0.5 |
Piledriver | ||
Steamroller | ||
Excavator | ||
Bobcat | 2 | 2 |
Jaguar | 2 | 1 |
Ryzen | 1 | 0.5 |
1.5 _mm_andnot/and/or_ps (ANDN/AND/OR)
レイテンシー | スループット | |
---|---|---|
Conroe, Allendale, Merom (06_0F) | 1 | 1 OR: 0.33 |
Wolfdale, Penryn, Yorkfield (06_17) | 1 | 0.33 |
Nehalem (06_1A, 06_1E, 06_1F, 06_2E) | ||
Westmere (06_25, 06_2C, 06_2F?) | ||
Sandy Bridge (06_2A, 06_2D) | 1 | 1 |
Ivy Bridge (06_3A, 06_3E) | ||
Haswell (06_3C, 06_45, 06_46, 06_3F) | ||
Broadwell (06_3D, 06_47, 06_56) | ||
Skylake (06_4E, 06_5E) | 1 | 0.33 |
Bulldozer | 2 | 0.5 |
Piledriver | ||
Steamroller | ||
Excavator | ||
Bobcat | 1 | 1 |
Jaguar | 1 | 0.5 |
Ryzen | 1 | 0.25 |
1.6 _mm_xor_ps (XOR)
AMD は ANDN/AND/OR に同じ。
レイテンシー | スループット | |
---|---|---|
Conroe, Allendale, Merom (06_0F) | 1 | 0.33 |
Wolfdale, Penryn, Yorkfield (06_17) | ||
Nehalem (06_1A, 06_1E, 06_1F, 06_2E) | ||
Westmere (06_25, 06_2C, 06_2F?) | ||
Sandy Bridge (06_2A, 06_2D) | ||
Ivy Bridge (06_3A, 06_3E) | 1 | 1 |
Haswell (06_3C, 06_45, 06_46, 06_3F) | ||
Broadwell (06_3D, 06_47, 06_56) | ||
Skylake (06_4E, 06_5E) | ||
Bulldozer | 2 | 0.5 |
Piledriver | ||
Steamroller | ||
Excavator | ||
Bobcat | 1 | 1 |
Jaguar | 1 | 0.5 |
Ryzen | 1 | 0.25 |
1.7 _mm_sqrt_ps (SQRTPS)
レイテンシー | スループット | |
---|---|---|
Conroe, Allendale, Merom (06_0F) | < 32 | < 27 |
Wolfdale, Penryn, Yorkfield (06_17) | < 21 | < 14 |
Nehalem (06_1A, 06_1E, 06_1F, 06_2E) | < 20 | < 16 |
Westmere (06_25, 06_2C, 06_2F?) | ||
Sandy Bridge (06_2A, 06_2D) | 14 | 14 |
Ivy Bridge (06_3A, 06_3E) | 14 | 14 (7) |
Haswell (06_3C, 06_45, 06_46, 06_3F) | 13 | 7 |
Broadwell (06_3D, 06_47, 06_56) | ||
Skylake (06_4E, 06_5E) | ||
Bulldozer | 14-15 | 4.5-12 |
Piledriver | 13-15 | 5-12 |
Steamroller | 12-13 | 4-9 |
Excavator | 13 | 4 |
Bobcat | 48 | 48 |
Jaguar | 21 | 21 |
Ryzen | 9-10 | 4-5 |
1.8 _mm_rcp/rsqrt_ps (RCP/RSQRTPS)
レイテンシー | スループット | |
---|---|---|
Conroe, Allendale, Merom (06_0F) | 3 | RCP: 1 RSQRT: 2 |
Wolfdale, Penryn, Yorkfield (06_17) | 3 | 2 |
Nehalem (06_1A, 06_1E, 06_1F, 06_2E) | 3 | 2 |
Westmere (06_25, 06_2C, 06_2F?) | ||
Sandy Bridge (06_2A, 06_2D) | 5 | 1 |
Ivy Bridge (06_3A, 06_3E) | ||
Haswell (06_3C, 06_45, 06_46, 06_3F) | ||
Broadwell (06_3D, 06_47, 06_56) | ||
Skylake (06_4E, 06_5E) | 4 | 1 |
Bulldozer | 5 | 1 |
Piledriver | ||
Steamroller | ||
Excavator | RCP: 5 RSQRT: 4 | 1 |
Bobcat | 3 | 2 |
Jaguar | 2 | 1 |
Ryzen | 5 | 1 |
1.9 _mm_unpackhi/lo/shuffle_ps(UNPCKH/L/SHUFPS)
レイテンシー | スループット | |
---|---|---|
Conroe, Allendale, Merom (06_0F) | 2 | 1 |
Wolfdale, Penryn, Yorkfield (06_17) | 1 | 1 |
Nehalem (06_1A, 06_1E, 06_1F, 06_2E) | ||
Westmere (06_25, 06_2C, 06_2F?) | ||
Sandy Bridge (06_2A, 06_2D) | ||
Ivy Bridge (06_3A, 06_3E) | ||
Haswell (06_3C, 06_45, 06_46, 06_3F) | ||
Broadwell (06_3D, 06_47, 06_56) | ||
Skylake (06_4E, 06_5E) | ||
Bulldozer | 2 | 1 |
Piledriver | ||
Steamroller | ||
Excavator | ||
Bobcat | 1 | 1 |
Jaguar | 2 | 0.5 |
Ryzen | 1 | 0.5 |