GCC Code Coverage Report


Directory: ./
File: tmp_project/PhoenixMicroBenchmark/src/micro_benchmark_rdtsc_impl.h
Date: 2025-03-14 12:14:21
Exec Total Coverage
Lines: 0 24 0.0%
Branches: 0 66 0.0%

Line Branch Exec Source
1 /***************************************
2 Auteur : Pierre Aubert
3 Mail : pierre.aubert@lapp.in2p3.fr
4 Licence : CeCILL-C
5 ****************************************/
6
7 #ifndef __MICRO_BENCHMARK_RDTSC_IMPL_H__
8 #define __MICRO_BENCHMARK_RDTSC_IMPL_H__
9
10 #include "phoenix_timer.h"
11 #include "micro_benchmark_rdtsc.h"
12
13 ///Do the micro benchmarking of a given function and gives performance results in cy
14 /** @param[out] ellapsedTimeCy : ellapsed time in cy
15 * @param[out] ellapsedTimeErrorCy : error on the ellapsed time in cy
16 * @param nbTestPerf : number of performance test
17 * @param nbCallPerTest : number of calls per performance test
18 * @param __f : function to be called and benchmarked
19 * @param __args : parameter of the function to be benchmarked
20 */
21 template<typename _Callable, typename... _Args>
22 void micro_benchmarkRdtsc(double & ellapsedTimeCy, double & ellapsedTimeErrorCy, size_t nbTestPerf, size_t nbCallPerTest,
23 _Callable&& __f, _Args&&... __args)
24 {
25 VecEllapsedTime vecTimeCy;
26 for(size_t i(0lu); i < nbTestPerf; ++i){
27 //Stating the timer
28 size_t beginTime = phoenix_rdtsc();
29 for(size_t j(0lu); j < nbCallPerTest; ++j){
30 __f(__args...);
31 }
32 //Get the time of the nbCallPerTest calls
33 size_t elapsedTime(phoenix_rdtsc() - beginTime);
34 double fullCy(elapsedTime/((double)nbCallPerTest));
35 vecTimeCy.push_back(fullCy);
36 }
37 MapOrderedTime mapOrderTime;
38 micro_benchmarkVecToMap(mapOrderTime, vecTimeCy);
39 size_t nbValueUsed(vecTimeCy.size()*0.7 + 1lu);
40 if(nbValueUsed > vecTimeCy.size()){
41 nbValueUsed = vecTimeCy.size();
42 }
43 micro_benchmarkComputeTime(ellapsedTimeCy, ellapsedTimeErrorCy, mapOrderTime, nbValueUsed);
44 }
45
46 ///Do the micro benchmarking of a given function and gives performance results in cy
47 /** @param[out] ellapsedTimeCy : ellapsed time in cy
48 * @param[out] ellapsedTimeErrorCy : error on the ellapsed time in cy
49 * @param[out] timePerElement : time per element in cy
50 * @param[out] timeErrorPerElement : error of time per element in cy
51 * @param nbTestPerf : number of performance test
52 * @param nbCallPerTest : number of calls per performance test
53 * @param nbElement : number of element treated by the function __f
54 * @param __f : function to be called and benchmarked
55 * @param __args : parameter of the function to be benchmarked
56 */
57 template<typename _Callable, typename... _Args>
58 void micro_benchmarkRdtsc(double & ellapsedTimeCy, double & ellapsedTimeErrorCy,
59 double & timePerElement, double & timeErrorPerElement, size_t nbTestPerf, size_t nbCallPerTest, size_t nbElement,
60 _Callable&& __f, _Args&&... __args)
61 {
62 micro_benchmarkRdtsc(ellapsedTimeCy, ellapsedTimeErrorCy, nbTestPerf, nbCallPerTest, __f, __args...);
63 timePerElement = ellapsedTimeCy/((double)nbElement);
64 timeErrorPerElement = ellapsedTimeErrorCy/((double)nbElement);
65 }
66
67 ///Do the micro benchmarking of a given function and gives performance results in cy and print the result
68 /** @param testName : name of the performance test
69 * @param nbTestPerf : number of performance test
70 * @param nbCallPerTest : number of calls per performance test
71 * @param nbElement : number of element treated by the function __f
72 * @param __f : function to be called and benchmarked
73 * @param __args : parameter of the function to be benchmarked
74 */
75 template<typename _Callable, typename... _Args>
76 void 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...);
79
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;
82 }
83
84
85 #endif
86