我想使用内在函数来增加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秒的载体,因为你在上面建议。 –