首页 > 解决方案 > 如何让 __m256i AVX 容器覆盖 8 位整数数组?

问题描述

AVX 中有一条指令_mm256_set1_epi8可以将容器内的 32 个 8 位整数设置_m256i为特定值。

如果我有一个所述 8 位整数的数组,我怎样才能使操作__m256i产生_mm256_set1_epi8的容器覆盖char[32]容器?

我没有在 SSEx 或 AVX 中找到任何与 Epi8(8 位有符号整数)相关的加载或移动指令。我想必须有一种方法可以实现这一点,因为它的计算似乎并不复杂,但我找不到应该使用哪条指令来实现这一点。

如果使用 无法实现__m256i,是否可以使用 a 实现类似的功能__m128i

代码示例来说明上述情况:

int _tmain(int argc, _TCHAR* argv[])
{
  // This is an array of 8-bit signed integers
  char charArray[32] = { 0, 1, 2, 3, 4, /*[...],*/ 30, 31 };

  // This is the value I want to set in the array at some point
  char valueToSet = 4;

  // This instruction makes it possible to set 32 8-bit signed integers at once
  __m256i eightBitIntegersRegistry = _mm256_set1_epi8(valueToSet);

  // How can I make it affect the charArray array?
  // In the end I would want the content of charArray to be { 4, 4, 4, [...] 4, 4, 4 }

  return 0;
}

标签: c++ssesimdavxavx2

解决方案


推荐阅读