2016-12-11 36 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提到了這一點(位於頂部),但我懷疑大多數人不會注意到這一點。 –