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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
#include "FWCore/MessageService/test/MemoryTestClient_A.h"
#include "FWCore/MessageLogger/interface/MessageLogger.h"
#include "FWCore/Framework/interface/MakerMacros.h"
#include <iostream>
#include <iomanip>
#include <string>
namespace edmtest {
int MemoryTestClient_A::nevent = 0;
MemoryTestClient_A::MemoryTestClient_A(edm::ParameterSet const& ps)
: memoryPattern(), vsize(0), last_allocation(nullptr) {
int pattern = ps.getUntrackedParameter<int>("pattern", 1);
edm::LogWarning("memoryPattern") << "Memory Pattern selected: " << pattern;
initializeMemoryPattern(pattern);
usesResource("MemoryTestClient_A");
}
void MemoryTestClient_A::analyze(edm::Event const& /*unused*/
,
edm::EventSetup const& /*unused*/
) {
nevent++;
double v = memoryPattern[nevent % memoryPattern.size()];
edm::LogVerbatim("memoryUsage") << "Event " << nevent << " uses " << v << " Mbytes";
if (v > vsize) {
int leaksize = static_cast<int>((v - vsize) * 1048576);
char* leak = new char[leaksize];
edm::LogPrint("memoryIncrease") << "Event " << nevent << " increases vsize by " << v - vsize << " Mbytes";
vsize = v;
last_allocation = leak;
}
// DO NOT delete[] leak; the point is to increment vsize!
} // MessageLoggerClient::analyze()
void MemoryTestClient_A::initializeMemoryPattern(int pattern) {
switch (pattern) {
case 1: // A general pattern
memoryPattern.push_back(2.1);
memoryPattern.push_back(3.1);
memoryPattern.push_back(4.1);
memoryPattern.push_back(2.1);
memoryPattern.push_back(1.7);
memoryPattern.push_back(8.4);
memoryPattern.push_back(3.4);
memoryPattern.push_back(43.1);
memoryPattern.push_back(17.1);
memoryPattern.push_back(2.1);
memoryPattern.push_back(47.9);
memoryPattern.push_back(8.3);
memoryPattern.push_back(56.3);
memoryPattern.push_back(1.1);
memoryPattern.push_back(19.1);
memoryPattern.push_back(2.1);
memoryPattern.push_back(22.0);
memoryPattern.push_back(9.1);
memoryPattern.push_back(2.1);
memoryPattern.push_back(57.9);
memoryPattern.push_back(2.1);
memoryPattern.push_back(59.5);
memoryPattern.push_back(4.1);
memoryPattern.push_back(6.1);
memoryPattern.push_back(61.5);
memoryPattern.push_back(4.2);
memoryPattern.push_back(6.3);
break;
case 2: // Here, there is a swap with R1 insteadd of L1
memoryPattern.push_back(2.1);
memoryPattern.push_back(3.1);
memoryPattern.push_back(4.1);
memoryPattern.push_back(2.1);
memoryPattern.push_back(1.7);
memoryPattern.push_back(8.4);
memoryPattern.push_back(3.4);
memoryPattern.push_back(2.1);
memoryPattern.push_back(1.7);
memoryPattern.push_back(3.4);
memoryPattern.push_back(43.1);
memoryPattern.push_back(17.1);
memoryPattern.push_back(2.1);
memoryPattern.push_back(47.9);
memoryPattern.push_back(8.3);
memoryPattern.push_back(56.3);
memoryPattern.push_back(1.1);
memoryPattern.push_back(69.1);
memoryPattern.push_back(2.1);
memoryPattern.push_back(22.0);
memoryPattern.push_back(9.1);
memoryPattern.push_back(2.1);
memoryPattern.push_back(117.9);
memoryPattern.push_back(2.1);
memoryPattern.push_back(119.5);
memoryPattern.push_back(4.1);
memoryPattern.push_back(6.1);
memoryPattern.push_back(120.8);
memoryPattern.push_back(19.5);
break;
case 3: // Here, there are few increments
memoryPattern.push_back(2.1);
memoryPattern.push_back(3.1);
memoryPattern.push_back(4.1);
memoryPattern.push_back(2.1);
memoryPattern.push_back(1.7);
memoryPattern.push_back(8.4);
memoryPattern.push_back(3.4);
memoryPattern.push_back(2.1);
memoryPattern.push_back(1.7);
memoryPattern.push_back(3.4);
memoryPattern.push_back(43.1);
memoryPattern.push_back(17.1);
break;
default:
memoryPattern.push_back(2.1);
memoryPattern.push_back(3.1);
memoryPattern.push_back(4.1);
memoryPattern.push_back(2.1);
}
}
} // namespace edmtest
using edmtest::MemoryTestClient_A;
DEFINE_FWK_MODULE(MemoryTestClient_A);
|