如何在AVX / AVX2中增加矢量

时间:2016-12-11 12:51:21

标签: assembly x86 simd intrinsics avx2

我想使用内在函数来增加SIMD向量的元素。最简单的方法似乎是为每个元素添加1,如下所示:

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

vec = _mm256_add_epi16 (vec, vec_inc);

但是有没有增加矢量的特殊指令?与this page中的inc一样?还是其他更简单的方式?

1 个答案:

答案 0 :(得分:7)

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找到英特尔ISA内在函数的集合。另请参阅标记信息中记录的大量资源: