【发布时间】:2021-10-29 06:15:07
【问题描述】:
我想提取具有 8 位元素的 256 位 AVX 寄存器中最高设置位的索引。我既找不到bsr 也找不到clz 的实现。
对于具有 32 位元素的 clz,存在带有浮点转换的 bithack,但这对于 8 位可能是不可能的。
目前,我正在研究一个解决方案,我会逐个检查位,稍后会添加,但我想知道是否有更快的方法来做到这一点。
【问题讨论】:
-
每个8位元素的最高位,还是256位寄存器的最高位?
-
另外,
0的结果是什么? -
AVX512可以用吗?
-
@chtz 每个 8 位元素的最高位。
0不可能是这样,所以无论是最快的。 @AlexGuteniev 最好不要。但如果有使用 AVX512 的解决方案,我很乐意看到它! -
我会合并两个基于
pshufb的查找表(用于上半部分和下半部分)。如果没有人更快,我可以稍后再做一个可能的实现。
标签: c++ simd intrinsics avx avx2