Advertisement
Guest User

static casts performance test

a guest
Jul 22nd, 2010
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.72 KB | None | 0 0
  1. #include <iostream>
  2. #include <time.h>
  3.  
  4. timespec elapsed(timespec start, timespec end)
  5. {
  6.    timespec result;
  7.    if ((end.tv_nsec - start.tv_nsec) < 0) {
  8.        result.tv_sec = end.tv_sec - start.tv_sec - 1;
  9.        result.tv_nsec = 1e9 + end.tv_nsec - start.tv_nsec;
  10.    } else {
  11.        result.tv_sec = end.tv_sec - start.tv_sec;
  12.        result.tv_nsec = end.tv_nsec - start.tv_nsec;
  13.    }
  14.    return result;
  15. }
  16.  
  17. void addTo(timespec* spec1, const timespec& spec2)
  18. {
  19.    spec1->tv_sec += spec2.tv_sec;
  20.    spec1->tv_nsec += spec2.tv_nsec;
  21. }
  22.  
  23. timespec wrapAndRoundTime()
  24. {
  25.    double d = 123.5;
  26.    unsigned char c = 0;
  27.    timespec start;
  28.    timespec end;
  29.    clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start);
  30.    for (unsigned i = 0; i < 4e9; ++i) {
  31.        // uncomment ONE of the following only
  32.        // OPTION 1
  33.        c = static_cast<unsigned char>(d+i);
  34.        // OPTION 2
  35.        //c = static_cast<unsigned char>(static_cast<long long>(d+i));
  36.    }
  37.    clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &end);
  38.    return elapsed(start, end);
  39. }
  40.  
  41. int main()
  42. {
  43.    const int ITERATIONS = 5;
  44.    timespec totalTime = {0, 0};
  45.    for (int j = 0; j < ITERATIONS; ++j) {
  46.        std::cout << "Started iteration " << j + 1 << "..." << std::flush;
  47.        timespec iterationTime = wrapAndRoundTime();
  48.        addTo(&totalTime, iterationTime);
  49.        std::cout << " Took " << (iterationTime.tv_sec * 1e9 + iterationTime.tv_nsec) / 1e6
  50.                  << "ms" << std::endl;
  51.    }
  52.    double totalMilliseconds = (totalTime.tv_sec * 1e9 + totalTime.tv_nsec) / 1e6;
  53.    std::cout << "Total time: " << totalMilliseconds << "ms" << std::endl
  54.              << "Average iteration time: " << totalMilliseconds / ITERATIONS << "ms" << std::endl;
  55.    return 0;
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement