[STM32F7] 【NucleoF767ZI】来者不善

[复制链接]
 楼主| sjw1716094642 发表于 2016-8-1 16:47 | 显示全部楼层 |阅读模式
在芯片推广这件事情上面,ST绝对是众厂商中最成功的一个。M7面世不久,F7已经深入人心,也有不少的产品已经用上F7。或许是我孤陋寡闻,未听说别家的M7如此红火。
从F1开始,8位机和16位机的市场被F1疯狂压榨。那是十年前的事情了。


F4现世,显然,还是来搅局的。携带的DSP和FPU,肯定的,它从低端DSP口中掠夺了一部分食物。MCU的高集成度和系统化,或许是未来的一个发展趋势,可能,哪天我们的电脑和手机也用MCU。


F7,没有带来太多改变,主要是进一步膨胀自身的性能、处理速度以及功耗比。


言归正传,F767,对于F746的改变,似乎不大。很多人可能就看重了2MB的rom,jpeg转码器。确实他们很有价值,但是别忘了,767实现了对双精度浮点的支持,DSP应该感到害怕。当然,不同的人关心的事物不同,我就对双精度浮点有更大的兴趣。
我总是关心代码效率,所以数据类型必然是十分重要的一方面。


说这么多,来实测一下767的双精度浮点的处理速度吧。


测试代码比较简单,可能测试结果不能100%的反应处理器性能,有兴趣的自己可以用更专业更全面的测试代码。
  1. static volatile float a,b,c,d;
  2. static volatile double la,lb,lc,ld;

  3. void Float_Test(void)
  4. {
  5.   u32 k=1000000;
  6.   while(k--)
  7.   {
  8.     a += 0.1f;//常数声明为float
  9.     b = a * 1.3f;
  10.     c = b / a;
  11.     d = a * (b - c);
  12.   }
  13. }

  14. void Double_Test(void)
  15. {
  16.   u32 k=1000000;
  17.   while(k--)
  18.   {
  19.     la += 0.1;//常数默认为double
  20.     lb = la * 1.3;
  21.     lc = lb / la;
  22.     ld = la * (lb - lc);
  23.   }
  24. }

  25. int main(void)
  26. {
  27.   RCC->AHB1ENR|=0x3;
  28.   LED_init();
  29.   
  30.   while(1)
  31.   {
  32.     LED_con(LED_GREEN,LED_ON);
  33.     Float_Test();
  34.     LED_con(LED_GREEN,LED_OFF);
  35.     Double_Test();
  36.   }
  37. }


每个测试循环都执行一百万次,然后用逻辑分析仪捕捉执行时间。
①、编译器使用双精度
1BG13[V2}O[6HZ48P}7%E.png


float 的执行时间是:0.1667秒


double 的执行时间是:0.3102秒


双精度的耗时大约是单精度的两倍,毕竟是32位的内核,速度肯定有差别,具体和不使用双精度作个比较便知


②、编译器使用单精度


8UU5N8%FROFM0(_S7~(PKR7.png

float 的执行时间是:0.1667秒
double 的执行时间是:1.179秒


float的执行时间没有变化,但是double的时间大约是开启双精度的4倍,可双精度浮点的支持对双精度浮点数的处理速度还是有很大的提升的。


③、不使用FPU


BD{L@9EVQXH[K6LBGTP](IN.png

float 的执行时间是:0.6945秒
double 的执行时间是:1.116秒



double类型数据的处理速度没有明显变化,float速度约为之前的四分之一。


我手头正好有个746 discovery,可以对比一下。
对比结果是:不使用FPU和使用单精度浮点的处理速度基本是没有差别的,但是746是没有double的指令的,所以,,,


F767的target选项中有double这个选项,而746没有
F767-target
9%ZA@U}0[71H$C}`U(@0(GS.png

F746-target
LMQ5_KQ~Y4OH~{L]LN1A)CW.png

介于F767的强大的浮点处理能力,能在那些应用上施展开伸手呢?
role_2099 发表于 2016-8-1 17:33 | 显示全部楼层
学习了,很专业
戈卫东 发表于 2016-8-1 19:37 | 显示全部楼层
双精度FPU在你需要双精度运算的时候帮助很大的,应该比你测试显示的差距要大得多。
mmuuss586 发表于 2016-8-1 19:37 | 显示全部楼层
谢谢楼主分享;
 楼主| sjw1716094642 发表于 2016-8-1 22:57 | 显示全部楼层
戈卫东 发表于 2016-8-1 19:37
双精度FPU在你需要双精度运算的时候帮助很大的,应该比你测试显示的差距要大得多。 ...

是的,不过一般单精度就够了,双精度可是一把牛刀啊,我一般也就杀杀**,哈哈
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:欢迎加入微控制家园,讨论微控制技术:群号 258891985

24

主题

302

帖子

8

粉丝
快速回复 在线客服 返回列表 返回顶部
个人签名:欢迎加入微控制家园,讨论微控制技术:群号 258891985

24

主题

302

帖子

8

粉丝
快速回复 在线客服 返回列表 返回顶部