#include #include #include #include #include #include #define RUNCMD "gcc -c -o /tmp/out0.o /src/src0.c" #define WARMUP 5 volatile sig_atomic_t got_alarm; static void sigalrm_handler(int signo) { got_alarm = 1; } int main(int argc, char **argv) { long i; int n; if (argc != 2) { errx(1, "need time limit in seconds"); } n = atoi(argv[1]); if (n < 1) { errx(1, "bad arg"); } signal(SIGALRM, sigalrm_handler); if (!getenv("CCBENCH_SKIP_WARMUP")) { alarm(WARMUP); for (i = 0; !got_alarm; i++) { system(RUNCMD); } printf("warmup: %ld ops (%ld ops/s)\n", i, i / WARMUP); got_alarm = 0; } alarm(n); for (i = 0; !got_alarm; i++) { system(RUNCMD); } printf("bench: %ld ops (%ld ops/s)\n", i, i / n); }