This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

benchmarking profiling code on C6424 hardware

Other Parts Discussed in Thread: SYSBIOS

-I am using SYSBIOS 6

-DSP is C6424. 

-JTAG Emulator is spectrum digital XDS560v2 STM over 14-pin JTAG.

-Currently on CCS4. Can move to CCS5 if helps. 

I am interested in profiling/benchmarking my whole application code on actual hardware ( NOT simulator ). Is there a way for doing this with or without instrumentation ?

I am not interested in manually putting timers around all my functions so please do not suggest that. 

  • Hi farhad farahani,

    All of SYS/BIOS time benchmarks are done using timing APIs.

    e.g.

    Bench_calib();

    Bench_begin();

    <code to benchmark>

    Bench_end();

    farhad farahani said:
    I am not interested in manually putting timers around all my functions so please do not suggest that. 

    These methods would certainly require you to update your code.  I'm not sure if this is what you are trying to avoid in the above statement or not, but this is how it is done for BIOS.  If you are interested in the same method, I can provide you the details of the above macros so that you could use them in your application.

    Steve

  • OK. Here is the situation: My application code consists of thousands of functions. There are system stuff, audio coding, audio decoding, audio post processing, etc going on and I am sitting at 90% CPU usage. I am interested to figure out which functions are eating the MIPS.  People call this different names : statistical profiling, call graph profiling, etc. I have always done this easily on other platforms like linux/intel, VDK/Sharc or VXworks/ARM etc. Somehow I can not find out how to do this on TI/SYSBIOS. 

    If I put Bench_begin() and Bench_end() around my main() is it gonna tell me how much each function ( using the symbols ) inside my program takes up ? I am guessing not ? Is there a way to automatically instrument all the function entry and exit points and post process every thing ? 

    To clarify, I am looking for a result like this :


    % cumulative self self total
    time seconds seconds calls ms/call ms/call name
    19.48 251.46 251.46 203160 1.24 1.24 Radix2FFT::FFT(double*, double*)
    16.91 469.79 218.33 25395 8.60 19.34 Upmixer::CalculateBand()
    13.00 637.65 167.86 25395 6.61 6.61 PeakLimiter::Process(double**, int, int)
    11.57 787.08 149.43 152370 0.98 2.31 Synthesis::Transform(Complex*, double*)
    6.54 871.47 84.39 1168170 0.07 0.12 BandCalculator::ComputeFrontStats(int, Complex**)
    4.21 925.88 54.41 25395 2.14 2.14 Upmixer::ApplyHSFilters()
    4.15 979.44 53.56 50790 1.05 2.29 Analysis::Transform(double*, Complex*)
    3.79 1028.43 48.99 7009020 0.01 0.01 RSmoothMatrix(double**, double**, double, int, int)
    2.94 1066.40 37.97 1168170 0.03 0.06 BandCalculator::ComputeAllLRStats(int, Complex**)
    2.91 1104.03 37.63 main
  • Farhad,

    I replied to your post on the Code Composer Studio Forum with a suggestion to use System Analyzer + compiler function entry/exit hook. If you decide to use this approach and have further questions you can follow-up on the CCS forum.

    Regards,

    Imtaz.