gpt4 book ai didi

c++ - 使用 sse 的快速紧凑寄存器

转载 作者:行者123 更新时间:2023-11-30 01:57:26 26 4
gpt4 key购买 nike

我正在尝试弄清楚如何使用 sse _mm_shuffle_epi8 压缩 128 位寄存器。

比方说,我有一个输入变量

__m128i target

基本上是 8 个 16 位,表示为:

a[0], a[1] ... a[7].  // each slot is 16 bits

我的输出叫做:

__m128i output

现在我有一个大小为 8 的位 vector :

char bit_mask // 8 bits, i-th bit each indicate if
// the corresponding a[i] should be included

好的,我如何根据位掩码和输入目标得到最终结果?

假设我的位 vector 是:

[0 1 1 0 0 0 0 0]

那么我想要的结果是:

output = [a1, a2 , ... ]

有什么已知的方法可以使用 _mm_shuffle_epi8 来做到这一点?

假设我使用查找数组:_mm_shuffle_epi8(a, mask_lookup[bitvector]);

如何创建数组?

最佳答案

简单且非常快,但需要 4KB 的表空间:

_mm_shuffle_epi8(a, mask_lookup[bitvector]);

您只需将所有 256 种可能的洗牌掩码存储在由位 vector 索引的表中。

关于c++ - 使用 sse 的快速紧凑寄存器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18708232/

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