问题:
您想要优化算法通过用内部 __m256 变量替换浮点缓冲区 [8] 来提高图像上的高斯模糊效果。
解决方案 1:使用 AVX2 的 PMOVZX 和 VCVTDQ2PS
这个该方法利用 PMOVZX 将 8 位字符扩展为 32 位整数,然后通过 VCVTDQ2PS 将其转换为浮点值。具体来说:
VPMOVZXBD ymm0, [rsi] ; Byte to DWord VCVTDQ2PS ymm0, ymm0 ; convert to packed float
解决方案 2:结合广播加载和洗牌
此策略涉及执行 128 位广播加载以产生 64 位洗牌控制向量对于 vpshufb,允许零扩展和压缩浮点转换。它通过消除额外的随机指令的需要来提供高吞吐量。
VPMOVSXBD xmm0, [rsi] ; Byte to DWord VPMOVSXBD xmm1, [rsi+4] VINSERTF128 ymm0, ymm0, xmm1, 1 VCVTDQ2PS ymm0, ymm0 ; convert to packed float.
解决方案 3:处理 AVX1 限制
在没有 AVX2 的情况下,以下步骤可以使用:
VPMOVZXBD xmm0, [rsi] VPMOVZXBD xmm1, [rsi+4] VINSERTF128 ymm0, ymm0, xmm1, 1 ; put the 2nd load of data into the high128 of ymm0 VCVTDQ2PS ymm0, ymm0 ; convert to packed float.
附加说明:
以上是如何将 8 个字符从内存加载到 __m256 变量中:三种有效方法的详细内容。更多信息请关注PHP中文网其他相关文章!