首页 >后端开发 >C++ >AVX2 指令如何使用掩码优化基于左的打包?

AVX2 指令如何使用掩码优化基于左的打包?

Linda Hamilton
Linda Hamilton原创
2024-12-28 07:50:14770浏览

How Can AVX2 Instructions Optimize Left-Based Packing with a Mask?

如何使用AVX2基于Mask高效打包Left?

问题概述:

给定一个输入数组和一个输出数组,目标是只写入那些通过将特定条件放入输出数组中。此操作在各种应用中至关重要,包括数据过滤和图像处理。

SSE 方法:

在 SSE 中,此过程传统上是使用随机控制数据方法完成的,如提供的代码片段中所述。然而,这种方法对于 AVX 来说就很麻烦了,因为 AVX 有 8 个宽度的向量,需要很大的查找表。

AVX2 解决方案:

为了解决这个问题,AVX2 提供了两个选项:

  1. 使用BMI2 指令:

    • 利用 vpermd 指令进行可变宽度排列。
    • 使用 BMI2 中的 pext 指令动态生成掩码,提取位并将它们组装在想要的
  2. Lut 方法:

    • 为 shuffle 控制数据创建一个压缩的 LUT,与SSE。
    • 使用 set1()、vpsrlvd() 和vpand() 解压 LUT 条目,维护 8 宽向量。

最佳方法:

最佳方法取决于应用程序的具体要求。对于大型数据集,LUT 方法可能是首选,因为其开销较低且缓存效率提高。然而,对于较小的数据集或优先考虑速度的应用程序,基于 BMI2 的解决方案可以提供更好的性能。

以上是AVX2 指令如何使用掩码优化基于左的打包?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn