Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <time.h>
- timespec elapsed(timespec start, timespec end)
- {
- timespec result;
- if ((end.tv_nsec - start.tv_nsec) < 0) {
- result.tv_sec = end.tv_sec - start.tv_sec - 1;
- result.tv_nsec = 1e9 + end.tv_nsec - start.tv_nsec;
- } else {
- result.tv_sec = end.tv_sec - start.tv_sec;
- result.tv_nsec = end.tv_nsec - start.tv_nsec;
- }
- return result;
- }
- void addTo(timespec* spec1, const timespec& spec2)
- {
- spec1->tv_sec += spec2.tv_sec;
- spec1->tv_nsec += spec2.tv_nsec;
- }
- timespec wrapAndRoundTime()
- {
- double d = 123.5;
- unsigned char c = 0;
- timespec start;
- timespec end;
- clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start);
- for (unsigned i = 0; i < 4e9; ++i) {
- // uncomment ONE of the following only
- // OPTION 1
- c = static_cast<unsigned char>(d+i);
- // OPTION 2
- //c = static_cast<unsigned char>(static_cast<long long>(d+i));
- }
- clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &end);
- return elapsed(start, end);
- }
- int main()
- {
- const int ITERATIONS = 5;
- timespec totalTime = {0, 0};
- for (int j = 0; j < ITERATIONS; ++j) {
- std::cout << "Started iteration " << j + 1 << "..." << std::flush;
- timespec iterationTime = wrapAndRoundTime();
- addTo(&totalTime, iterationTime);
- std::cout << " Took " << (iterationTime.tv_sec * 1e9 + iterationTime.tv_nsec) / 1e6
- << "ms" << std::endl;
- }
- double totalMilliseconds = (totalTime.tv_sec * 1e9 + totalTime.tv_nsec) / 1e6;
- std::cout << "Total time: " << totalMilliseconds << "ms" << std::endl
- << "Average iteration time: " << totalMilliseconds / ITERATIONS << "ms" << std::endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement