本帖最后由 yangyurong 于 2024-12-30 17:14 编辑
极海G32A1465是一款基于 Arm® Cortex®-M4F 内核的 32 位微控制器,具备M4F核,也就是具备DSP硬件浮点指令运算了,一直想测试下G32A1465的浮点运算性能。
本期就从软件模拟浮点运算和实际硬件浮点运算两个角度来进行测试。并做个对比。
1.先做软件测试浮点运算,这里就必须要使用到软件浮点库了,这里我们使用Qfplibhttps://www.quinapalus.com/qfplib.html
Qfplib 这个是个开源的软件浮点运算库,针对ARM处理器,使用汇编做到极致性能,能让不带硬件浮点运算的ARM和带硬件浮点运算的ARM都能使用。
开始进入主题。
打开Examples\G32A1465\Template模版工程KEIL,添加一下头文件
#include "stdio.h"
#include "main.h"
#include "board.h"
#include "system_g32a1xxx.h"
#include "code_time_measurement.h"
#include "qfplib-m3.h"
#include "math.h"
修改函数
printf("======================qfplib==========================\r\n");
CODE_TIME_START("qfplib软件浮点运算");
printf("qfp_fsqrt = %f\r\n", qfp_fsqrt(3.4f));
CODE_TIME_EVENT("qfp_fsqrt(3.4f)");
printf("qfp_fexp = %f\r\n", qfp_fexp(4.124f));
CODE_TIME_EVENT("qfp_fexp(4.124f)");
printf("qfp_fln = %f\r\n", qfp_fln(88.124f));
CODE_TIME_EVENT("qfp_fln(88.124f)");
printf("qfp_fsin = %f\r\n", qfp_fsin(3.1415926f/4));
CODE_TIME_EVENT("qfp_fsin(3.1415926f/4)");
printf("qfp_fcos = %f\r\n", qfp_fcos(3.1415926f/4));
CODE_TIME_EVENT("qfp_fcos(3.1415926f/4)");
printf("qfp_ftan = %f\r\n", qfp_ftan(3.1415926f/4));
CODE_TIME_EVENT("qfp_ftan(3.1415926f/4)");
printf("qfp_fatan2 = %f\r\n", qfp_fatan2(1.0f, 2.0f));
CODE_TIME_EVENT("qfp_fatan2(1.0f, 2.0f)");
CODE_TIME_STOP();
这是软件浮点库qfplib在关闭硬件FPU时测量的性能时间
2.做硬件浮点性能测试
修改代码如下
printf("======================hardfpu==========================\r\n");
CODE_TIME_START("硬件浮点运算");
printf("sqrtf = %f\r\n", sqrtf(3.4f));
CODE_TIME_EVENT("sqrtf(3.4f)");
printf("expf = %f\r\n", expf(4.124f));
CODE_TIME_EVENT("expf(4.124f)");
printf("logf = %f\r\n", logf(88.124f));
CODE_TIME_EVENT("logf(88.124f)");
printf("sinf = %f\r\n", sinf(3.1415926f/4));
CODE_TIME_EVENT("sinf(3.1415926f/4)");
printf("cosf = %f\r\n", cosf(3.1415926f/4));
CODE_TIME_EVENT("cosf(3.1415926f/4)");
printf("tanf = %f\r\n", tanf(3.1415926f/4));
CODE_TIME_EVENT("tanf(3.1415926f/4)");
printf("atan2f = %f\r\n", atan2f(1.0f, 2.0f));
CODE_TIME_EVENT("atan2f(1.0f, 2.0f)");
CODE_TIME_STOP();可以看出,软件Qfplib库的浮点运算能力已经非常接近硬件浮点运算的能力,该汇编库已经把性能发挥到了极致!!!!
|