gpt4 book ai didi

c - 了解 SIMD 随机播放控制掩码

转载 作者:行者123 更新时间:2023-12-05 03:00:12 24 4
gpt4 key购买 nike

我正在尝试使用 C 中的这个示例学习洗牌:

typedef int v4si __attribute__ ((vector_size (16)));

v4si a = {1,2,3,4};
v4si b = {5,6,7,8};
v4si mask = {0,4,2,5};
v4si res = __builtin_shuffle (a, b, mask); /* res is {1,5,3,6} */

我不明白 mask 到底做了什么?我在网上能找到的都是类似这样的:

The shuffle mask operand specifies, for each element of the result vector, which element of the two input vectors the result element gets

但它没有解释如何?有 AND, OR 吗?掩码中的数字是什么意思?

最佳答案

mask 不是 AND 掩码;洗牌控制 vector 是源 vector 串联的索引 vector 。每个结果元素基本上都是 res[i] = ab[mask[i] ] 的结果。

SIMD 洗牌是并行表查找,其中控制 vector (出于某种原因简称为“掩码”)是索引 vector ,其他输入是表。

相关:Convert _mm_shuffle_epi32 to C expression for the permutation?显示具有编译时常量索引的 _mm_shuffle_epi32 (pshufd) 的普通 C 等价物。您有一个 2 输入洗牌,索引到 a 和 b 的串联(按该顺序)。

AVX1/AVX2 没有真正为运行时变量输入执行此操作的随机播放,因此 __builtin_shuffle 必须编译为多条指令。

AVX512F vpermt2d不过,正是这样工作的。

关于c - 了解 SIMD 随机播放控制掩码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57032331/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com