AVX512 对 512 位 8 位字符执行 AND 操作

问题描述 投票:0回答:1

我想对两个包含 8 位元素的 512 位向量进行 AND 运算。

查看 Intel Intrinsics Guide,我可以看到一些 512 位 AND 运算:

__m512i _mm512_and_epi32 (__m512i a, __m512i b)
__m512i _mm512_and_epi64 (__m512i a, __m512i b)

但对于 epi8(或 epi16)没有任何影响。

使用epi64安全吗?我唯一犹豫的是为什么他们同时提供了epi32和epi64,想必两者都可以使用epi32。性能原因?

c++ x86 intrinsics avx512
1个回答
1
投票

两者都只是简单的按位与;您可以对任何数据使用其中任何一个。
或者更好的是,使用具有所需语义的

_mm512_and_si512

在 asm 中,

vpandd
vpandq
可以分别与 32 位或 64 位粒度的掩码一起使用。屏蔽是拥有单独操作码的唯一原因,这与 AVX2 及更早版本中只有
vpand
_mm256_and_si256
_mm_and_si128
)不同。

如果没有掩码,元素宽度就没有意义。

_mm512_and_epi32
epi64
存在的唯一原因是为了与
_mm512_mask[z]_and_epi[32|64]
保持一致。

_mm512_and_si512
存在,并将编译为
vpandq
vpandd

IIRC,大多数编译器都喜欢更宽的元素,并且会选择
vpandq
,就像他们如何使用
vmovdqa64
来表示
_mm512_load_si512

AVX512BW 添加了 EVEX 版本的指令,例如

vpaddb
,其中元素宽度即使没有屏蔽也很重要。但没有为按位布尔值添加字节或字掩码宽度,仅添加
vmovdqu8
/
vmovdqu16
(和
vpblendmb
/
vpblendmw
)用于单独加载、存储或 reg-reg 混合(合并-掩蔽)或零掩蔽。


有趣的事实:

vandps/pd
不是AVX512F(基础)的一部分,其中只有整数
vpandd/q
。 FP 版本作为 AVX512DQ 的一部分添加。
(Xeon Phi 是唯一具有 AVX512F 而没有 AVX512BW 和 DQ 的真正硬件,我猜更少的冗余操作码可以节省解码器中的晶体管,而且我猜它并不关心用于旁路转发的单独 SIMD-int 与 FP 域。 AVX-512 是为 Larrabee 开发的矢量 ISA 的改编版,并在第一代 Xeon Phi(Knight's Corner)中进行商业销售。

© www.soinside.com 2019 - 2024. All rights reserved.