7#ifndef __MICRO_BENCHMARK_RDTSC_IMPL_H__
8#define __MICRO_BENCHMARK_RDTSC_IMPL_H__
21template<
typename _Callable,
typename... _Args>
22void micro_benchmarkRdtsc(
double & ellapsedTimeCy,
double & ellapsedTimeErrorCy,
size_t nbTestPerf,
size_t nbCallPerTest,
23 _Callable&& __f, _Args&&... __args)
26 for(
size_t i(0lu); i < nbTestPerf; ++i){
28 size_t beginTime = phoenix_rdtsc();
29 for(
size_t j(0lu); j < nbCallPerTest; ++j){
33 size_t elapsedTime(phoenix_rdtsc() - beginTime);
34 double fullCy(elapsedTime/((
double)nbCallPerTest));
35 vecTimeCy.push_back(fullCy);
39 size_t nbValueUsed(vecTimeCy.size()*0.7 + 1lu);
40 if(nbValueUsed > vecTimeCy.size()){
41 nbValueUsed = vecTimeCy.size();
57template<
typename _Callable,
typename... _Args>
59 double & timePerElement,
double & timeErrorPerElement,
size_t nbTestPerf,
size_t nbCallPerTest,
size_t nbElement,
60 _Callable&& __f, _Args&&... __args)
62 micro_benchmarkRdtsc(ellapsedTimeCy, ellapsedTimeErrorCy, nbTestPerf, nbCallPerTest, __f, __args...);
63 timePerElement = ellapsedTimeCy/((double)nbElement);
64 timeErrorPerElement = ellapsedTimeErrorCy/((double)nbElement);
75template<
typename _Callable,
typename... _Args>
76void micro_benchmarkRdtscPrint(
const std::string & testName,
size_t nbTestPerf,
size_t nbCallPerTest,
size_t nbElement, _Callable&& __f, _Args&&... __args){
77 double ellapsedTimeCy(0.0), ellapsedTimeErrorCy(0.0), timePerElement(0.0), timeErrorPerElement(0.0);
78 micro_benchmarkRdtsc(ellapsedTimeCy, ellapsedTimeErrorCy, timePerElement, timeErrorPerElement, nbTestPerf, nbCallPerTest, nbElement, __f, __args...);
80 std::cout << testName <<
" : nbElement = "<<nbElement<<
", timePerElement = " << timePerElement <<
" cy/el ± "<<timeErrorPerElement<<
", elapsedTime = " << ellapsedTimeCy <<
" cy ± "<<ellapsedTimeErrorCy << std::endl;
81 std::cerr << nbElement <<
"\t" << timePerElement <<
"\t" << ellapsedTimeCy <<
"\t" << timeErrorPerElement <<
"\t" << ellapsedTimeErrorCy << std::endl;
void micro_benchmarkVecToMap(MapOrderedTime &mapOrderTime, const VecEllapsedTime &vecTime)
Fill the map of ordered time with the vector.
void micro_benchmarkComputeTime(double &ellapsedTimeNs, double &ellapsedTimeErrorNs, const MapOrderedTime &mapOrderTime, size_t nbValueToBeUsed)
Compute the total computing time and associated error with the given data.
std::map< double, size_t > MapOrderedTime
Map of the ordered ellapsed time.
std::vector< double > VecEllapsedTime
Vector of ellapsed time measurement.
void micro_benchmarkRdtsc(double &ellapsedTimeCy, double &ellapsedTimeErrorCy, size_t nbTestPerf, size_t nbCallPerTest, _Callable &&__f, _Args &&... __args)
Do the micro benchmarking of a given function and gives performance results in cy.
void micro_benchmarkRdtscPrint(const std::string &testName, size_t nbTestPerf, size_t nbCallPerTest, size_t nbElement, _Callable &&__f, _Args &&... __args)
Do the micro benchmarking of a given function and gives performance results in cy and print the resul...