如何在AVX/AVX2中增加矢量

Mar*_*tin 5 x86 assembly simd intrinsics avx2

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

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

vec = _mm256_add_epi16 (vec, vec_inc);
Run Code Online (Sandbox Code Playgroud)

但是有没有增加矢量的特殊指令?就像inc这个网页?还是其他更简单的方法?

pla*_*cel 8

INC指令不是SIMD级指令,它对整数标量进行操作.正如你和Paul已经建议的那样,最简单的方法是添加1到每个向量元素,你可以通过添加一个1s 向量来完成.

如果要模拟内在函数,可以实现自己的函数:

inline __m256i _mm256_inc_epi16(__m256i a)
{
    return _mm256_add_epi16(a, _mm256_set1_epi16(1));
}
Run Code Online (Sandbox Code Playgroud)

对于未来x86内在函数的类似问题,您可以在英特尔的内在函数指南中找到英特尔ISA内在函数的集合.另请参阅标记信息中记录的大量资源:

  • 如果您在吃完英特尔内在指南后仍然感到饥饿,请务必查看[tag:x86]标签维基中的资源.:-) @fac我也为未来的用户添加了答案. (4认同)