laogan666 发表于 2018-5-22 10:32:33

速度测试问题

各位大神,
       刚在开发板上测试速度,主频600MHZ,测试程序分别放在片外HyperFLASH和片内ITCM中跑程序,测试的速度差不多,时间为14秒,个人疑惑,片内ITCM与内核速度一致,怎么速度没有提高?求解答。

eric2013 发表于 2018-5-22 10:37:24

两种情况
1、Cache全部命中了,也就是Cache执行了个这个代码,你可以关闭Cache看看。
2、把你这个测试代码封装成一个函数,然后看下map文件,确定是在ITCM的地址空间没有。

ghslfgkkl88 发表于 2018-5-22 11:38:12

这个大概率是在cache中执行的

eddy0317 发表于 2018-5-22 11:40:02

如果没有运行OS,也开了CACHE,那就肯定全部在cache里面了,32K可不小。

alexyzhov 发表于 2018-5-22 11:45:09

跑久了程序全都被load到cache里了,关掉I-cache马上现出原形

laogan666 发表于 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秒。。

eric2013 发表于 2018-5-22 16:01:59

laogan666 发表于 2018-5-22 15:53
确实是cache起了作用,我关闭了cache,变量设置放在DTCM中,时间为108秒。差距好大。。
还有一个问题,...

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

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

laogan666 发表于 2018-5-22 16:21:11

eric2013 发表于 2018-5-22 16:01
RT当前还不支持32位带宽SDRAM,或者支持DDR。

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

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

eric2013 发表于 2018-5-22 16:29:37

laogan666 发表于 2018-5-22 16:21
但是打开、关闭cache速度怎么会一样呢?理论上应该会有差异啊

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

alexyzhov 发表于 2018-5-22 16:31:00

laogan666 发表于 2018-5-22 16:21
但是打开、关闭cache速度怎么会一样呢?理论上应该会有差异啊

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

laogan666 发表于 2018-5-22 16:49:00

eric2013 发表于 2018-5-22 16:29
这几个变量,直接读到寄存器里面,寄存器操作了,看下反汇编,是不是这样的。

   110:               uint32_ti = 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,; @0x000023C0
0x00002390 801A      STRH          r2,
   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,; @0x000023C0
0x0000239C 8812      LDRH          r2,
0x0000239E F24A53A5MOVW          r3,#0xA5A5
0x000023A2 441A      ADD         r2,r2,r3
0x000023A4 B212      SXTH          r2,r2
0x000023A6 4B06      LDR         r3,; @0x000023C0
0x000023A8 801A      STRH          r2,
0x000023AA 1C49      ADDS          r1,r1,#1
0x000023AC F2475230MOVW          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 F2475230MOVW          r2,#0x7530
0x000023BA 4290      CMP         r0,r2
0x000023BC D3EB      BCC         0x00002396
   121: }

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

laogan666 发表于 2018-5-22 16:49:29

alexyzhov 发表于 2018-5-22 16:31
这得看程序怎么写,如果你程序里数据吞吐占用的时间很少(以至于可以忽略不计),自然结果是这样。。

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

eric2013 发表于 2018-5-22 18:37:17

laogan666 发表于 2018-5-22 16:49
110:               uint32_ti = 0 , j = 0;
   111:         
0x00002388 2000      MOVS    ...

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

laogan666 发表于 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 += 0xA5A5;
                                                }
                                }
                }

alexyzhov 发表于 2018-5-22 19:49:38

volatile

eric2013 发表于 2018-5-22 20:02:29

laogan666 发表于 2018-5-22 19:28
我开辟的数组为1024,测试打开、关闭cache时间都一样。很是纳闷啊啊。。。。
                for(i=0;i

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

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

laogan666 发表于 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速度无差异。。

eric2013 发表于 2018-5-23 14:27:16

laogan666 发表于 2018-5-23 14:23
查看了cache文档(AN12042),通过SEMC0操作的片外SDRAM的cache policy为Cacheable/WT (no WA),是不是可 ...
你不提醒,我都忘了MPU配置的问题了。:handshake

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

laogan666 发表于 2018-5-23 14:37:21

eric2013 发表于 2018-5-23 14:27
你不提醒,我都忘了MPU配置的问题了。

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

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

laogan666 发表于 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,为什么速度会慢好多?

eric2013 发表于 2018-5-30 14:11:00

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

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

eric2013 发表于 2018-5-30 14:11:02

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

我暂时已经不再研究RT了,让其他网友给你看看:handshake
页: [1]
查看完整版本: 速度测试问题