-
Notifications
You must be signed in to change notification settings - Fork 2
/
HammerTime.cpp
88 lines (78 loc) · 2.63 KB
/
HammerTime.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include "HammerTime.h"
void HammerTime::startHist() {
startTimer("History");
}
void HammerTime::endHist() {
endTimer("History");
}
void HammerTime::startTimer( string key ) {
currentTimes[key] = clock();
}
void HammerTime::endTimer( string key ) {
// check if key exists in currentTimes,
// which it would if startTimer has been called for this key
if ( currentTimes.count(key) == 0) {
std::cerr << "An endTimer() was called for a process for which the timer was never started! " << std::endl;
}
else {
// if the key exists, add a result
clock_t time = clock() - currentTimes[key];
results[key] += ((double)time) / CLOCKS_PER_SEC ;
calls[key]++;
}
}
std::map <string , double> HammerTime::getAvgResults() {
// check if the average has already been calculated
if( ! avgResults.empty() ) {
return(avgResults);
}
else {
// take the average of each result vector
for (const auto& any : results) {
avgResults[any.first] = any.second / calls[any.first];
}
}
return(avgResults);
}
void HammerTime::printAvgResults() {
std::cout << std::endl << "Printing timing results to " << "outfiles/" << outFilename << "..." << std::endl;
// check if the average has already been calculated
if(avgResults.empty() ) {
// take the average of each result vector
for (const auto& any : results) {
avgResults[any.first] = any.second / calls[any.first];
}
}
// print the average results
std::ofstream timeOut;
timeOut.open( "outfiles/" + outFilename );
timeOut << "Timing results averaged over " << calls["Histories"] << " histories:" << std::endl;
for (const auto& any : avgResults) {
timeOut << any.first << " " << any.second << " This block ran " << calls[any.first] << " times." << std::endl;
}
timeOut.close();
}
double HammerTime::getAvgResult( string key ) {
if(avgResults.empty() ) {
// take the average of each result vector
for (const auto& any : results) {
avgResults[any.first] = any.second / calls[any.first];
}
}
if ( avgResults.count(key) == 0 ) {
std::cerr << "An was avgResult was called for a non-existent key! " << std::endl;
}
else{
return(avgResults[key]);
}
return(0);
}
double HammerTime::getAvgHistoryTime() {
if(avgResults.empty() ) {
// take the average of each result vector
for (const auto& any : results) {
avgResults[any.first] = any.second / calls[any.first];
}
}
return(avgResults["History"]);
}