#include #include // interval timing functions used to do performance testing of some sorts // these functions used to use gettimeofday which is not the correct way to // do this: search on google gettimeofday clock_gettime // originally written Nov-2007, revised Mar-2009 // compile and link as follows: // gcc elapsed.c -o elapsed -lrt struct timespec diff_timespec(struct timespec start, struct timespec end) { struct timespec result; if (end.tv_nsec < start.tv_nsec){ // peform carry like in normal subtraction // 123456789 result.tv_nsec = 1000000000 + end.tv_nsec - start.tv_nsec; result.tv_sec = end.tv_sec - 1 - start.tv_sec; } else{ result.tv_nsec = end.tv_nsec - start.tv_nsec; result.tv_sec = end.tv_sec - start.tv_sec; } return result; } long long millisec_elapsed(struct timespec diff){ // 123 123456 return ((long long)diff.tv_sec * 1000) + (diff.tv_nsec / 1000000); } long long microsec_elapsed(struct timespec diff){ // 123456 123 return ((long long)diff.tv_sec * 1000000) + (diff.tv_nsec / 1000); } long long nanosec_elapsed(struct timespec diff){ // 123456789 return ((long long)diff.tv_sec * 1000000000) + diff.tv_nsec; } int main(int argc, char** argv) { struct timespec start; struct timespec end; struct timespec diff; int i; clock_gettime(CLOCK_MONOTONIC, &start); for (i = 0 ; i < 1234567; ++i) { fprintf(stderr, "%d\n", i); } clock_gettime(CLOCK_MONOTONIC, &end); diff = diff_timespec(start, end); printf("operations took %lld milliseconds\n", millisec_elapsed(diff)); printf("operations took %lld microseconds\n", microsec_elapsed(diff)); printf("operations took %lld nanoseconds\n", nanosec_elapsed(diff)); return 0; }