硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1657|回复: 7
收起左侧

[DSP] STM32H743比STM407 dsp库计算耗时还要长???

[复制链接]

7

主题

15

回帖

36

积分

新手上路

积分
36
发表于 2021-12-1 10:16:29 | 显示全部楼层 |阅读模式
使用STM32H743IIT6和STM32F407IGT6,使用dsp库进行fft、ifft计算,进行耗时对比,使用dwt进行耗时时间统计,结果竟然是STM32H743耗时更长,请问下我测试有什么不对的地方??
STM32H743的dsp库使用的是 arm-cortexM7lfdp_math.lib
STM32F407的dsp库使用的是 arm-cortexM4lf_math.lib

在main函数中进行测试
STM32H743测试代码,主频400M
#define FFTLENGTH        128
        DWT_init();
        arm_rfft_fast_init_f32(&rfft,FFTLENGTH);
       
        while(1)
        {
        DWT_CYCCNT = (u32)0u;
        arm_rfft_fast_f32(&rfft,fftinputbuf,fftoutputbuf,0);
        arm_rfft_fast_f32(&rfft,fftinputbuf,fftoutputbuf,1);
        ulStopTime = DWT_TS_GET();
        ulRunTime = ulStopTime * 0.0025f;                 
        }


STMF407测试代码,主频168M
#define FFTLENGTH        128
        DWT_init();
        arm_rfft_fast_init_f32(&rfft,FFTLENGTH);
       
        while(1)
        {
        DWT_CYCCNT = (u32)0u;
        arm_rfft_fast_f32(&rfft,fftinputbuf,fftoutputbuf,0);
        arm_rfft_fast_f32(&rfft,fftinputbuf,fftoutputbuf,1);
        ulStopTime = DWT_TS_GET();
        ulRunTime = ulStopTime / 168;                 
        }



回复

使用道具 举报

7

主题

15

回帖

36

积分

新手上路

积分
36
 楼主| 发表于 2021-12-1 10:37:57 | 显示全部楼层
__align(32) float fftinputbuf[FFTLENGTH],fftoutputbuf[FFTLENGTH]; 这是我的运算变量定义
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106959
QQ
发表于 2021-12-1 10:44:10 | 显示全部楼层
首先测试对比条件不对,H7你用的是双精度浮点,然后就是H7在不同DTCM等不同RAM空间是有区别的,还有不同的优化等级,不同的编译器等 。等我忙过这段时间了,给大家发系统测量对比。
回复

使用道具 举报

7

主题

15

回帖

36

积分

新手上路

积分
36
 楼主| 发表于 2021-12-1 11:12:43 | 显示全部楼层
eric2013 发表于 2021-12-1 10:44
首先测试对比条件不对,H7你用的是双精度浮点,然后就是H7在不同DTCM等不同RAM空间是有区别的,还有不同的 ...

那请问,我先在程序中只会用到单精度fft变换,需要把dsp库换成单精度版本,然后把硬件浮点单元改为单精度。现在H743的计算缓存定义到AXISRAM中,这样对比测试条件对吗
回复

使用道具 举报

7

主题

15

回帖

36

积分

新手上路

积分
36
 楼主| 发表于 2021-12-1 11:26:01 | 显示全部楼层
eric2013 发表于 2021-12-1 10:44
首先测试对比条件不对,H7你用的是双精度浮点,然后就是H7在不同DTCM等不同RAM空间是有区别的,还有不同的 ...

我现在使用了单精度的dsp库,硬件FPU也设置为单精度得了,把运算变量定义到不同的RAM区确实会影响运算速度,现在测试定义到DTCM中耗时最短,但是还是比STM32F407耗时长
不知道哪里搞错了,H743的运算能力绝对要比F407的强啊,怎么耗时还长呢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106959
QQ
发表于 2021-12-1 12:41:47 | 显示全部楼层
loonger 发表于 2021-12-1 11:26
我现在使用了单精度的dsp库,硬件FPU也设置为单精度得了,把运算变量定义到不同的RAM区确实会影响运算速 ...

测试有问题是肯定的,待我腾出时间了,发布系统测评报告。
回复

使用道具 举报

7

主题

15

回帖

36

积分

新手上路

积分
36
 楼主| 发表于 2021-12-1 16:51:45 | 显示全部楼层
eric2013 发表于 2021-12-1 12:41
测试有问题是肯定的,待我腾出时间了,发布系统测评报告。

现在使用Cache是能够实现加速了,H743耗时能够达到F407的 1/3
但是单独使用DTCM和ITCM不行,耗时比F407长
测试过程中使用相同的DSP库和相同的硬件FPU配置
回复

使用道具 举报

7

主题

15

回帖

36

积分

新手上路

积分
36
 楼主| 发表于 2021-12-2 13:24:14 | 显示全部楼层
SCB_EnableICache();       
SCB_EnableDCache();
需要开启Cache,然后将计算缓存定义到DTCM,就可以实现程序加速了。使用MPU将DTCM定义成noncacheable类型与cacheable,运算耗时不变。Cache对DTCM不起加速作用,总线访问频率均为400MHz。
难道上面两个函数是使能400Mhz的总线???
使用TCM也得执行以上两个函数??
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-12 02:22 , Processed in 0.170741 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表