点击(此处)折叠或打开
-
mov ebx,0
-
loop:
-
and ecx,eax,1
-
add ebx,ecx
-
shr eax,1
- jnz loop
在多发射的cpu可以并行,算作一条指令。假设loop指令可以分支预测成功
,则所有的指令可以pipe起来,每周期执行一条指令。不考虑取指和流水线建立的时间,
总执行时间 = 32x2=64 cycle
使用专门算法:
点击(此处)折叠或打开
-
x = x & 0x55555555 + (x>>1) & 0x55555555;
-
x = x & 0x33333333 + (x>>2) & 0x33333333;
-
x = x & 0x0f0f0f0f + (x>>4) & 0x0f0f0f0f;
-
x = x & 0x00ff00ff + (x>>8) & 0x00ff00ff;
- x = x & 0x0000ffff + (x>>16) & 0x0000ffff;
点击(此处)折叠或打开
-
and ecx,eax,0x55555555
-
shr edx,eax,0x1
-
and edx,0x55555555
- add eax,ecx,edx
执行时间 = 3x5=15 cycle
FPGA实现
点击(此处)折叠或打开
- always@(posedge clk or negedge rstn)
- begin
- if(~rstn)
- dat_sum <= 'b0;
- else
- dat_sum <= datin[0] + datin[1] + ... datin[31];
- end
综合得到的电路为:

总执行时间 = 1 cycle
如果FPGA和CPU时钟相同,则可以得到15倍于CPU的性能。虽然FPGA的时钟频率会慢些,但也可以得到数倍于CPU的性能。