assembly 如何在AVX/AVX 2中递增矢量

sirbozc5  于 2022-11-24  发布在  其他
关注(0)|答案(1)|浏览(107)

我想使用内部函数来增加SIMD向量的元素。最简单的方法似乎是给每个元素加1,如下所示:
(note:vec_inc之前已设置为1)

vec = _mm256_add_epi16 (vec, vec_inc);

但是,有没有类似于inc的特殊指令来递增向量呢?或者有没有其他更简单的方法呢?

1qczuiv0

1qczuiv01#

INC指令不是SIMD级别的指令,它对整数标量进行操作。正如您和Paul所建议的,最简单的方法是将1添加到每个向量元素中,您可以通过添加1 s向量来实现。
如果你想模拟一个内在函数,你可以实现你自己的函数:

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

有关x86内部函数的类似问题,您可以在Intel's Intrinsics Guide找到英特尔伊萨内部函数集合。另请参阅x86sse标签信息下的大量资源:

相关问题