AVX512 中 _mm256_sign_epi8 的等效函数

Equivalent function for _mm256_sign_epi8 in AVX512

提问人:Srihari S 提问时间:10/27/2023 更新时间:10/27/2023 访问量:59

问:

我正在尝试使用 AVX512 代码。在进行相同的工作时,试图寻找类似于 AVX512 中_mm256_sign_epi8的功能,但无法找到等效的功能。如果我们找到类似的指令,那将非常有用。是否有等效指令或任何其他替代方法可以对具有相似/较小 CPI/延迟的 AVX512 执行此操作?谢谢

AVX2 函数示例

z = _mm256_sign_epi8(x,y)

根据 y 元素的符号,x 元素的符号也进行了更新

C++ SIMD 内部函数 AVX512

评论

1赞 Peter Cordes 10/27/2023
没错,任何说明(felixcloutier.com/x86/psignb:psignw:psignd)都没有 AVX-512 版本。如果您使用 AVX-512 处理 256 位向量(这通常非常有效),您当然可以只使用 ;编译器将输入和输出安排为 YMM0-15,而不是 YMM16-31。vpsignb/w/d_mm256_sign_epi8
1赞 Peter Cordes 10/27/2023
对于 512 位向量,可能是从零开始的合并屏蔽和零屏蔽移动(有两个单独的 vec->mask 操作来馈送它,一个获取每个字节的高位,即 (felixcloutier.com/x86/vpmovb2m:vpmovw2m:vpmovd2m:vpmovq2m) 中的符号位),另一个测试每个元素的全零,即 为非零字节元素提供掩码。我不认为具有不同名称的单个指令可以使用相同的功能,因此您无法以 1 个周期的延迟获得相同的 1 uop!IDK 他们为什么放弃它。subvpmovb2mvptestmb1
3赞 chtz 10/27/2023
您是否需要“类似于 _mm256_sign_epi8”或完全相同(但在 512 位上)的东西?如果您不需要相同的功能,您真正需要什么功能?此外,如果您显示一些上下文(如何计算输入以及如何处理输出),则可能还有其他替代方案。

答: 暂无答案