将 8 个字符从内存加载到 __m256 变量中作为打包单精度浮点数
在高斯模糊算法中,可以实现优化以加快执行速度通过有效地将数据加载到向量寄存器中。其中一种优化涉及用 __m256 变量替换浮点数组。本文利用 AVX2 指令的强大功能,为此任务提供了最佳解决方案。
使用 AVX2 指令的解决方案
有效地将 8 个字符从内存加载到 __m256 变量中使用 AVX2,建议使用以下指令:
VPMOVZXBD ymm0, [rsi] ; or SX to sign-extend (Byte to DWord) VCVTDQ2PS ymm0, ymm0 ; convert to packed foat
指令细节
其他优化
要进一步优化此过程,请考虑使用广播负载来馈送 VPMOVZXBD 指令和高 64 位的 Vpshufb 指令。此策略减少了总体 uop 计数,提高了效率:
<code class="pseudocode">__m256 b = [float(new_image[x+7]), float(new_image[x+6]), ... , float(new_image[x])]; __m256 b = _mm256_broadcast_ss(&new_image[x]) _mm256_shuffle_epi8(b, _mm256_set1_epi8(0)); // fills upper 64 bits with zeroes _mm256_cvtps_epu32(b); // convert to integers _mm256_cvtepu32_ps(b); // convert back to floats</code>
避免次优技术
其他注意事项
以上是如何使用 AVX2 将 8 个字符从内存加载到 __m256 变量作为打包单精度浮点数?的详细内容。更多信息请关注PHP中文网其他相关文章!