How many CPU cycles does an instruction take ?

K

Kevin Klein

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
 
M

Malcolm

Kevin Klein said:
/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().
 
K

Kelsey Bjarnason

[snips]

/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.
 
T

Thomas Matthews

Kevin said:
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
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
 
D

Dan Pop

^^^^^^^^^^
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
 

Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,020
Latest member
GenesisGai

Latest Threads

Top