Siq*_*Lin 6 hardware x86 assembly
根据http://www.agner.org/optimize/instruction_tables.pdf,该POPCNT指令(返回32位或64位寄存器中的设置位数)在现代的每个时钟周期内具有1个指令的吞吐量英特尔和AMD处理器.这比需要多条指令的任何软件实现要快得多(如何计算32位整数中的设置位数?).
POPCNT如何在硬件中如此有效地实施?
组合popcnt,位扫描正向/反向有专利:
抽象
描述了PopCount和BitScan的合并数据路径.硬件电路包括用于PopCount功能的压缩器树,其由BitScan功能(例如,位扫描前向(BSF)或位扫描反向(BSR))重用.选择器逻辑使压缩器树能够根据微处理器指令对PopCount或BitScan操作的输入字进行操作.如果选择了BitScan操作,则对输入字进行编码.压缩器树接收输入字,对这些位进行操作,好像所有位具有相同的重要性级别(例如,对于N位输入字,输入字被视为N个一位输入).压缩器树电路的结果是二进制值,表示与所执行的操作有关的数字(PopCount的设置位数,或者通过扫描输入字遇到的第一设置位的位位置).