据我所知,VEXTRACTF128 和 VEXTRACTI128 指令执行相同的操作,具有相同的延迟、相同的吞吐量并使用相同的端口。我无法分辨它们之间的唯一区别是 VEXTRACTF128 只需要 AVX VEXTRACTI128 需要 AVX2。 如果这是唯一有效的区别,为什么要使用 VEXTRACTI128?
我在 Agner Fog 的 vectroclass 中看到了以下内容,我推断这意味着指令之间存在一些重要区别。也许他们共享不同的域(浮点或整数)?
#if defined (_MSC_VER) && _MSC_VER <= 1700 && ! defined(__INTEL_COMPILER)
__m128i sum5 = _mm256_extractf128_si256(sum4,1); // bug in MS VS 11
#else
__m128i sum5 = _mm256_extracti128_si256(sum4,1); // get high sum
#endif