如何在 AVX/AVX2 中递增向量
How to increment a vector in AVX/AVX2
我想使用内在函数来递增 SIMD 向量的元素。最简单的方法似乎是给每个元素加1,像这样:
(注:vec_inc
之前已经设置为1)
vec = _mm256_add_epi16 (vec, vec_inc);
但是有什么特殊的指令可以增加向量吗?喜欢 this page 中的 inc
吗?或者其他更简单的方法?
INC
指令不是 SIMD 级指令,它对整数标量进行运算。
正如您和 Paul 已经建议的那样,最简单的方法是将 1
添加到每个向量元素,您可以通过添加 1
s.
的向量来实现
如果你想模拟一个内在函数,你可以实现你自己的函数:
inline __m256i _mm256_inc_epi16(__m256i a)
{
return _mm256_add_epi16(a, _mm256_set1_epi16(1));
}
以后关于 x86 intrinsics 的类似问题,您可以在 Intel's Intrinsics Guide. Also see the extensive resources documented under the x86 and sse 标签信息中找到 Intel ISA intrinsic 集合:
我想使用内在函数来递增 SIMD 向量的元素。最简单的方法似乎是给每个元素加1,像这样:
(注:vec_inc
之前已经设置为1)
vec = _mm256_add_epi16 (vec, vec_inc);
但是有什么特殊的指令可以增加向量吗?喜欢 this page 中的 inc
吗?或者其他更简单的方法?
INC
指令不是 SIMD 级指令,它对整数标量进行运算。
正如您和 Paul 已经建议的那样,最简单的方法是将 1
添加到每个向量元素,您可以通过添加 1
s.
如果你想模拟一个内在函数,你可以实现你自己的函数:
inline __m256i _mm256_inc_epi16(__m256i a)
{
return _mm256_add_epi16(a, _mm256_set1_epi16(1));
}
以后关于 x86 intrinsics 的类似问题,您可以在 Intel's Intrinsics Guide. Also see the extensive resources documented under the x86 and sse 标签信息中找到 Intel ISA intrinsic 集合: