Skip to content
Snippets Groups Projects
benchmark.cu 1.97 KiB
Newer Older
  • Learn to ignore specific revisions
  • Xuan Thang Nguyen's avatar
    Xuan Thang Nguyen committed
    #include <iostream>
    #include <numeric>
    
    Xuan Thang Nguyen's avatar
    Xuan Thang Nguyen committed
    #include <iomanip>
    
    Xuan Thang Nguyen's avatar
    Xuan Thang Nguyen committed
    
    #include <TNL/Containers/Array.h>
    
    
    Xuan Thang Nguyen's avatar
    Xuan Thang Nguyen committed
    #include "../../src/bitonicSort/bitonicSort.h"
    #include "../../src/util/timer.h"
    
    Xuan Thang Nguyen's avatar
    Xuan Thang Nguyen committed
    
    
    using namespace TNL;
    using namespace TNL::Containers;
    
    using namespace std;
    
    
    typedef Devices::Cuda Device;
    
    
    Xuan Thang Nguyen's avatar
    Xuan Thang Nguyen committed
    int main()
    
    Xuan Thang Nguyen's avatar
    Xuan Thang Nguyen committed
    {
    
    Xuan Thang Nguyen's avatar
    Xuan Thang Nguyen committed
        for(int pow = 10; pow <= 20; pow++)
    
    Xuan Thang Nguyen's avatar
    Xuan Thang Nguyen committed
        {
    
    Xuan Thang Nguyen's avatar
    Xuan Thang Nguyen committed
            int size =(1<< pow);
    
    Xuan Thang Nguyen's avatar
    Xuan Thang Nguyen committed
    
    
    Xuan Thang Nguyen's avatar
    Xuan Thang Nguyen committed
            vector<int> vec(size);
            iota(vec.begin(), vec.end(), 0);
    
            Array<int, Device> arr;
            vector<double> resAcc;
    
    Xuan Thang Nguyen's avatar
    Xuan Thang Nguyen committed
    
    
    Xuan Thang Nguyen's avatar
    Xuan Thang Nguyen committed
            //sorted sequence
    
    Xuan Thang Nguyen's avatar
    Xuan Thang Nguyen committed
            {
    
    Xuan Thang Nguyen's avatar
    Xuan Thang Nguyen committed
                arr = vec;
                auto view = arr.getView();
    
    Xuan Thang Nguyen's avatar
    Xuan Thang Nguyen committed
                    TIMER t([&](double res){resAcc.push_back(res);});
    
                    bitonicSort(view);
                }
    
    Xuan Thang Nguyen's avatar
    Xuan Thang Nguyen committed
            //almost sorted sequence
            {
                for(int i = 0; i < 3; i++)
                {
    
                    int s = rand() % (size - 3);
    
    Xuan Thang Nguyen's avatar
    Xuan Thang Nguyen committed
                    std::swap(vec[s], vec[s + 1]);
                }
    
    Xuan Thang Nguyen's avatar
    Xuan Thang Nguyen committed
    
    
    Xuan Thang Nguyen's avatar
    Xuan Thang Nguyen committed
                arr = vec;
                auto view = arr.getView();
    
    Xuan Thang Nguyen's avatar
    Xuan Thang Nguyen committed
    
    
    Xuan Thang Nguyen's avatar
    Xuan Thang Nguyen committed
                {
                    TIMER t([&](double res){resAcc.push_back(res);});
                    bitonicSort(view);
                }
            }
    
            //decreasing sequence
    
    Xuan Thang Nguyen's avatar
    Xuan Thang Nguyen committed
            {
    
    Xuan Thang Nguyen's avatar
    Xuan Thang Nguyen committed
                for(size_t i = 0; i < size; i++)
                    vec[i] = -i;
                    
                arr = vec;
                auto view = arr.getView();
    
                {
                    TIMER t([&](double res){resAcc.push_back(res);});
                    bitonicSort(view);
                }
    
    Xuan Thang Nguyen's avatar
    Xuan Thang Nguyen committed
            }
    
    Xuan Thang Nguyen's avatar
    Xuan Thang Nguyen committed
            
            //random sequence
            {
    
                random_shuffle(vec.begin(), vec.end());
    
    Xuan Thang Nguyen's avatar
    Xuan Thang Nguyen committed
    
    
    Xuan Thang Nguyen's avatar
    Xuan Thang Nguyen committed
                arr = vec;
                auto view = arr.getView();
    
    Xuan Thang Nguyen's avatar
    Xuan Thang Nguyen committed
                {
                    TIMER t([&](double res){resAcc.push_back(res);});
                    bitonicSort(view);
                }
            }
    
    Xuan Thang Nguyen's avatar
    Xuan Thang Nguyen committed
    
    
    Xuan Thang Nguyen's avatar
    Xuan Thang Nguyen committed
    
            cout << "2^" << pow << " = ";
            cout << fixed;
            cout << setprecision(3);
            cout << (accumulate(resAcc.begin(), resAcc.end(), 0.0) / resAcc.size()) << " ms" << endl;
        }
    
    Xuan Thang Nguyen's avatar
    Xuan Thang Nguyen committed
    
        return 0;
    }