速度测试问题
各位大神,刚在开发板上测试速度,主频600MHZ,测试程序分别放在片外HyperFLASH和片内ITCM中跑程序,测试的速度差不多,时间为14秒,个人疑惑,片内ITCM与内核速度一致,怎么速度没有提高?求解答。
两种情况
1、Cache全部命中了,也就是Cache执行了个这个代码,你可以关闭Cache看看。
2、把你这个测试代码封装成一个函数,然后看下map文件,确定是在ITCM的地址空间没有。 这个大概率是在cache中执行的 如果没有运行OS,也开了CACHE,那就肯定全部在cache里面了,32K可不小。 跑久了程序全都被load到cache里了,关掉I-cache马上现出原形 eric2013 发表于 2018-5-22 10:37
两种情况
1、Cache全部命中了,也就是Cache执行了个这个代码,你可以关闭Cache看看。
2、把你这个测试代 ...
确实是cache起了作用,我关闭了cache,变量设置放在DTCM中,时间为108秒。差距好大。。
还有一个问题, 就是代码放在ITCM中,变量设置放在片外SDRAM中,打开、关闭cache速度都是30秒。。 laogan666 发表于 2018-5-22 15:53
确实是cache起了作用,我关闭了cache,变量设置放在DTCM中,时间为108秒。差距好大。。
还有一个问题,...
RT当前还不支持32位带宽SDRAM,或者支持DDR。
仅支持16位SDRAM,所以性能稍挫。 eric2013 发表于 2018-5-22 16:01
RT当前还不支持32位带宽SDRAM,或者支持DDR。
仅支持16位SDRAM,所以性能稍挫。
但是打开、关闭cache速度怎么会一样呢?理论上应该会有差异啊 laogan666 发表于 2018-5-22 16:21
但是打开、关闭cache速度怎么会一样呢?理论上应该会有差异啊
这几个变量,直接读到寄存器里面,寄存器操作了,看下反汇编,是不是这样的。
laogan666 发表于 2018-5-22 16:21
但是打开、关闭cache速度怎么会一样呢?理论上应该会有差异啊
这得看程序怎么写,如果你程序里数据吞吐占用的时间很少(以至于可以忽略不计),自然结果是这样。。 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秒。这个时间有差异。。 alexyzhov 发表于 2018-5-22 16:31
这得看程序怎么写,如果你程序里数据吞吐占用的时间很少(以至于可以忽略不计),自然结果是这样。。
我将代码放在ITCM,所有变量放在OCRAM中测试,打开cache14秒,关闭cache 19秒。这个时间有差异。。 laogan666 发表于 2018-5-22 16:49
110: uint32_ti = 0 , j = 0;
111:
0x00002388 2000 MOVS ...
那就开辟个的大数组在SDRAM,对这个数组做楼主位的操作,这样就容易测试对比了,效果明显,测试代码要写的防止编译器优化。 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;
}
}
} volatile laogan666 发表于 2018-5-22 19:28
我开辟的数组为1024,测试打开、关闭cache时间都一样。很是纳闷啊啊。。。。
for(i=0;i
代码和变量都设置放在片外SDRAM中,打开、关闭cache测试。
Cache对应DTCM和ITCM没有加速作用。他们是同等级的。 eric2013 发表于 2018-5-22 20:02
代码和变量都设置放在片外SDRAM中,打开、关闭cache测试。
Cache对应DTCM和ITCM没有加速作用。他们是 ...
查看了cache文档(AN12042),通过SEMC0操作的片外SDRAM的cache policy为Cacheable/WT (no WA),是不是可以这样理解,每次写变量的时候都向cache和外部主存储器SDRAM写入一次,造成打开、关闭cache速度无差异。。 laogan666 发表于 2018-5-23 14:23
查看了cache文档(AN12042),通过SEMC0操作的片外SDRAM的cache policy为Cacheable/WT (no WA),是不是可 ...
你不提醒,我都忘了MPU配置的问题了。:handshake
是的,这个WT模式跟没有开Cache一个效果。 eric2013 发表于 2018-5-23 14:27
你不提醒,我都忘了MPU配置的问题了。
是的,这个WT模式跟没有开Cache一个效果。
在论坛了跟您学习了很多,以后还望多多指教。。。谢谢。。。 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,为什么速度会慢好多? laogan666 发表于 2018-5-30 14:09
你好,今天在学习MPU时遇到一个问题,如下:
修改分散加载文件,程序变量都存放在0x20200000起始的128KB ...
我暂时已经不再研究RT了,让其他网友给你看看:handshake laogan666 发表于 2018-5-30 14:09
你好,今天在学习MPU时遇到一个问题,如下:
修改分散加载文件,程序变量都存放在0x20200000起始的128KB ...
我暂时已经不再研究RT了,让其他网友给你看看:handshake
页:
[1]