【问题标题】:How to increment a vector in AVX/AVX2如何在 AVX/AVX2 中增加向量
【发布时间】:2017-04-26 11:07:54
【问题描述】:

我想使用内在函数来增加 SIMD 向量的元素。最简单的方法似乎是给每个元素加 1,像这样:

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

vec = _mm256_add_epi16 (vec, vec_inc);

但是有什么特殊的指令可以增加一个向量吗?就像inc 中的this page 一样?或者其他更简单的方法?

【问题讨论】:

  • 不,没有特殊说明 - 只需添加一个 1 的向量,就像你上面建议的那样。

标签: assembly x86 simd intrinsics avx2


【解决方案1】:

INC 指令不是 SIMD 级指令,它对整数标量进行操作。 正如您和 Paul 已经建议的那样,最简单的方法是将 1 添加到每个向量元素中,您可以通过添加 1s 的向量来做到这一点。

如果你想模拟一个内在函数,你可以实现你自己的函数:

inline __m256i _mm256_inc_epi16(__m256i a)
{
    return _mm256_add_epi16(a, _mm256_set1_epi16(1));
}

对于未来有关 x86 内部函数的类似问题,您可以在Intel's Intrinsics Guide 找到英特尔 ISA 内部函数集合。另请参阅 标签信息下记录的大量资源:

【讨论】:

  • 我吃过Intel Instrinsics Guide。顺便说一句,我会接受答案
  • 如果您在看完英特尔内部指南后仍然感到饥饿,请务必查看x86 标签 wiki 中的资源。 :-) @fac 我也将其添加到未来用户的答案中。
  • @CodyGray:SSE tag wiki 中还有一些 SSE/AVX 内在教程类型的东西。 x86 标签 wiki 提到了这一点(在顶部),但我怀疑大多数人不会注意到这一点。
猜你喜欢
  • 2018-04-24
  • 2017-08-31
  • 1970-01-01
  • 2015-12-08
  • 2021-09-21
  • 1970-01-01
  • 1970-01-01
  • 2016-03-16
  • 2021-12-19
相关资源
最近更新 更多