null性能分析性能分析议程议程代码和数据的大小
ARMulator 周期计算
ARMulator 实时仿真
其他 ARMulator 的问
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
编译器的优化级别编译器的优化级别C/C++ 编译器的优化级别是可以选择的.
-O0 (debug版的默认值, -g)
除了一些简单的代码转换之外,关闭了大部分的优化
有最好的调试信息,是没有优化的代码.
-O1
大部分的优化.
带有满意的调试信息,同时有好的代码密度.
-O2 (默认)
全部优化.
有限的调试信息,但有最好的代码密度.
代码密度和执行速度的平衡可以使用选项 -Ospace (默认) 或 –Otime来选择.
利用 -g 选项来包括源代码调试信息.应用代码和数据的大小应用代码和数据的大小armlink 提供两个可选择项来提供相关的信息:
-info sizes (所有目标的大小)
-info totals (总体大小) Code RO Data RW Data ZI Data Debug
4220 60 4 10240 6824 Object Totals
26056 728 0 272 10000 Library Totals
===================================================================
Code RO Data RW Data ZI Data Debug
30276 788 4 10512 16824 Grand Totals
===================================================================
Total RO Size(Code + RO Data) 31064 ( 30.34kB)
Total RW Size(RW Data + ZI Data) 10516 ( 10.27kB)
Total ROM Size(Code + RO Data + RW Data) 31068 ( 30.34kB)
Read Only(只读)Zero Initialized
(零初始化)Read Write
(读写)RAMROM其他大小的考虑其他大小的考虑连接器的输出表明了应用最小的ROM和RAM的需求.
栈和堆需要额外的RAM空间.
把栈放在零等待状态-32 位的片上内存将比在8位或16位上的片外内存性能更高.
你也可以把代码从ROM里拷贝到RAM里运行,这样将增加RAM空间.
ELF文件的代码/数据的大小可以使用以下选项得到:
fromelf -z.
库文件的代码/数据的大小可以使用以下选项得到:
armar -sizes.练习 1练习 1在这个练习部分,我们将看到,C编译器的不同优化级别对于一些简单的应用代码的影响.
(the Dhrystone 2.1 benchmark)
这些信息是连接时用-info totals 选项时得到的.
议程议程 代码和数据大小
ARMulator 周期计算
ARMulator 实时仿真
其他 ARMulator 问题周期计算 (1)周期计算 (1)ARMulator 可以通过执行应用程序来计算周期.
可以产生Sequential, Non-sequential, Coprocessor 等周期信息.
可以使用调试器来显示:
print $statistics (armsd / ADW / ADU / AXD), 或者ViewDebugger Internals (ADW / ADU / AXD)
对消逝的(增加的)周期计算的输出:
ViewDebugger Internals 或者 print $statistics_inc_w (ADW/ ADU), 或者 ViewDebugger InternalsAdd New Reference Point (AXD)
你可以使用这些信息来分析子程序的调用问题.周期计算 (2)周期计算 (2)例子输出 (ARM7TDMI) 例子输出 (ARM940T) Reference
Point(s)Number of
instructionsCore CyclesNon-Seq
CyclesInternal
CyclesCopro
CyclesTotal
CyclesSeq
Cycles练习部分 2练习部分 2这一部分里,我们可以看到由ARMulator产生的周期信息.
我们将比较两种不同的内存拷贝的性能,一种使用LDR/STR指令,令一种使用LDM/STM(IA) 指令.议程议程 代码和数据大小
ARMulator 周期计算
ARMulator 实时仿真
其它的 ARMulator 问题
实时仿真实时仿真为了得到时间统计表, ARMulator 需要以下信息:
处理器的类型, 例如 ARM7TDMI
内核的时钟频率
与处理器连接的内存的信息 (地址,宽度.速度)
指定时钟频率:
对于 armsd, 利用命令行选项 ‘-clock’, 例如 armsd -clock 25MHz prog.axf
对于AXD / ADW / ADU, 选择 OptionsConfigure Debugger, 接着 配置ARMulate 目标环境速度 (in MHz).ARMulator 配置ARMulator 配置可以通过调试器 (Options Configure Debugger)来实现简单的配置
配置文件里的高级配置
armulate.dsc
“固定的” 核的类型和功能
例如. TCM/Cache 大小
default.ami
全局核配置信息
例如. MCCFG 控制时钟设置,页表使用等.
peripherals.ami
外部的配置
例如. MMU/MPU 配置, semihosting 默认值, 堆栈基地址等.内存配置 (1)内存配置 (1)如果没有指定映象文件:
ARMulator 将利用4Gb, 32-bit, 零等待状态, 读/写 内存映象.
为了指定一个‘实际’的系统内存映象,可以使用一个映象文件.00000000 00020000 CODE 2 R 150/100 150/100
10000000 00008000 DATA 4 RW 100/65 100/65内存配置 (2)内存配置 (2)ARMulator仿真了一个基本的内存控制器.
适当加入一些等待状态, 这依赖于内存速度和时钟频率. 启动的旗语说明(在其他事件中)例如:ARM7TDMI, BIU, Big endian, Semihosting, Debug Comms Channel, 25.0MHz, 4GB,
Mapfile, Timer, Profiler, Tube, Millisecond [25000 cycles_per_millisecond],
Pagetables, IntCtrl, Tracer, RDI Codesequences
Memory map:
10000000..10007fff, 32-Bit, wr, wait states: RN=2/1 WN=2/1 RS=1 WS=1 RIS=2/1 WIS=2/1
00000000..0001ffff, 16-Bit, -r, wait states: RN=3/2 WN=Abt RS=2 WS=Abt RIS=3/2 WIS=3/2观察仿真时间观察仿真时间当执行仿真时,调试器一直追踪着流逝的仿真时间.
这可以通过以下方法来观察:
通过应用程序
从汇编语言: 利用semihosting SWI SYS_CLOCK
从C / C++语言 : 利用库函数 clock()
通过调试器
利用调试器内部的变量 $clockt1 = clock();
main_loop();
t2 = clock();
time_taken = t2 - t1;练习部分3练习部分3这一部分主要讨论了ARMulator里的映象文件的使用和检查了是怎样影响代码的性能的.
我们将再次使用Dhrystone 2.1 代码.
议程议程 代码和数据大小
ARMulator 周期计算
ARMulator 实时仿真
其它 ARMulator 的问题带有缓存内核的ARMulation(1)带有缓存内核的ARMulation(1)在没有缓存的内核上,指令和数据的执行时间是“可预见的”
在有缓存的内核上,还有其它的一些因素也会影响指令和数据的执行时间:
指令有没有缓存?
数据地址有没有缓存?
写缓冲器(WB)有没有被用完?
内核是否支持 streaming ?
是否有TLB错过(如果有MMU的话) ?
你可以配置ARMulator来报告缓存,写缓冲器(WB)和TLB信息
详细细节可以参考 “Debug Target Guide” 带有缓存内核的ARMulation(2)带有缓存内核的ARMulation(2)在某些内核上,ARMulator 可能报告零N-cycle(non-seq)
例如:带有AMBA 接口的内核(720T, 940T, 等)
ARMulator 只能显示AMBA周期类型 :
地址 (A)
连续的 (S)
非连续的访问是有一个A-周期,紧接着是一个 S-周期
“合并的 I-S” 周期练习部分 4练习部分 4这一部分将会看到缓存是怎样影响代码的性能的(利用 Dhrystone 例子).参考资料参考资料为了得到更详细的信息,请察看以下资料:
ADS 编译和库文件用户手册
第 2章 : C 和 C++ 编译器
第3章: ARM 编译器参考
ADS Linker and Utilities Guide
第2-6章: ARM 连接定位器
ADS Debug Target Guide
第2章: ARMulator 基本知识
第3章: ARMulator 模式
第4章: ARMulator参考
ADS AXD and armsd Debuggers Guide
第5章: AXD 调试器null