如何在 AVX/AVX2 中递增向量

How to increment a vector in AVX/AVX2

我想使用内在函数来递增 SIMD 向量的元素。最简单的方法似乎是给每个元素加1,像这样:

(注:vec_inc之前已经设置为1)

vec = _mm256_add_epi16 (vec, vec_inc);

但是有什么特殊的指令可以增加向量吗?喜欢 this page 中的 inc 吗?或者其他更简单的方法?

INC 指令不是 SIMD 级指令,它对整数标量进行运算。 正如您和 Paul 已经建议的那样,最简单的方法是将 1 添加到每个向量元素,您可以通过添加 1s.

的向量来实现

如果你想模拟一个内在函数,你可以实现你自己的函数:

inline __m256i _mm256_inc_epi16(__m256i a)
{
    return _mm256_add_epi16(a, _mm256_set1_epi16(1));
}

以后关于 x86 intrinsics 的类似问题,您可以在 Intel's Intrinsics Guide. Also see the extensive resources documented under the and 标签信息中找到 Intel ISA intrinsic 集合: