2016-12-11 42 views
5

我想使用内在函数来增加SIMD矢量的元素。最简单的方法似乎是1添加到每个元素,像这样:如何在AVX/AVX2中增加矢量

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

vec = _mm256_add_epi16 (vec, vec_inc); 

但没有任何特殊的指令来增加向量?像incthis page?或者其他更简单的方法?

+2

没有,有没有什么特别的指令 - 只需加1秒的载体,因为你在上面建议。 –

回答

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内部函数的集合。另请参阅下标签信息记录了广泛的资源:

+0

我吃过'Intel Instrinsics Guide'。顺便说一下,我将接受答案 – Martin

+4

如果您在吃完“英特尔内部指南”后仍然很饿,请务必查看[tag:x86]标记wiki中的资源。 :-) @fac我也为未来的用户添加了答案。 –

+1

@CodyGray:在[SSE标签维基](http://stackoverflow.com/tags/sse/info)中也有一些SSE/AVX intrinsics教程类型的东西。 x86标签wiki提到了这一点(位于顶部),但我怀疑大多数人不会注意到这一点。 –