AVX2 相当于 std::clamp

Jac*_*cko 2 stl simd avx2 clamp

给定p1 到 16 之间的精度,我想将 AVX2 整数寄存器夹在-p/2和之间p/2。我目前std::clamp在非 AVX2 整数上执行此操作。

有没有办法用 AVX2 做到这一点?

Pet*_*des 5

使用 以标准方式实现饱和钳位x = min(max(x, lower_limit), upper_limit),使用您想要的任何整数宽度。或者让编译器std::clamp为您自动矢量化。

8、16、32方便;AVX2 没有为 64 位整数打包最小/最大值,但您可以使用vpcmpgtq. AVX512 具有vpmaxsq. 仅使用 SSE2,只有最小/最大操作的几个大小/符号组合可用。SSE4.1 修复了这个问题,因此 AVX2 具有有符号和无符号的所有 3 种大小。

例如,对于 8 位整数,_mm256_max_epi8对于__m256i向量上的有符号整数最大值。

请参阅Intel 的内在函数指南以查找内在函数。