我想使用內在函數來增加SIMD矢量的元素。最簡單的方法似乎是1添加到每個元素,像這樣:如何在AVX/AVX2中增加矢量
(注:vec_inc
已被設置爲1之前)
vec = _mm256_add_epi16 (vec, vec_inc);
但沒有任何特殊的指令來增加向量?像inc
在this page?或者其他更簡單的方法?
我想使用內在函數來增加SIMD矢量的元素。最簡單的方法似乎是1添加到每個元素,像這樣:如何在AVX/AVX2中增加矢量
(注:vec_inc
已被設置爲1之前)
vec = _mm256_add_epi16 (vec, vec_inc);
但沒有任何特殊的指令來增加向量?像inc
在this page?或者其他更簡單的方法?
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內部函數的集合。另請參閱下x86和sse標籤信息記錄了廣泛的資源:
我吃過'Intel Instrinsics Guide'。順便說一下,我將接受答案 – Martin
如果您在吃完「英特爾內部指南」後仍然很餓,請務必查看[tag:x86]標記wiki中的資源。 :-) @fac我也爲未來的用戶添加了答案。 –
@CodyGray:在[SSE標籤維基](http://stackoverflow.com/tags/sse/info)中也有一些SSE/AVX intrinsics教程類型的東西。 x86標籤wiki提到了這一點(位於頂部),但我懷疑大多數人不會注意到這一點。 –
沒有,有沒有什麼特別的指令 - 只需加1秒的載體,因爲你在上面建議。 –