【问题标题】:Analyzing results of comparision in AVX2分析 AVX2 中的比较结果
【发布时间】:2020-11-09 04:10:54
【问题描述】:

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

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

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

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

【问题讨论】:

  • VPMOVMSKB eax, ymm2 是您要找的吗?

标签: assembly sse avx2


【解决方案1】:

您可能正在寻找 vmovmskpd eax, ymm2 (manual entry) 来获取 4 位位图,然后您可以使用像 test eax,eax 这样的整数指令对其进行分析。或cmp al, 0xf 来检查所有 元素是否为真,如果您需要更详细地了解哪些元素为真,甚至可以作为jmp [table + rax*8] 之类的跳转表的索引。

如果你真的想要每个向量元素有 8 个相同的位,每个字节有一个,你当然可以使用 vpmovmskb

如果您还不了解movmskps/pd 等,我建议您阅读 Agner Fog 的优化指南:他有一个关于 SIMD 的章节。 https://agner.org/optimize/。矢量 -> 位图是 x86 的最佳特性之一。

【讨论】:

    猜你喜欢
    • 2018-09-03
    • 1970-01-01
    • 2018-04-24
    • 2019-07-29
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-01
    相关资源
    最近更新 更多