gpt4 book ai didi

gcc - 我想要 __builtin_popcountll 的两种实现

转载 作者:行者123 更新时间:2023-12-03 17:46:44 30 4
gpt4 key购买 nike

我有一些代码想要运行快速的内置 CPU 指令popcnt(当__builtin_popcountll使用正确的标志编译时,例如g++ -mpopcntclang++ -march=corei7,会发生这种情况),但也能够当cpuid显示 CPU 不支持 HW 指令时回退到代码。

当然,为了获得我相信编译器人员已经正确实现的回退代码(所以我不必引入 C 或 asm 代码来执行我的 popcount)我需要一个单独的编译单元,它在编译时没有-mpopcnt-march=corei7标志。

将单独编译的代码链接在一起是唯一的方法吗?是否没有编译器内在函数或其他类型的提示或其他我不知道的内置函数可以用来让它生成回退 popcount 代码?

最佳答案

我不确定,但是在 popcnt 指令和回退实现之间进行选择所需的代码成本可能比一直使用非 popcnt 实现有更大的性能损失。

要切换到替代实现(在 popcnt 的站点进行切换),您至少需要以下内容:

  • 加载并检查 cpuid 位 (CPUID.01H:ECX.POPCNT[Bit 23])
  • 分支以选择 popcnt 或替代实现
  • 可能保存/恢复替代实现所需的寄存器
  • 如果替代实现基于 SSE 或 AVX,则可能将数据移动到 SIMD 寄存器

  • 我怀疑成本阻止了您描述的内在的有效实现。

    关于gcc - 我想要 __builtin_popcountll 的两种实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13774145/

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