分析AVX2中的比较结果

问题描述

我正在尝试使用AVX2程序集优化代码。 一方面,我需要将计算结果与阈值进行比较,然后将0或255字节写入 输出。 我比较

VCMPPD ymm2,ymm1 (values here),ymm4 (thresholds here),1

然后,ymm2包含4个QUADWORDS 0和0xFF。理想情况是将其全部缩小到EAX中的4个字节。 但是现在,我正在执行4个VPTEST操作和几个条件跳转以形成输出。这会大大降低性能。

问题:如何有效地获取和使用与AVX2的比较结果?

解决方法

您可能正在寻找vmovmskpd eax,ymm2manual entry)来获取4位位图,然后可以使用诸如test eax,eax之类的整数指令进行分析。或cmp al,0xf来检查 all 元素是否为真,如果需要更详细的信息,甚至可以作为jmp [table + rax*8]之类的跳转表的索引。

如果实际上每个向量元素都想要想要 8个相同的位,而每个字节一个,则可以使用vpmovmskb

如果您还不了解movmskps/pd等,我建议使用Agner Fog的优化指南:他有一章关于SIMD。 https://agner.org/optimize/。向量->位图是x86的最佳功能之一。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...