硬汉嵌入式论坛

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

[ZLG EasyARM-RT1052] 速度测试问题

[复制链接]

6

主题

14

回帖

32

积分

新手上路

积分
32
发表于 2018-5-22 10:32:33 | 显示全部楼层 |阅读模式
各位大神,
       刚在开发板上测试速度,主频600MHZ,测试程序分别放在片外HyperFLASH和片内ITCM中跑程序,测试的速度差不多,时间为14秒,个人疑惑,片内ITCM与内核速度一致,怎么速度没有提高?求解答。
2.JPG
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107378
QQ
发表于 2018-5-22 10:37:24 | 显示全部楼层
两种情况
1、Cache全部命中了,也就是Cache执行了个这个代码,你可以关闭Cache看看。
2、把你这个测试代码封装成一个函数,然后看下map文件,确定是在ITCM的地址空间没有。
回复

使用道具 举报

39

主题

929

回帖

1051

积分

至尊会员

积分
1051
发表于 2018-5-22 11:38:12 | 显示全部楼层
这个大概率是在cache中执行的
回复

使用道具 举报

7

主题

102

回帖

123

积分

初级会员

积分
123
发表于 2018-5-22 11:40:02 | 显示全部楼层
如果没有运行OS,也开了CACHE,那就肯定全部在cache里面了,32K可不小。
回复

使用道具 举报

5

主题

196

回帖

211

积分

高级会员

积分
211
发表于 2018-5-22 11:45:09 | 显示全部楼层
跑久了程序全都被load到cache里了,关掉I-cache马上现出原形
回复

使用道具 举报

6

主题

14

回帖

32

积分

新手上路

积分
32
 楼主| 发表于 2018-5-22 15:53:54 | 显示全部楼层
eric2013 发表于 2018-5-22 10:37
两种情况
1、Cache全部命中了,也就是Cache执行了个这个代码,你可以关闭Cache看看。
2、把你这个测试代 ...

确实是cache起了作用,我关闭了cache,变量设置放在DTCM中,时间为108秒。差距好大。。
还有一个问题, 就是代码放在ITCM中,变量设置放在片外SDRAM中,打开、关闭cache速度都是30秒。。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107378
QQ
发表于 2018-5-22 16:01:59 | 显示全部楼层
laogan666 发表于 2018-5-22 15:53
确实是cache起了作用,我关闭了cache,变量设置放在DTCM中,时间为108秒。差距好大。。
还有一个问题,  ...

RT当前还不支持32位带宽SDRAM,或者支持DDR。

仅支持16位SDRAM,所以性能稍挫。
回复

使用道具 举报

6

主题

14

回帖

32

积分

新手上路

积分
32
 楼主| 发表于 2018-5-22 16:21:11 | 显示全部楼层
eric2013 发表于 2018-5-22 16:01
RT当前还不支持32位带宽SDRAM,或者支持DDR。

仅支持16位SDRAM,所以性能稍挫。

但是打开、关闭cache速度怎么会一样呢?理论上应该会有差异啊
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107378
QQ
发表于 2018-5-22 16:29:37 | 显示全部楼层
laogan666 发表于 2018-5-22 16:21
但是打开、关闭cache速度怎么会一样呢?理论上应该会有差异啊

这几个变量,直接读到寄存器里面,寄存器操作了,看下反汇编,是不是这样的。

回复

使用道具 举报

5

主题

196

回帖

211

积分

高级会员

积分
211
发表于 2018-5-22 16:31:00 | 显示全部楼层
laogan666 发表于 2018-5-22 16:21
但是打开、关闭cache速度怎么会一样呢?理论上应该会有差异啊

这得看程序怎么写,如果你程序里数据吞吐占用的时间很少(以至于可以忽略不计),自然结果是这样。。
回复

使用道具 举报

6

主题

14

回帖

32

积分

新手上路

积分
32
 楼主| 发表于 2018-5-22 16:49:00 | 显示全部楼层
eric2013 发表于 2018-5-22 16:29
这几个变量,直接读到寄存器里面,寄存器操作了,看下反汇编,是不是这样的。

   110:                 uint32_t  i = 0 , j = 0;
   111:         
0x00002388 2000      MOVS          r0,#0x00
0x0000238A 2100      MOVS          r1,#0x00
   112:                 AudioInData = 0;
   113:         
0x0000238C 2200      MOVS          r2,#0x00
0x0000238E 4B0C      LDR           r3,[pc,#48]  ; @0x000023C0
0x00002390 801A      STRH          r2,[r3,#0x00]
   114:                 for(i=0;i<30000;i++)
   115:                 {
0x00002392 BF00      NOP           
0x00002394 E00F      B             0x000023B6
   116:                                 for(j=0;j<30000;j++)
   117:                                 {
0x00002396 2100      MOVS          r1,#0x00
0x00002398 E008      B             0x000023AC
   118:                                                 AudioInData += 0xA5A5;
   119:                                 }
   120:                 }
0x0000239A 4A09      LDR           r2,[pc,#36]  ; @0x000023C0
0x0000239C 8812      LDRH          r2,[r2,#0x00]
0x0000239E F24A53A5  MOVW          r3,#0xA5A5
0x000023A2 441A      ADD           r2,r2,r3
0x000023A4 B212      SXTH          r2,r2
0x000023A6 4B06      LDR           r3,[pc,#24]  ; @0x000023C0
0x000023A8 801A      STRH          r2,[r3,#0x00]
0x000023AA 1C49      ADDS          r1,r1,#1
0x000023AC F2475230  MOVW          r2,#0x7530
0x000023B0 4291      CMP           r1,r2
0x000023B2 D3F2      BCC           0x0000239A
   114:                 for(i=0;i<30000;i++)
   115:                 {
   116:                                 for(j=0;j<30000;j++)
   117:                                 {
   118:                                                 AudioInData += 0xA5A5;
   119:                                 }
   120:                 }
0x000023B4 1C40      ADDS          r0,r0,#1
0x000023B6 F2475230  MOVW          r2,#0x7530
0x000023BA 4290      CMP           r0,r2
0x000023BC D3EB      BCC           0x00002396
   121: }

这是汇编代码,我将代码放在ITCM,所有变量放在OCRAM中测试,打开cache  14秒,关闭cache 19秒。这个时间有差异。。
回复

使用道具 举报

6

主题

14

回帖

32

积分

新手上路

积分
32
 楼主| 发表于 2018-5-22 16:49:29 | 显示全部楼层
alexyzhov 发表于 2018-5-22 16:31
这得看程序怎么写,如果你程序里数据吞吐占用的时间很少(以至于可以忽略不计),自然结果是这样。。

我将代码放在ITCM,所有变量放在OCRAM中测试,打开cache  14秒,关闭cache 19秒。这个时间有差异。。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107378
QQ
发表于 2018-5-22 18:37:17 | 显示全部楼层
laogan666 发表于 2018-5-22 16:49
110:                 uint32_t  i = 0 , j = 0;
   111:         
0x00002388 2000      MOVS    ...

那就开辟个的大数组在SDRAM,对这个数组做楼主位的操作,这样就容易测试对比了,效果明显,测试代码要写的防止编译器优化。
回复

使用道具 举报

6

主题

14

回帖

32

积分

新手上路

积分
32
 楼主| 发表于 2018-5-22 19:28:55 | 显示全部楼层
eric2013 发表于 2018-5-22 18:37
那就开辟个的大数组在SDRAM,对这个数组做楼主位的操作,这样就容易测试对比了,效果明显,测试代码要写 ...

我开辟的数组为1024,测试打开、关闭cache时间都一样。很是纳闷啊啊。。。。
                for(i=0;i<1000;i++)
                {
                                for(j=0;j<1000;j++)
                                {
                                                for(k = 0;k < 1024;k++)
                                                {
                                                                AudioInData[k] += 0xA5A5;
                                                }
                                }
                }
回复

使用道具 举报

5

主题

196

回帖

211

积分

高级会员

积分
211
发表于 2018-5-22 19:49:38 | 显示全部楼层
volatile
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107378
QQ
发表于 2018-5-22 20:02:29 | 显示全部楼层
laogan666 发表于 2018-5-22 19:28
我开辟的数组为1024,测试打开、关闭cache时间都一样。很是纳闷啊啊。。。。
                for(i=0;i

代码和变量都设置放在片外SDRAM中,打开、关闭cache测试。

Cache对应DTCM和ITCM没有加速作用。他们是同等级的。
回复

使用道具 举报

6

主题

14

回帖

32

积分

新手上路

积分
32
 楼主| 发表于 2018-5-23 14:23:06 | 显示全部楼层
eric2013 发表于 2018-5-22 20:02
代码和变量都设置放在片外SDRAM中,打开、关闭cache测试。

Cache对应DTCM和ITCM没有加速作用。他们是 ...

查看了cache文档(AN12042),通过SEMC0操作的片外SDRAM的cache policy为Cacheable/WT (no WA),是不是可以这样理解,每次写变量的时候都向cache和外部主存储器SDRAM写入一次,造成打开、关闭cache速度无差异。。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107378
QQ
发表于 2018-5-23 14:27:16 | 显示全部楼层
laogan666 发表于 2018-5-23 14:23
查看了cache文档(AN12042),通过SEMC0操作的片外SDRAM的cache policy为Cacheable/WT (no WA),是不是可 ...

你不提醒,我都忘了MPU配置的问题了。

是的,这个WT模式跟没有开Cache一个效果。
回复

使用道具 举报

6

主题

14

回帖

32

积分

新手上路

积分
32
 楼主| 发表于 2018-5-23 14:37:21 | 显示全部楼层
eric2013 发表于 2018-5-23 14:27
你不提醒,我都忘了MPU配置的问题了。

是的,这个WT模式跟没有开Cache一个效果。

在论坛了跟您学习了很多,以后还望多多指教。。。谢谢。。。
回复

使用道具 举报

6

主题

14

回帖

32

积分

新手上路

积分
32
 楼主| 发表于 2018-5-30 14:09:00 | 显示全部楼层
eric2013 发表于 2018-5-23 14:27
你不提醒,我都忘了MPU配置的问题了。

是的,这个WT模式跟没有开Cache一个效果。

你好,今天在学习MPU时遇到一个问题,如下:
修改分散加载文件,程序变量都存放在0x20200000起始的128KB区域内,
设置MPU时我没有配置0x20200000开始的区域,打开MPU并置位PRIVDEFENA。
还是测试以上代码,速度为90秒。
设置MPU时我配置0x20200000起始256KB区域为WBWA,打开MPU并置位PRIVDEFENA。
还是测试以上代码,速度为14秒。
问题:按照手册上说打开MPU并置位PRIVDEFENA时,若相应内存地址未配置,则按默认配置,0x20200000起始的区域默认配置就是WBWA,为什么速度会慢好多?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107378
QQ
发表于 2018-5-30 14:11:00 | 显示全部楼层
laogan666 发表于 2018-5-30 14:09
你好,今天在学习MPU时遇到一个问题,如下:
修改分散加载文件,程序变量都存放在0x20200000起始的128KB ...

我暂时已经不再研究RT了,让其他网友给你看看
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107378
QQ
发表于 2018-5-30 14:11:02 | 显示全部楼层
laogan666 发表于 2018-5-30 14:09
你好,今天在学习MPU时遇到一个问题,如下:
修改分散加载文件,程序变量都存放在0x20200000起始的128KB ...

我暂时已经不再研究RT了,让其他网友给你看看
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-29 01:00 , Processed in 0.294995 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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