You are on page 1of 6

程序剖析工具的使用

实验目的:
1. 了解程序的剖析工具(profiler)的基本功能
2. 掌握程序剖析工具的使用方法
3. 掌握如何使用剖析工具优化应用程序

实验原理:运用 CCS 软件下的剖析工具 profiler 分析各段子程序和语句的运行点用时间和


程序进入剖析代码段的次数。

实验步骤:
1, 剖析设置:
1, 把 CCS 设置为软件仿真 simulator 环境.
2, 把 光 盘 中 的 prac5 目 录 下 的 modem 文 件 夹 copy 到 CCS 工 作 目 录 下 的

myprojects 下。去掉只读属性。 (图 1.1)

3, 单击 project 菜单, OPEN 命令,打开工作目录 modem 下的 modem.pjt 文件,


编译链接后,载入 modem.out 文件。单击 profiler 菜单,选择 Start Session 命
令,在对话中 modem_profile 作为剖析会话名,如单击 OK,这样就建立了一
个剖析会话,其中剖析窗口包含以下 4 个选项:Files.Functions,Ranges,Setup.t
每个有含义如下:
Files:以源文件分别列出统计数据
Functions:用于剖析程序中的函数
Ranges:用于剖析一段连续的代码
Setup;在剖析不连续代码时用于设置开始点和结束点

(图 1.2)
2, 剖析函数:
1, 在 剖 析 窗 口 选 择 Functions , 在 CCS 左 边 的 工 和 观 察 窗 口 中 双 击
modemtx.c,找到程序中的代码 53 到 70 行,选择这些代码,把其拖入剖析
窗口,同时把 81-84 代码也拖入窗口,最后行到所下图示的画面。
2, 如果要剖析程序中所有的,可以单击剖析窗口左边的 按钮,单击程序运

行按钮,可以年垤剖析窗口数据在不断的更新,运行一分钟后停止。这时可
以 看 到 剖 析 的 结 果 如 果 1.3 所 示 , , 从 图 中 可 以 看 出 , sinelook() 函 数 和
incl.total 与 excl.total 相等,而 cossinelook()函数的 incl.total 与 excl.total 大,
这是因为 sinelookup()函数没有任何子函数的调用,但是 cosinelook()函数妇
产科调用了 sinelook()函数。

(图 1.3)
3, 剖析范围:
剖析范围是剖析连续的一段代码。它可能是一个内部函数,也可能包含多个函数。
基本步骤如下:
1, 切换到剖析窗口中的 ranges ,用鼠标分别选中 modemtx.c 程序中的 125-128
和 131-134 行 并 把 它 拖 入 剖 析 窗 口 , 然 后 单 机 鼠 标 右 键 profile range-in
modem-session 如图 1.4 所示

(图 1.4)
2, 单击菜单 view 选择 disassembly,打开抒汇编的窗口,在反汇编窗口中单击
鼠标右键,选择 start address,在对话框中输入 c_int00 作为初始地址,单击
OK。如下图。

(图 1.5)
3, 在反汇编窗口中,c_int00 下的前四行拖入剖析窗口。如图.1.6 所示
(图 1.6)
4, 单击菜单 debug,restart 命令,让程序运行。可以年垤剖析窗口中数据在不
断的更新,大约一分钟停止程序运行,这时可以看到如图所示的结果

(图 1.7)
4, 剖析不连续的范围
当需要剖析的一段连续的代码有的部份已经优化的很好了,则要把这些代码从剖
析去掉,形成不连续的剖析范围,这可以通过在代码中设置超始点和结束点来完
成此功能。在剖析程序运行过程中遇到结束点的地主,剖析时钟停止累加,遇到
起始点的时候又开始累加。执行步骤如下。
1, 切换到剖析窗口中的 setup,找到 modemtx.c 中的 shapingfile()函数。
2, 把图中的 for ( i=0;i<SIZE-SHAPING_FILER-SAMPLES_PER-BAUD;I++ )语
句拖入剖析窗口中的 end point 作为结束点,同时可以年垤程序语句前面的结
束标志,再把大括号}拖入窗口中的 start point 作为起始点,同查可以看到
程序语句前有起始点的标志,这样就跳过了对 for 语句的剖析。
3, 单击菜单 debug , Restart ,然后运行程序一段时间后停止,剖析窗口中的
functions 选项中查看剖析的结果,这时的剖析数据中不 for 循环语句消耗的

时钟周期。

(图 1.8)

4, 单击剖析窗口中左下角的 按钮生成报告,该报告是一个文本文件。

(图 1.9)
5, 剖析时钟用设置
1,剖析时钟是程序在剖析状态下,程序连续或单步运行的时钟周期的计数。并随
着的运行不断的累加。剖析时钟可以料被开启也可以被关闭。在剖析过程中,可
以要查看或者修改剖析时钟的计数值,可以选择 profiler_view clock 打开剖析
时钟窗口,窗口中显示了时钟的计数值。

2.根据使用的驱动的不同,计算时钟的周期所用的方法也不同,对于 JTAG 连接
有硬件仿真来说,是用目标 DSP 上的分析功能的计数窗口,而对于软件仿真器
来说,高度器则是用虚拟 的分析功能来收集剖析数据。选择 profiler - clock
setup 打开高度窗口。

(图 2.0)
3.设置完成关闭时钟设置对话框。
六.评估代码性能:
代码的执行性能通过统计 CPU 执行的指令周期来完成,假设 CPU 的主频为
f(HZ),平均每执行一条指令需要 n 个周期。统计某段等量齐观需要用 M 条指令,
并且此段程序在时间 t 秒内完成,则此算法用的时间为 T=M/(f/n). 所需要的
MIPS 为 P=M/t 。 如 果 算 法 用 的 时 间 少 于 限 定 时 间 t 或 者 p 少 于 CPU 的
MIPS(f/n),则表明该算法可行。
7, 实验拓展:
通过分析 FIR 程序来熟练掌握函数的剖析
如前所述打在 CCS 工的作目录下打开 fir.pjt 文件,编译链接后,载入 fir.out 文
件。单击 profiler 菜单,选择 Start Session 命令,在对话中 fir_profile 作为剖析会
话名,如单击 OK,这样就建立了一个剖析会话,如图 2.1 所示

(图 2.1)
在剖析窗口选择 Functions ,在 CCS 左边的工和观察窗口中双击 fir.c,找到程序
中 的 代 码 132-137 行 , 选 择 这 些 代 码 , 把 其 拖 入 剖 析 窗 口 .
(图 2.2)

单击剖析窗口左边的 按钮到下图 2.3,

(图 2.3)
单击程序运可以看到数据在不断更新一分钟后停止得到图 2.4

(图 2.4)
现在看一下剖析不连续的范围选择 115 的}做 end point 120 行的}做 start point
如下图所示

图 2.5

运行程序可以看到 functions 中的数据在不断在更新,此时剖析数据中不 return


循环语句消耗的时钟周期,运行一分钟后停止得到
(图 2.6)

实验总结:通过这个实验我们可以更好的了解程序本身的运行时间和效率,可
以更好的了解和优化程序的结构。

You might also like