AVX2 等效于 std::clamp
Posted
技术标签:
【中文标题】AVX2 等效于 std::clamp【英文标题】:AVX2 equivalent of std::clamp 【发布时间】:2020-09-02 00:01:55 【问题描述】:鉴于p
的精度在 1 到 16 之间,我想将 AVX2 整数寄存器限制在 -p/2
和 p/2
之间。我目前在非 AVX2 整数上使用 std::clamp
执行此操作。
有没有办法用 AVX2 做到这一点?
【问题讨论】:
【参考方案1】:使用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's intrinsics guide 以查找内在函数。
【讨论】:
以上是关于AVX2 等效于 std::clamp的主要内容,如果未能解决你的问题,请参考以下文章