Xilinx社区
首页 > 技术文章 > 采用硬件加速发挥MicroBlaze处理能力
技术文章
采用硬件加速发挥MicroBlaze处理能力
来源:电子产品世界  时间:2010-03-09  浏览量:6136

  案例2:高速浮点性能

  现在我们给出另一个 MicroBlaze算法加速示例。一个客户声称他的浮点处理在MicroBlaze系统上运行非常慢。他使用的算法可采用简单的环路同时得出几个结果。

for (i=0;i<512;i++) {
   f_sum += farr[i];
   f_sum_prod += farr[i] * farr[i];
     f_sum_tprod += farr[i] *
farr[i] * farr[i];
  f_sqrt + =
sqrt(farr[i]);
  if (min_f > farr[i]) { min_f =
farr[i]; }
  if (max_f < farr[i]) { max_f =
farr[i]; }
}

  所有数值均是单精度浮点值。我们首先想到的是最基础的一个问题:浮点单元 (FPU) 激活了吗?检查项目设置后,我们发现FPU仍然处于未启用状态。这就是为什么永远无法计算出这几个数的原因。FPU可在 MicroBlaze属性设置中加以激活。

  FPU支持共有两种。我们也选择扩展FPU (Extended FPU)来支持求平方根运算。现在,在50MHz 的MicroBlaze上需要 1,108,685个周期才能完成 512个值的全部循环。查看生成的汇编程序代码后,可以了解到创建平方根是仍然在使用数学库(Math-lib)功能。其在数学功能中的定义为:

  double sqrt(double);

  不过客户使用平方根函数仅为处理浮点数值。因此,MicroBlaze FPU定义了一个新的函数来取代原来的函数,解决这个问题:

  float sqrtf(float);

  把表达式f_sqrt += sqrt(farr[i])变为f_sqrt += sqrtf(farr[i]),就会调用MicroBlaze内部的FPU内部平方根功能。现在执行代码只需要35,336个周期。特别是与第一个根本没有使用FPU的方案相比,我们再次通过小小的调整就实现了31倍的提升。在相同的执行时间内,可能需要大约1.5GHz的CPU才能给出上述这些结果。

热点文章
精选视频
推荐资源

中国授权培训机构

北京 电话:(010)82757632
      (010) 62192881
深圳 电话:(0755)86186715
武汉 电话:(027)61389792
成都 电话:(028)80821007
南京 电话:(025)66022032
西安 电话:(029)82230498
邮箱:sales@e-elements.com

中国授权经销商

香港 电话:(852)22127848
北京 电话:(010)84148118
成都 电话:(028)86528262
上海 电话:(021)33678387
深圳 电话:(0755)26584925
武汉 电话:(027)87322806
邮箱:china@avent.com
深圳 电话:(0755)26743210
上海 电话:(021)51696680
北京 电话:(010)51726678
成都 电话:(028)85139576
武汉 电话:(027)87690155
邮箱:
xilinx_enquiry@comtech.com.cn

社区主办


《电子产品世界》杂志社

内容提供


    赛灵思公司

Copyright ©2000-2015 ELECTRONIC ENGINEERING & PRODUCT WORLD. All rights reserved.
京ICP备12027778号-2 北京市公安局备案:1101082052