gpt4 book ai didi

x86 - SSE 比较打包的无符号字节

转载 作者:行者123 更新时间:2023-12-03 15:07:44 25 4
gpt4 key购买 nike

我正在尝试使用 SSE 指令进行一些图像过滤。我使用的图像每像素有一个字节(255 灰度),我需要使用大于比较的方式比较无符号压缩字节。我查看了英特尔的手册,比较存在但仅针对有符号字节(PCMPGTB)。我怎么能对无符号字节进行这种比较?
提前致谢

最佳答案

在 AVX-5121 之前,确实不可能直接进行无符号比较。
但是您可以将 -128 添加到每个值(或减去 128,或 XOR 0x80 或类似值)。这会将 0 变为 -128,将 255 变为 127,并将其他值变为介于两者之间的值;结果是您从比较中得到正确的结果。
将其扩展为单词也应该有效,但听起来要慢一些,因为每条指令只完成了一半的工作。

_mm_cmpgt_epu8(a, b) = _mm_cmpgt_epi8(
_mm_xor_epi8(a, _mm_set1_epi8(-128)), // range-shift to unsigned
_mm_xor_epi8(b, _mm_set1_epi8(-128)))
pxor可以在比 paddb 更多的执行端口上运行在某些 CPU 上,因此如果您需要这样做,它通常是最佳选择。 XOR 是加无进位,加减 0x80 的进位出每个字节元素的顶部。

脚注 1:使用 AVX-512BW:
vpcmpub 它将比较谓词作为立即数,例如 cmpps . _mm_cmp[eq|ge|gt|le|lt|neq]_epu8_mask比较到一个掩码而不是另一个向量,因为这就是 AVX-512 比较指令的工作方式。例如 __mmask16 _mm_cmpgt_epu8_mask (__m128i a, __m128i b) in Intel's intrinsics guide

关于x86 - SSE 比较打包的无符号字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16204663/

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