View difference between Paste ID: qDvLGBfU and 2Bf1mQnx
SHOW: | | - or go back to the newest paste.
1
#include <chrono>
2
#include <Eigen/Dense>
3
4
5
#define START_TIMER(start)  auto start = std::chrono::high_resolution_clock::now();
6
7
#define STOP_TIMER_MILLI( _count_, start)  \
8
    auto _count_ = std::chrono::duration<double,std::milli>(std::chrono::high_resolution_clock::now() - start ).count();
9
10
class CPUTimer{
11
12
public:
13
    using ClockType = std::chrono::high_resolution_clock;
14
15
    inline void start(){
16
        m_start = ClockType::now();
17
    }
18
19
    /** returns elapsed time in nanosecond*/
20
    inline double elapsed(){
21
        return std::chrono::duration<double,std::nano >(ClockType::now()-m_start).count();
22
    }
23
    /** returns elapsed time in second*/
24
    inline double elapsedSec(){
25
        return std::chrono::duration<double,std::ratio<1> >(ClockType::now()-m_start).count();
26
    }
27
    /** returns elapsed time in minutes*/
28
    inline double elapsedMin(){
29
        return std::chrono::duration<double,std::ratio<60> >(ClockType::now()-m_start).count();
30
    }
31
32
    /** returns elapsed time in millisecond*/
33
    inline double elapsedMilliSec(){
34
         return std::chrono::duration<double,std::milli>(ClockType::now()-m_start).count();
35
    }
36
37
private:
38
    std::chrono::time_point<ClockType> m_start;
39
};
40
41
int  main( int  argc, char  ** argv ){
42
43
44
45
    using Idx = Eigen::Array<long long int,3,1>  ;
46
47
    Idx max(4,3,9);
48
    Idx idx(-1,5,10);
49
    Idx t(0,0,0);
50
51
    auto loops = 500000;
52
53
    Idx zero(0,0,0);
54
    srand(5);
55
    START_TIMER(start)
56
    EIGEN_ASM_COMMENT("BEGIN1");
57
    for(auto k=0; k<loops;++k){
58
        idx.setRandom();
59
        t += zero.max(max.min(idx));
60
    }
61
    EIGEN_ASM_COMMENT("END1");
62
63
    STOP_TIMER_MILLI(count,start)
64
    std::cout << "Eigen3: time: " << count << " ms " << t <<  std::endl;
65
66
    t.setZero();
67
    srand(5);
68
    START_TIMER(start2)
69
    EIGEN_ASM_COMMENT("BEGIN2");
70
    for(auto k=0; k<loops;++k){
71
        idx.setRandom();
72
        t(0) += std::max(   std::min( max(0), idx(0)),  0LL   );
73
        t(1) += std::max(   std::min( max(1), idx(1)),  0LL   );
74
        t(2) += std::max(   std::min( max(2), idx(2)),  0LL   );
75
    }
76
    STOP_TIMER_MILLI(count2,start2)
77
    EIGEN_ASM_COMMENT("END2");
78
    std::cout << "Seperate: time: " << count2 << " ms " << t << std::endl;
79
80
}