Guest User

Measuring performance of nested for-loops

a guest
Dec 2nd, 2015
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.49 KB | None | 0 0
  1. #include <iostream>
  2. #include <windows.h>
  3.  
  4. typedef long long int64;
  5. typedef unsigned long long uint64;
  6.  
  7. /*
  8.  **********          BEGIN: Windows System Console ANSI color enabler module
  9.  ******************************************************************************
  10. */
  11.  
  12. struct colors_t
  13. {
  14.    HANDLE hStdOut;
  15.    /*
  16.       The HANDLE variable type is a handle to an object and is
  17.       defined as
  18.      
  19.       '#typedef PVOID HANDLE'. PVOID is a standard ordinary
  20.       void pointer and is defined as
  21.      
  22.       '#typedef void *PVOID'
  23.    */
  24.    int initial_colors;
  25.    
  26.    colors_t()  /* The constructor of the object */
  27.    {
  28.       hStdOut        = GetStdHandle(STD_OUTPUT_HANDLE);
  29.       initial_colors = getColors();
  30.    }
  31.    ~colors_t()
  32.    {
  33.       setColors(initial_colors);
  34.    }
  35.    int getColors() const
  36.    {
  37.       CONSOLE_SCREEN_BUFFER_INFO csbi;
  38.       GetConsoleScreenBufferInfo(hStdOut, &csbi);
  39.       return csbi.wAttributes;
  40.    }
  41.    void setColors(int color)
  42.    {
  43.       SetConsoleTextAttribute(hStdOut, color);
  44.    }
  45.    void setFg(int color)
  46.    {
  47.       int current_colors = getColors();
  48.       setColors((color & 0x0F) | (current_colors & 0xF0));
  49.    }
  50.    void setBg(int color)
  51.    {
  52.       int current_colors = getColors();
  53.       setColors(((color & 0x0F) << 4) | (current_colors & 0x0F));
  54.    }
  55.    int getFg() const { return getColors() & 0x0F; }
  56.    int getBg() const { return (getColors() >> 4) & 0x0F; }
  57. };
  58.  
  59. enum
  60. {
  61.    Black, dBlue, dGreen, dCyan, dRed, dMagenta, dYellow, hGray,
  62.    dGray, hBlue, hGreen, hCyan, hRed, hMagenta, hYellow, White
  63. };
  64.  
  65. /*
  66.  **********            END: Windows System Console ANSI color enabler module
  67.  ******************************************************************************
  68. */
  69.  
  70.  
  71. int main(int argc, char **argv)
  72. {
  73.    int64 k1(0), k2(0);
  74.    int64 dataSize1(5000000);
  75.    int64 dataSize2(10000000);
  76.    int64 numSubOperations1(10);
  77.    int64 numSubOperations2(5);
  78.    colors_t colors;
  79.     LARGE_INTEGER startTime, lapTime, countFreq;
  80.     QueryPerformanceFrequency((LARGE_INTEGER *) &countFreq);
  81.    
  82.    QueryPerformanceCounter((LARGE_INTEGER *) &startTime);
  83.    for(int64 i=0;i < max(dataSize1, dataSize2); ++i)
  84.    {
  85.       if(i<dataSize1) k1 += 5;
  86.       if(i<dataSize2) k2 += 3;
  87.    }
  88.    QueryPerformanceCounter((LARGE_INTEGER *) &lapTime);
  89.    colors.setFg(hGray);std::cout << "Nested for-loop took :";
  90.    colors.setFg(dCyan);std::cout << 1000 * (lapTime.QuadPart - startTime.QuadPart) /
  91.       static_cast<double>(countFreq.QuadPart);
  92.    colors.setFg(White);std::cout << " ms";
  93.    colors.setFg(hGray);std::cout << "." << std::endl;
  94.    
  95.    QueryPerformanceCounter((LARGE_INTEGER *) &startTime);
  96.    for(int64 i=0;i < dataSize2; ++i)
  97.    {
  98.       if(i<dataSize1) k1 += 5;
  99.       k2 += 3;
  100.    }
  101.    QueryPerformanceCounter((LARGE_INTEGER *) &lapTime);
  102.    colors.setFg(hGray);std::cout << "Nested and optimized for-loop took :";
  103.    colors.setFg(dCyan);std::cout << 1000 * (lapTime.QuadPart - startTime.QuadPart) /
  104.       static_cast<double>(countFreq.QuadPart);
  105.    colors.setFg(White); std::cout << " ms";
  106.    colors.setFg(hGray);std::cout << "." << std::endl;
  107.    
  108.    QueryPerformanceCounter((LARGE_INTEGER *) &startTime);
  109.    for(int64 i=0;i < dataSize1; ++i)
  110.       k1 += 5;
  111.    for(int64 i=0;i < dataSize2; ++i)
  112.       k2 += 3;
  113.    QueryPerformanceCounter((LARGE_INTEGER *) &lapTime);
  114.    colors.setFg(hGray);std::cout << "Standard dual for-loop took :";
  115.    colors.setFg(dCyan);std::cout << 1000 * (lapTime.QuadPart - startTime.QuadPart) /
  116.       static_cast<double>(countFreq.QuadPart);
  117.    colors.setFg(White); std::cout << " ms";
  118.    colors.setFg(hGray);std::cout << "." << std::endl;
  119.  
  120.    QueryPerformanceCounter((LARGE_INTEGER *) &startTime);
  121.    for(int64 i=0;i < max(dataSize1, dataSize2); ++i)
  122.    {
  123.       if(i<dataSize1) for(int j=0; j<numSubOperations1; ++j) k1 += 7 + rand();
  124.       if(i<dataSize2) for(int j=0; j<numSubOperations2; ++j) k2 += 3 + rand();
  125.    }
  126.    QueryPerformanceCounter((LARGE_INTEGER *) &lapTime);
  127.    colors.setFg(hGray);std::cout << "Complex nested for-loop took :";
  128.    colors.setFg(dCyan);std::cout << 1000 * (lapTime.QuadPart - startTime.QuadPart) /
  129.       static_cast<double>(countFreq.QuadPart);
  130.    colors.setFg(White);std::cout << " ms";
  131.    colors.setFg(hGray);std::cout << "." << std::endl;
  132.    
  133.    QueryPerformanceCounter((LARGE_INTEGER *) &startTime);
  134.    for(int64 i=0;i < dataSize2; ++i)
  135.    {
  136.       if(i<dataSize1) for(int j=0; j<numSubOperations1; ++j) k1 += 7 + rand();
  137.       for(int j=0; j<numSubOperations2; ++j) k2 += 3 + rand();
  138.    }
  139.    QueryPerformanceCounter((LARGE_INTEGER *) &lapTime);
  140.    colors.setFg(hGray);std::cout << "Complex nested and optimized for-loop took :";
  141.    colors.setFg(dCyan);std::cout << 1000 * (lapTime.QuadPart - startTime.QuadPart) /
  142.       static_cast<double>(countFreq.QuadPart);
  143.    colors.setFg(White); std::cout << " ms";
  144.    colors.setFg(hGray);std::cout << "." << std::endl;
  145.    
  146.    QueryPerformanceCounter((LARGE_INTEGER *) &startTime);
  147.    for(int64 i=0;i < dataSize1; ++i)
  148.       for(int j=0; j<numSubOperations1; ++j) k1 += 7 + rand();
  149.    for(int64 i=0;i < dataSize2; ++i)
  150.       for(int j=0; j<numSubOperations2; ++j) k2 += 3 + rand();
  151.    QueryPerformanceCounter((LARGE_INTEGER *) &lapTime);
  152.    colors.setFg(hGray);std::cout << "Complex standard dual for-loop took :";
  153.    colors.setFg(dCyan);std::cout << 1000 * (lapTime.QuadPart - startTime.QuadPart) /
  154.       static_cast<double>(countFreq.QuadPart);
  155.    colors.setFg(White); std::cout << " ms";
  156.    colors.setFg(hGray);std::cout << "." << std::endl;
  157. }
Advertisement
Add Comment
Please, Sign In to add comment