How to run your code for 2 CPU-seconds
From IridiaWiki
Jump to navigationJump to search
Registering an alarm with SIGALRM allows to stop the execution after the specified amount of seconds (wall-clock time). To stop after a given amount of CPU-seconds you should use SIGPROF instead.
Copy the following example in 'test.c':
#include <signal.h> #include <stdlib.h> #include <stdio.h> #include <sys/time.h> #include <time.h> int run; static void stop(int _) { run = 0; } float do_something() { /* some random computation, this example comes from http://www.cplusplus.com/forum/beginner/1149/ */ unsigned int decP; unsigned int denom=3; float ourPi=4.0f; int addFlop=1; int i = 1; run = 1; while (run) { if (addFlop) { ourPi -= (4.0/denom); addFlop = 0; denom += 2; } else { ourPi += (4.0/denom); addFlop = 1; denom += 2; } i++; } return ourPi; } int main(int argc, char *argv[]) { time_t t = time(NULL); struct itimerval timer; int max_time = 2; /* two seconds */ timer.it_value.tv_sec = max_time; timer.it_value.tv_usec = 0; timer.it_interval.tv_sec = 0; timer.it_interval.tv_usec = 0; signal(SIGPROF, stop); signal(SIGINT, stop); if (setitimer (ITIMER_PROF, &timer, NULL) != 0) { printf("error in setitimer\n"); exit(10); } clock_t t1 = clock(); float res = do_something(); clock_t t2 = clock(); printf("Result is %.12f.\n", res); printf("Simulation lasted %f CPU-seconds.\n", (((double)t2 - t1) / CLOCKS_PER_SEC)); return 0; }
Compilation and test:
$ make test cc test.c -o test $ ./test Result is 3.141596794128. Simulation lasted 2.002495 CPU-seconds.