|
|
@ -0,0 +1,50 @@ |
|
|
|
#include <chrono>
|
|
|
|
#include <iostream>
|
|
|
|
#include <string>
|
|
|
|
#include <functional>
|
|
|
|
using namespace std::chrono_literals; |
|
|
|
|
|
|
|
template<class T> |
|
|
|
void time_type(const size_t loop,T init,T incr ,const std::function<T(T,T)> lambda, std::string name) |
|
|
|
{ |
|
|
|
T p; |
|
|
|
auto begin = std::chrono::high_resolution_clock::now(); |
|
|
|
for(T i=0;i<loop;++i) |
|
|
|
{ |
|
|
|
p=lambda(p,incr); |
|
|
|
p=lambda(p,incr); |
|
|
|
p=lambda(p,incr); |
|
|
|
p=lambda(p,incr); |
|
|
|
p=lambda(p,incr); |
|
|
|
p=lambda(p,incr); |
|
|
|
p=lambda(p,incr); |
|
|
|
p=lambda(p,incr); |
|
|
|
p=lambda(p,incr); |
|
|
|
p=lambda(p,incr); |
|
|
|
} |
|
|
|
auto end = std::chrono::high_resolution_clock::now(); |
|
|
|
std::cout |
|
|
|
<<name |
|
|
|
<<" took " |
|
|
|
<<std::chrono::duration_cast<std::chrono::microseconds>(end-begin).count() |
|
|
|
<<"µs" |
|
|
|
<<std::endl; |
|
|
|
} |
|
|
|
|
|
|
|
int main() |
|
|
|
{ |
|
|
|
time_type<int>(10000,1,1,[](int a,int b)->int {return a+b;}, "int +"); |
|
|
|
time_type<int>(10000,20000,1,[](int a,int b)->int {return a-b;}, "int -"); |
|
|
|
time_type<int>(10000,1,2,[](int a,int b)->int {return a*b;}, "int *"); |
|
|
|
time_type<int>(10000,99999999,2,[](int a,int b)->int {return a/b;}, "int /"); |
|
|
|
|
|
|
|
time_type<float>(10000,1,0.5,[](float a,float b)->float {return a+b;}, "float +"); |
|
|
|
time_type<float>(10000,20000,1.14,[](float a,float b)->float {return a-b;}, "float -"); |
|
|
|
time_type<float>(10000,1,1.25,[](float a,float b)->float {return a*b;}, "float *"); |
|
|
|
time_type<float>(10000,99999999,1.25,[](float a,float b)->float {return a/b;}, "float /"); |
|
|
|
|
|
|
|
time_type<double>(10000,1,0.5,[](double a,double b)->double {return a+b;}, "double +"); |
|
|
|
time_type<double>(10000,20000,1.14,[](double a,double b)->double {return a-b;}, "double -"); |
|
|
|
time_type<double>(10000,1,1.25,[](double a,double b)->double {return a*b;}, "double *"); |
|
|
|
time_type<double>(10000,99999999,1.25,[](double a,double b)->double {return a/b;}, "double /"); |
|
|
|
} |