32位寄存器bit1求和的CPU和FPGA实现性能分析

1260阅读 0评论2018-01-10 FBI888XH
分类:嵌入式

简单算法汇编实现

点击(此处)折叠或打开

  1. mov ebx,0
  2. loop:
  3. and ecx,eax,1
  4. add ebx,ecx
  5. shr eax,1
  6. jnz loop
line3和line4指令存在寄存器相关,但可以通过forward技术使指令pipe起来。line4,5,6
在多发射的cpu可以并行,算作一条指令。假设loop指令可以分支预测成功
,则所有的指令可以pipe起来,每周期执行一条指令。不考虑取指和流水线建立的时间,
总执行时间 = 32x2=64 cycle

使用专门算法:

点击(此处)折叠或打开

  1. x = x & 0x55555555 + (x>>1) & 0x55555555;
  2. x = x & 0x33333333 + (x>>2) & 0x33333333;
  3. x = x & 0x0f0f0f0f + (x>>4) & 0x0f0f0f0f;
  4. x = x & 0x00ff00ff + (x>>8) & 0x00ff00ff;
  5. x = x & 0x0000ffff + (x>>16) & 0x0000ffff;
汇编实现

点击(此处)折叠或打开

  1. and ecx,eax,0x55555555
  2. shr edx,eax,0x1
  3. and edx,0x55555555
  4. add eax,ecx,edx
每步4条指令。line1和line2可并行,line2,3,4寄存器相关,可使用定向技术pipe起来。
执行时间 = 3x5=15 cycle

FPGA实现

点击(此处)折叠或打开

  1. always@(posedge clk or negedge rstn)
  2. begin
  3. if(~rstn)
  4. dat_sum <= 'b0;
  5. else
  6. dat_sum <= datin[0] + datin[1] + ... datin[31];
  7. end
寄存器dat_sum由dat_in经加法器直接得到。
综合得到的电路为:

总执行时间 = 1 cycle


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







上一篇:Linux-3.14.12内存管理笔记【X86内存映射小结(2)】
下一篇:没有了