2

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

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

4

1 回答 1

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 的内在函数指南以查找内在函数。

于 2020-09-02T01:50:56.157 回答