新手上路
- 积分
- 25
- 金钱
- 25
- 注册时间
- 2018-3-3
- 在线时间
- 4 小时
|
1金钱
今天用原子的767板子测试了一下运行速度,不太如意,跟写的462DMIPS还是有比较大差距。请各位大神解惑:测试中,做了一个约30万次的循环,汇编中共使用了27个指令(已包含循环本身的指令);总的耗时34ms左右,这算出来的大概只有56%(462DMIPS)左右的性能。分析和疑问如下:
27个指令中,有7个LDR加载指令,可能是加载内存数据时间较长拖慢计算时间,于是做了以下测试:
测试1.对比cache开和不开的差别,发现没差别(就算把指令改成从固定内存中拿出来计算,开和不开还是没差别)
测试2.对比片内SRAM和SDRAM差别,片内SRAM只有3%的性能优势。
测试3.对比片内SRAM和DTCM(程序有所修改,因为DTCM只有128KB),结果是基本没差别。
问题:(上面说没啥差别指的是差别在1%以内)
1.测试1为啥没差别?
2.测试2差别偏少啊。
3.测试3为啥没差别?手册上宣传Cache,TCM的加入,使得f7有明显的性能提升,但用跟不用一个样。
4.从汇编来看,使用了已经是最简单的“加、减、比较、跳转”,乘、除都没有,更没有浮点运算,为啥只能达到462DMIPS的56%这么少?
以下贴出具体的时间:
0x08005A92 E022 B 0x08005ADA
155: for(j=1;j<640;j++)
156: {
0x08005A94 2601 MOVS r6,#0x01
0x08005A96 E01C B 0x08005AD2
157: pt=&image[0]; //1.5ms
0x08005A98 4C66 LDR r4,[pc,#408] ; @0x08005C34
158: pt+=i*640+j-640; //7ms
159:
0x08005A9A EB050085 ADD r0,r5,r5,LSL #2
0x08005A9E EB0610C0 ADD r0,r6,r0,LSL #7
0x08005AA2 F5A07020 SUB r0,r0,#0x280
0x08005AA6 4404 ADD r4,r4,r0
160: k=*(pt-1) + *pt * 2+ *(pt+1); //11ms
161:
0x08005AA8 F8141C01 LDRB r1,[r4,#-0x01]
0x08005AAC 7820 LDRB r0,[r4,#0x00]
0x08005AAE EB010040 ADD r0,r1,r0,LSL #1
0x08005AB2 7861 LDRB r1,[r4,#0x01]
0x08005AB4 1847 ADDS r7,r0,r1
162: pt+=1280;
0x08005AB6 F50464A0 ADD r4,r4,#0x500
163: f=*(pt-1) + *pt * 2 + *(pt+1); //11ms
164:
165:
0x08005ABA F8141C01 LDRB r1,[r4,#-0x01]
0x08005ABE 7820 LDRB r0,[r4,#0x00]
0x08005AC0 EB010040 ADD r0,r1,r0,LSL #1
0x08005AC4 7861 LDRB r1,[r4,#0x01]
0x08005AC6 EB000A01 ADD r10,r0,r1
166: k+=f-k; //1.5ms
167:
188: }
189: }
0x08005ACA EBAA0007 SUB r0,r10,r7
0x08005ACE 4407 ADD r7,r7,r0
0x08005AD0 1C76 ADDS r6,r6,#1
0x08005AD2 F5B67F20 CMP r6,#0x280
0x08005AD6 DBDF BLT 0x08005A98
153: for(i=1;i<480-1;i++)
0x08005AD8 1C6D ADDS r5,r5,#1
0x08005ADA F5B57FEF CMP r5,#0x1DE
0x08005ADE DDD9 BLE 0x08005A94
|
|