将 8 个浮点从内存加载到 __m256 变量中
您的目标是用内部变量 __m256 替换浮点缓冲区 [8]。以下是实现此目的的说明:
AVX2 说明:
- 使用 VPMOVZXBD ymm0, [rsi] 将内存中的字节零扩展为 32-位整数。
- 使用 VCVTDQ2PS ymm0, ymm0 将整数转换为浮点数。
AVX1 说明:
- 使用 VPMOVZXBD xmm0 , [rsi] 加载前四个字节。
- 使用 VPMOVZXBD xmm1, [rsi 4] 加载接下来的四个字节。
- 使用 VINSERTF128 将第二个加载插入到 ymm0 的高 128 位ymm0, ymm0, xmm1, 1.
- 用VCVTDQ2PS转换为浮点数 ymm0, ymm0.
优化提示:
- 对于 AVX2,请考虑使用 128 位广播负载和 VPMOVZXBD 来提高性能。
- 避免将 VPMOVZXBD ymm, [mem] 与内在函数一起使用,因为它可能会导致错过优化。
- 对于 AVX1,使用 _mm_loadl_epi64 将负载折叠到 VPMOVZXBD 指令中以获得最佳代码。