给定 1 到 16 之间的精度p
,我想将 AVX2 整数寄存器限制在-p/2
和之间p/2
。我目前std::clamp
对非 AVX2 整数执行此操作。
有没有办法用 AVX2 做到这一点?
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 的内在函数指南以查找内在函数。