POPCNT如何在硬件中实现?

时间:2015-03-02 04:23:46

标签: assembly x86 hardware

根据http://www.agner.org/optimize/instruction_tables.pdfPOPCNT指令(返回32位或64位寄存器中的设置位数)在现代英特尔和每个时钟周期的吞吐量为1指令AMD处理器。这比需要多条指令的任何软件实现(How to count the number of set bits in a 32-bit integer?)要快得多。

如何在硬件中如此有效地实施POPCNT?

1 个答案:

答案 0 :(得分:6)

合并popcnt,位扫描正向/反向专利:

US8214414 B2 - Combined set bit count and detector logic

  

<强>抽象

     

描述了PopCount和BitScan的合并数据路径。硬件电路包括用于PopCount功能的压缩器树,其由BitScan功能(例如,位扫描前向(BSF)或位扫描反向(BSR))重用。选择器逻辑使压缩器树能够根据微处理器指令对PopCount或BitScan操作的输入字进行操作。如果选择了BitScan操作,则对输入字进行编码。压缩器树接收输入字,对比特进行操作,好像所有比特具有相同的重要性级别(例如,对于N比特输入字,输入字被视为N个一比特输入)。压缩器树电路的结果是一个二进制值,表示与执行的操作相关的数字(PopCount的设置位数,或扫描输入字时遇到的第一个设置位的位位置)。