Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C Programming > How many CPU cycles does an instruction take ?

Reply
Thread Tools

How many CPU cycles does an instruction take ?

 
 
Kevin Klein
Guest
Posts: n/a
 
      04-01-2004
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

 
Reply With Quote
 
 
 
 
Malcolm
Guest
Posts: n/a
 
      04-01-2004

"Kevin Klein" <(E-Mail Removed)> 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().


 
Reply With Quote
 
 
 
 
Kelsey Bjarnason
Guest
Posts: n/a
 
      04-01-2004
[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.


 
Reply With Quote
 
Thomas Matthews
Guest
Posts: n/a
 
      04-02-2004
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

 
Reply With Quote
 
Dan Pop
Guest
Posts: n/a
 
      04-02-2004
In <uNebc.49384$(E-Mail Removed) m> Thomas Matthews <(E-Mail Removed)> 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: http://www.velocityreviews.com/forums/(E-Mail Removed)
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: How include a large array? Edward A. Falk C Programming 1 04-04-2013 08:07 PM
Does typecasting consume cpu cycles Vinod Patel C Programming 11 09-17-2004 06:54 AM
How many CPU cycles does an instruction take ? Kevin Klein C++ 4 04-02-2004 03:32 PM
Re: How many CPU cycles does an instruction take ? Kevin Klein C++ 2 04-02-2004 03:23 AM
Re: How many CPU cycles does an instruction take ? Kevin Klein C Programming 2 04-02-2004 03:23 AM



Advertisments