DSP

Ti DSP Cycle Count

2019-07-13 16:06发布

http://hi.baidu.com/myyb/blog/item/e1071dce1878d032b700c8c7.html   TI C64x 可以有两种方法来得到程序的运行 cycle, 一个是Enable clock后调用 clock()( 这个在 VC 下是得到以 ms 为单位的时间,这里得到的是 cycle), 另一个就是 CSL Chip Support Library )提供的 timer 下面给出两种方法的程序段   /**************************************************************/ /*                                                                                                                        */ /*      Auth:wb0330                                                                                              */ /*     Dest: used to measure cycle counts for TI C64x DSP                                    */ /*      Support by: http://hi.baidu.com/videocodec                                                   */ /*     or QQ group: 24960630, 10714050, 11216191                                            */ /*                                                                                                                        */ /**************************************************************/ #include < stdio .h>     #include < time .h> /* need time.h in order to call clock()*/   int main () {         unsigned int start , stop , overhead,cycles ;     /*––––––––––––––––––––––––––*/ /* The following example demonstrates how to include                            */ /* the clock() function in your C code.                                                          */         /*––––––––––––––––––––––– – –*/           start = clock (); /* Calculate overhead of calling clock*/         stop = clock (); /* and subtract this value from The results*/         overhead = stop - start ;         start = clock ();         /* ––––––––––––––––––––––––––*/         /* Call a function here.                                                               */         /* ––––––––––––––––––––––––––*/         stop = clock ();        cycles = stop - start - overhead;         printf ( “cycles: %d   / n ” , cycles );        printf ( "times: %.2f   s with cpu 600MHz, /n" ,(( float ) cycles /( float )600000000)); // clock()   end return 0; }       这里给出CSL_Timer 部分的   /**************************************************************/ /*                                                                                                                        */ /*      Auth:wb0330                                                                                              */ /*     Dest: used to measure cycle counts for TI C64x DSP                                    */ /*      Support by: http://hi.baidu.com/videocodec                                                    */ /*     or QQ group:24960630, 10714050, 11216191                                            */ /*                                                                                                                         */ /**************************************************************/ #include < stdio .h> #include "csl.h" #include "csl_timer.h" int main () {         TIMER_Handle hTimer ;         unsigned int start , stop , overhead diff,cycles;   /*––––––––––––––––––––––––––––––––––*/ /* The following sample code shows how to set up the timer       */ /* and measure cycle counts with Chip Support Library (CSL)    */         /*––––––––––––––––––––––––––––––––––*/         hTimer = TIMER_open (TIMER_DEVANY,0); /* open a timer */         /*––––––––––––––––––––––––––––––––––*/         /* Configure the timer. count corresponds to 8 CPU cycles in C64 */         /*––––––––––––––––––––––––––––––––––*/         /* control period initial value */         TIMER_configArgs ( hTimer , 0x000002C0, 0xFFFFFFFF, 0x00000000);         /* ––––––––––––––––––––––––––––––––––*/         /* Compute the overhead of calling the timer. */         /* ––––––––––––––––––––––––––––––––––*/         start = TIMER_getCount ( hTimer ); /* to remove L1P miss overhead */         start = TIMER_getCount ( hTimer );         stop = TIMER_getCount ( hTimer );         overhead = stop - start ;         start = TIMER_getCount ( hTimer );         /* ––––––––––––––––––––––––––––––––––*/         /* Call a function here.                                        */         /* ––––––––––––––––––––––––––––––––––*/         diff = ( TIMER_getCount ( hTimer ) - start ) - overhead ;         TIMER_close ( hTimer );           cycles = diff*8;         printf ( “cycles %d   / n”, cycles);       printf ( "times: %.2f   s with cpu 600MHz, /n" ,(( float ) cycles /( float )600000000));      // The maximum resolution of the timer is 8 CPU cycles, since the input clock to      // the timer is fixed   to the CPU clock divided by eight      // CSL_timer   end   return 0; }