DSP程序开发与优化经验之二:程序运行时间测量方法总结
2014-02-16 17:51
471 查看
如何测试程序在DSP上的运行时间?
1. TI DSP编译环境CCS3.3,在profiler菜单中,选择Enable Clock和view clock,在view
clock窗口中可以看到程序运行的时间/周期(时钟)数。
在view clock窗口中第2行显示的时间就是程序从第1行所在位置到第2行位置的时间,也就是你要测定的时间。
缺点:时间cycle数据不准确,比实际的要大。如果用profiler得到的数据比你的要求好要少的话,那就说明已经达到了要求。
克服方法:(1)多次统计;
(2)测量之前重新使能 Enable Clock和view clock 。
2. 使用clock
测试程序运行时间
#include <time.h>
clock_t start,stop,overhead,t;
start=clock();
stop=clock();
overhead=start-stop;
start=clock();
****************************
中间是要测试的代码
****************************
stop=clock();
t=stop-start-overhead;
在profiler中设置Enable Clock以及时钟周期,完了单步运行后就能看见结果。
3. 利用TSCL和TSCH来测量DSP程序运行时间
#include <c6x.h>
#include <stdio.h>
void main()
{
unsigned long long start;
unsigned long long end;
TSCH=0;//Very important! Enable the registers.
TSCL=0; //Very important! Enable the registers.
start = _itoll (TSCH, TSCL);
//start = TSCL;
...
end = _itoll (TSCH, TSCL);
//end = TSCL;
printf("%d DSP-cycles\n",end-start);
}
DSP开发,测量某个函数或某段代码的cycles消耗是经常要做的事情,常用的profiling和clock()一般在simulation下使用。其实在c64x+ core上有两个计数寄存器TSCL/TSCH,它们与CPU同频,共同表示一个64-bit数,CPU运行一个cycle,该寄存器就加1,因此可以用它们来准确的测量cpu在某个执行段中消耗的cycles。一般我们只会用到TSCL这个寄存器,而TSCH是高32位,除非测试整个工程,一般用不到它。
4. 使用方法:长时间宽范围时钟测定
unsigned long long t1,t2;
t1=_itoll(TSCH,TSCL);
code_wait_test;
t2=_itoll(TSCH,TSCL);
printf(“#cycle=%d”,t2-t1);
短时间(7秒)窄范围时钟测定:
T1=TSCL;
…process code …
T2=TSCL;
Printf(“#cycle=%d”,t2-t1);
5. 采用biosAPI方式
LgUns time1=CLK_gethtime();
…process code …
LgUns time2=CLK_gethtime();
Cpucycles=(time2-time1)*CLK_cpucyclePerhtime;
Prinf(“#cycle=%d”,Cpucycle);
<如果遇到问题,可以技术交流>
<联系方式:QQ 1279682290>
1. TI DSP编译环境CCS3.3,在profiler菜单中,选择Enable Clock和view clock,在view
clock窗口中可以看到程序运行的时间/周期(时钟)数。
在view clock窗口中第2行显示的时间就是程序从第1行所在位置到第2行位置的时间,也就是你要测定的时间。
缺点:时间cycle数据不准确,比实际的要大。如果用profiler得到的数据比你的要求好要少的话,那就说明已经达到了要求。
克服方法:(1)多次统计;
(2)测量之前重新使能 Enable Clock和view clock 。
2. 使用clock
测试程序运行时间
#include <time.h>
clock_t start,stop,overhead,t;
start=clock();
stop=clock();
overhead=start-stop;
start=clock();
****************************
中间是要测试的代码
****************************
stop=clock();
t=stop-start-overhead;
在profiler中设置Enable Clock以及时钟周期,完了单步运行后就能看见结果。
3. 利用TSCL和TSCH来测量DSP程序运行时间
#include <c6x.h>
#include <stdio.h>
void main()
{
unsigned long long start;
unsigned long long end;
TSCH=0;//Very important! Enable the registers.
TSCL=0; //Very important! Enable the registers.
start = _itoll (TSCH, TSCL);
//start = TSCL;
...
end = _itoll (TSCH, TSCL);
//end = TSCL;
printf("%d DSP-cycles\n",end-start);
}
DSP开发,测量某个函数或某段代码的cycles消耗是经常要做的事情,常用的profiling和clock()一般在simulation下使用。其实在c64x+ core上有两个计数寄存器TSCL/TSCH,它们与CPU同频,共同表示一个64-bit数,CPU运行一个cycle,该寄存器就加1,因此可以用它们来准确的测量cpu在某个执行段中消耗的cycles。一般我们只会用到TSCL这个寄存器,而TSCH是高32位,除非测试整个工程,一般用不到它。
4. 使用方法:长时间宽范围时钟测定
unsigned long long t1,t2;
t1=_itoll(TSCH,TSCL);
code_wait_test;
t2=_itoll(TSCH,TSCL);
printf(“#cycle=%d”,t2-t1);
短时间(7秒)窄范围时钟测定:
T1=TSCL;
…process code …
T2=TSCL;
Printf(“#cycle=%d”,t2-t1);
5. 采用biosAPI方式
LgUns time1=CLK_gethtime();
…process code …
LgUns time2=CLK_gethtime();
Cpucycles=(time2-time1)*CLK_cpucyclePerhtime;
Prinf(“#cycle=%d”,Cpucycle);
<如果遇到问题,可以技术交流>
<联系方式:QQ 1279682290>
相关文章推荐
- DSP程序开发与优化经验之二:程序运行时间测量方法总结
- DSP程序开发与优化经验之四:TMS320C64x+ DSP------Using Cache
- DSP程序开发与优化经验之三:C6XX优化经验总结
- DSP程序开发与优化经验之四:浮点仿真转化为定点化DSP程序
- DSP程序开发与优化经验之一:TI多核处理DSP C66XX开发经验
- 前端时间做viewpager嵌套。现在总结了一下性能优化的经验
- DSP学习-----CCS3.3 利用profile对程序的运行时间进行统计
- 网易视频云:游戏开发性能优化经验总结
- 用 JAVA 开发游戏连连看(之六)优化:让程序运行更稳定、更高
- 【Android游戏开发之十】(优化处理)详细剖析Android Traceview效率检视工具,分析程序运行速度!并讲解两种创建SDcard方式!
- 总结使用Unity 3D优化游戏运行性能的经验
- 总结使用Unity 3D优化游戏运行性能的经验
- (转)基于Metronic的Bootstrap开发框架经验总结(6)--对话框及提示框的处理和优化
- 原创经验:微信小程序开发总结
- c#开发-计算一段程序运行的时间
- Atitit.hybrid混合型应用 浏览器插件,控件的实现方式 浏览器运行本地程序的解决方案大的总结---提升用户体验and开发效率..
- 游戏开发性能优化经验总结
- 游戏开发性能优化经验总结
- DSP学习-----CCS3.3 利用profile对程序的运行时间进行统计
- 【Android游戏开发之十】(优化处理)详细剖析Android Traceview效率检视工具,分析程序运行速度!并讲解两种创建SDcard方式!