c++ - 从 __m256 选择元素子集?

标签 c++ c sse simd avx

我有一个__m256,用来存储8个 float ,里面的元素如下:

__m256 v = {0,1,2,3,4,5,6,7};

现在我想获得另一个 __m256 的值,例如:

__m256 dst = {0,1,2,4,5,6,x,x};

x 这里表示我不在乎。

我不熟悉 SIMD,有人可以帮忙吗?或者给我一些提示?

谢谢!

最佳答案

您可以使用 AVX2 内在 _mm256_permutevar8x32_ps 。它可以帮助您打乱 256 位 vector 内的元素。请参阅下面的示例:

__m256 a = { 10, 20, 30, 40, 50, 60, 70, 80 };
__m256i k = _mm256_setr_epi32(0, 1, 2, 4, 5, 6, 0, 0);
__m256 b = _mm256_permutevar8x32_ps(a, k);

关于c++ - 从 __m256 选择元素子集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39383882/

相关文章:

c++ - 分析_mm_setzero_ps和{0.0f,0.0f,0.0f,0.0f}

c++ - CMAKE AIX xlc 编译器未被使用

c++ - 调试断言失败 : invalid iterators

c++ - 将 C++ const char * 转换为字符串实际发生了什么

c++ - 在 Dll 中使用 DirectX

c - 在代码块中包含一个 gobject.h

c - 当动态内存分配显式转换为结构类型时,到底会发生什么?

c - 组织数字直到输入 0 0 0

c++ - _mm_packus_epi16 饱和问题

将 SSE 代码转换为 AVX - _mm256_and_ps 的成本