How many CPU cycles does an instruction take ?

Discussion in 'C Programming' started by Kevin Klein, Apr 1, 2004.

  1. Kevin Klein

    Kevin Klein Guest

    I am talking of C/C++ on unix platform using gcc. So feel free
    to take off any crossposted NG's if others are not offended,
    but I seek generic C/C++ and also unix and gcc specific answers.

    Essentially:

    /1/ How do I time a program in seconds or CPU cycles?
    /2/ How do I use the facilities to increase performance of
    any given program?
    /3/ CPU has many clocks I have heard. There is also a bus
    clock.
    /4/ I looked in a number of books. I found a little on time.h.
    But being humble, I thought I would ask experts as well.

    I have played with the statements like:

    #include <time.h>

    cycles=10000;

    start = clock();
    for (i=0; i<cycles; i++){
    return = slowfunction( arguments );
    }
    end = clock( );

    printf("Start time: %d, Stop time: %d, CLOCKS_PER_SEC: %d\nSeconds for %d calls: %f \n",
    start, end, CLOCKS_PER_SEC, cycles, ((dbl)(end - start)/CLOCKS_PER_SEC) );
    printf("Ticks for %d calls: %f \n", cycles, difftime(end, start) );


    // I am not exactly clear about CLOCKS_PER_SEC, difftime() .
    // I wrote this w/o clear conceptual understanding .
    // But I want clear concept so I know it works before I write it.
    // Using: gcc 2.7.2.3


    Kevin Klein
     
    Kevin Klein, Apr 1, 2004
    #1
    1. Advertising

  2. Kevin Klein

    Malcolm Guest

    "Kevin Klein" <> wrote in message
    >
    > /1/ How do I time a program in seconds or CPU cycles?
    >

    As you've done it. A slow function can be timed in seconds, using time(), a
    fast function in clock ticks using clock().
    >
    > /2/ How do I use the facilities to increase performance of
    > any given program?
    >

    You really need a profiler to tell you where the program is spending its
    time. Then you optimise the bottlenecks. Occasionally timing something will
    tell you whether one version is faster than another, but it won't be the
    main weapon in your armoury.
    >
    > /3/ CPU has many clocks I have heard. There is also a bus
    > clock.
    >

    Things get complicated with modern processors. Early machines would execute
    exactly one instruction per cycle. However now processors are very fast but
    memory reads and writes haven't caught up, also some instructions are
    executed in parallel.
    >
    > /4/ I looked in a number of books. I found a little on time.h.
    > But being humble, I thought I would ask experts as well.
    >
    > I have played with the statements like:
    >
    > #include <time.h>
    >
    > cycles=10000;
    >
    > start = clock();
    > for (i=0; i<cycles; i++){
    > return = slowfunction( arguments );

    This is a syntax error. "return" is a keyword.
    > }
    > end = clock( );
    >
    > printf("Start time: %d, Stop time: %d, CLOCKS_PER_SEC: %d\nSeconds for

    %d calls: %f \n",
    > start, end, CLOCKS_PER_SEC, cycles, ((dbl)(end -

    start)/CLOCKS_PER_SEC) );
    > printf("Ticks for %d calls: %f \n", cycles, difftime(end, start) );
    >
    >

    On your machine clock_t may well be an int, however this isn't guaranteed.
    You need to cast values before you pass them to printf().
     
    Malcolm, Apr 1, 2004
    #2
    1. Advertising

  3. [snips]

    On Thu, 01 Apr 2004 09:55:18 -0500, Kevin Klein wrote:

    > /1/ How do I time a program in seconds or CPU cycles?


    Your best bet is a profiling tool.

    > /2/ How do I use the facilities to increase performance of
    > any given program?


    By figuring out which bits of the program suck up the most time and
    therefore could benefit from optimization.

    > I have played with the statements like:
    >
    > #include <time.h>
    >
    > cycles=10000;
    >
    > start = clock();
    > for (i=0; i<cycles; i++){
    > return = slowfunction( arguments );
    > }
    > end = clock( );
    >
    > printf("Start time: %d, Stop time: %d, CLOCKS_PER_SEC: %d\nSeconds for
    > %d calls: %f \n",
    > start, end, CLOCKS_PER_SEC, cycles, ((dbl)(end -
    > start)/CLOCKS_PER_SEC) );
    > printf("Ticks for %d calls: %f \n", cycles, difftime(end, start) );


    difftime tells you the difference (in seconds) from time2 to time1 (oddly
    enough. You'd think the order would be the other way around, but anyhow...)

    It's a potentially useful metric... but not really good for finding
    hotspots in your code, without a fair bit of work. You really need a
    profiler - something that'll "automatically" watch your program run,
    recording what it's doing, how long it's taking, etc. It should also
    produce a report saying which functions were called the most frequently,
    which ones took the most time, etc.
     
    Kelsey Bjarnason, Apr 1, 2004
    #3
  4. Kevin Klein wrote:

    > I am talking of C/C++ on unix platform using gcc. So feel free
    > to take off any crossposted NG's if others are not offended,
    > but I seek generic C/C++ and also unix and gcc specific answers.
    >
    > Essentially:
    >
    > /1/ How do I time a program in seconds or CPU cycles?

    Off-topic in all newsgroups you posted to.
    Cpu cycles and instruction timing are dependent on the actual
    processor. Unix and gcc run on many processors.


    > /2/ How do I use the facilities to increase performance of
    > any given program?

    Use a profiler.


    > /3/ CPU has many clocks I have heard. There is also a bus
    > clock.

    Some have many clocks some have a few. Some may have a separate
    bus clock others may have one clock to rule them all.
    Again, depends on your processor. For example, the ARM processor
    differs in clock cycles from an Intel, Motorola and Signetics
    processor. Texas Instruments has different processors that
    each have different clock cycles.


    > /4/ I looked in a number of books. I found a little on time.h.
    > But being humble, I thought I would ask experts as well.
    >

    [snip]

    Ask in a newsgroup about your platform.
    You _could_ also try one of the "asm" newsgroups as well as
    news:comp.arch.embedded.

    >
    > Kevin Klein
    >



    --
    Thomas Matthews

    C++ newsgroup welcome message:
    http://www.slack.net/~shiva/welcome.txt
    C++ Faq: http://www.parashift.com/c -faq-lite
    C Faq: http://www.eskimo.com/~scs/c-faq/top.html
    alt.comp.lang.learn.c-c++ faq:
    http://www.raos.demon.uk/acllc-c /faq.html
    Other sites:
    http://www.josuttis.com -- C++ STL Library book
     
    Thomas Matthews, Apr 2, 2004
    #4
  5. Kevin Klein

    Dan Pop Guest

    In <uNebc.49384$> Thomas Matthews <> writes:

    >Kevin Klein wrote:
    >
    >> I am talking of C/C++ on unix platform using gcc. So feel free
    >> to take off any crossposted NG's if others are not offended,
    >> but I seek generic C/C++ and also unix and gcc specific answers.
    >>
    >> Essentially:
    >>
    >> /1/ How do I time a program in seconds or CPU cycles?

    ^^^^^^^^^^
    >Off-topic in all newsgroups you posted to.


    Timing a program in seconds is on topic on all the groups where time(),
    difftime() and clock() are topical, and this includes comp.lang.c,
    comp.lang.c++ and comp.unix.programmer.

    Dan
    --
    Dan Pop
    DESY Zeuthen, RZ group
    Email:
     
    Dan Pop, Apr 2, 2004
    #5
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. -
    Replies:
    7
    Views:
    336
    Kevin McMurtrie
    Mar 22, 2005
  2. Kevin Klein
    Replies:
    4
    Views:
    653
    Dan Pop
    Apr 2, 2004
  3. Kevin Klein
    Replies:
    2
    Views:
    911
    those who know me have no need of my name
    Apr 2, 2004
  4. Kevin Klein

    Re: How many CPU cycles does an instruction take ?

    Kevin Klein, Apr 1, 2004, in forum: C Programming
    Replies:
    2
    Views:
    765
    those who know me have no need of my name
    Apr 2, 2004
  5. Vinod Patel

    Does typecasting consume cpu cycles

    Vinod Patel, Sep 14, 2004, in forum: C Programming
    Replies:
    11
    Views:
    725
    Vinod Patel
    Sep 17, 2004
Loading...

Share This Page