打印
[G32A]

极海G32A1465测评】——G32A1465的DSP浮点性能的软件浮点测试和硬件浮点测试对比

[复制链接]
239|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 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库的浮点运算能力已经非常接近硬件浮点运算的能力,该汇编库已经把性能发挥到了极致!!!!







软件FPU.png (56.38 KB )

软件FPU.png

硬件FPU.png (48 KB )

硬件FPU.png

软件FPU不是能.png (120.4 KB )

软件FPU不是能.png

硬件使能FPU.png (126.49 KB )

硬件使能FPU.png

软件代码.png (218.93 KB )

软件代码.png

硬件代码.png (163.75 KB )

硬件代码.png

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

18

帖子

0

粉丝