Hi,
Can clock() be used as a dependable API to measure time taken by CPU to execute a snippet of code? When verified usng times() / clock(), both do not seem to measure the CPU time taken precisely.
Firstly, can the APIs clock()/times() be used to measure the execution time of a function/snippet of code, as given in the example below? Is there a better and dependable alternative? The mechanism is to work on Linux, HP-UX, IBM-AIX and Sun Solaris as we need to measure (&& compare) the performance of a piece of code on all these platforms.
Kindly suggest. Also, please let me know if am missing anything trivial.
bbb@m_001:/tmp/kk1$ ./perf_clock 102400
{clock(): S 0 E 0 D 0.0000000000}
bbb@m_001:/tmp/kk1$ ./perf_clock 204800
{clock(): S 0 E 10000 D 0.0100000000}
bbb@m_001:/tmp/kk1$ cat perf_clock.c
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
void test_clock(char* sbuf, int* len){
clock_t start, end; int i=0;
start = clock();
while(i++ < 500) memset((char*)sbuf,0,*len);
end = clock();
printf("{clock(): S %10lu E %10lu D %15.10f}\n",
start,end,(end-start)/(double) CLOCKS_PER_SEC);
}
int main(int argc,char* argv[])
{
int len=atoi(argv[1]);
char *sbuf=(char*)malloc(len);
test_clock(sbuf,&len);
free(sbuf); return 0;
}
The results seem to say that to memset() a 100 KB chunk, 500 times, there is no time spent. Or does it say that it is not measurable in microseconds?
Actually, it is not memset() but another function[that prepares a huge structure sized around 1MB, mallocs a copy of this structure, does an Oracle DB select and populate these structures with the data from DB] which am trying to measure. Even this shows 0 ticks, and that is what has kept me confused.
Thanks!