STM32 L431浮点数性能测试

运行的主频是80MHz

  1. 求sin值
  ticks = HAL_GetTick();
  //进行浮点数计算
  for(uint16_t i=0;i<10000;i++) //进行一万次sin函数计算
  {
     
	  f = sin((float)i);    
  }
  ticks = HAL_GetTick();

  for(uint16_t i=0;i<10000;i++) //进行一万次sin函数计算
  {
     
	  f = arm_sin_f32((float)i);
  }
  ticks = HAL_GetTick();

执行一万次sin函数,FPU加速效果非常明显。不是用FPU的话需要402ms,使用了FPU只需要12ms!非常夸张。相差了33.5倍。

  1. 求平方根
  ticks = HAL_GetTick();
  //进行浮点数计算
  for(uint32_t i=0;i<10000;i++)
  {
     
	  f = sqrt((float)i);
  }
  ticks = HAL_GetTick();

  for(uint32_t i=0;i<10000;i++)
  {
     
	  arm_sqrt_f32((float)i,&f);
  }
  ticks = HAL_GetTick();

执行一万次平方根操作,不用FPU执行为160ms,使用了FPU时间为10ms,相差16倍

  1. 浮点数加法
  ticks = HAL_GetTick();
  //进行浮点数计算
  for(uint32_t i=0;i<100000;i++) 
  {
     
	  f += (float)i;
  }
  ticks = HAL_GetTick();

分别开启FPU和关闭FPU计算10W次加法运算。开启FPU需要25s,关闭FPU后需要130ms
相差了5.2倍

总结:FPU对浮点数加速效果非常明显,一般粗略地可以认为在M4内核中有10倍的加速效果。这个FPU对中规模浮点数运算还是非常有用的,但是在低复杂度的计算中,1ms与0.1ms似乎对很多应用没什么区别,但是对于100ms和1s来说相差就很客观了。当然更高的话就不应该用M4去做了。除了一般的加速,有了FPU还可以使用ARM的数学库,做FFT运算,FIR滤波等操作都非常方便。而且现在M3与带FPU的M4价格真的没太大差别,怎么选用还是看应用场景吧。

你可能感兴趣的:(stm32)