gem5
v20.1.0.0
mem
ruby
profiler
AccessTraceForAddress.cc
Go to the documentation of this file.
1
/*
2
* Copyright (c) 1999-2008 Mark D. Hill and David A. Wood
3
* All rights reserved.
4
*
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions are
7
* met: redistributions of source code must retain the above copyright
8
* notice, this list of conditions and the following disclaimer;
9
* redistributions in binary form must reproduce the above copyright
10
* notice, this list of conditions and the following disclaimer in the
11
* documentation and/or other materials provided with the distribution;
12
* neither the name of the copyright holders nor the names of its
13
* contributors may be used to endorse or promote products derived from
14
* this software without specific prior written permission.
15
*
16
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
*/
28
29
#include "
mem/ruby/profiler/AccessTraceForAddress.hh
"
30
31
#include "
mem/ruby/common/Histogram.hh
"
32
33
AccessTraceForAddress::~AccessTraceForAddress
()
34
{
35
if
(
m_histogram_ptr
) {
36
delete
m_histogram_ptr
;
37
m_histogram_ptr
= NULL;
38
}
39
}
40
41
void
42
AccessTraceForAddress::print
(std::ostream& out)
const
43
{
44
out <<
m_addr
;
45
46
if
(
m_histogram_ptr
== NULL) {
47
out <<
" "
<<
m_total
;
48
out <<
" | "
<<
m_loads
;
49
out <<
" "
<<
m_stores
;
50
out <<
" "
<<
m_atomics
;
51
out <<
" | "
<<
m_user
;
52
out <<
" "
<<
m_total
-
m_user
;
53
out <<
" | "
<<
m_sharing
;
54
out <<
" | "
<<
m_touched_by
.
count
();
55
}
else
{
56
assert(
m_total
== 0);
57
out <<
" "
<< (*m_histogram_ptr);
58
}
59
}
60
61
void
62
AccessTraceForAddress::update
(RubyRequestType
type
,
63
RubyAccessMode access_mode,
NodeID
cpu,
64
bool
sharing_miss)
65
{
66
m_touched_by
.
add
(cpu);
67
m_total
++;
68
if
(
type
== RubyRequestType_ATOMIC) {
69
m_atomics
++;
70
}
else
if
(
type
== RubyRequestType_LD){
71
m_loads
++;
72
}
else
if
(
type
== RubyRequestType_ST){
73
m_stores
++;
74
}
else
{
75
// ERROR_MSG("Trying to add invalid access to trace");
76
}
77
78
if
(access_mode == RubyAccessMode_User) {
79
m_user
++;
80
}
81
82
if
(sharing_miss) {
83
m_sharing
++;
84
}
85
}
86
87
int
88
AccessTraceForAddress::getTotal
()
const
89
{
90
if
(
m_histogram_ptr
== NULL) {
91
return
m_total
;
92
}
else
{
93
return
m_histogram_ptr
->
getTotal
();
94
}
95
}
96
97
void
98
AccessTraceForAddress::addSample
(
int
value)
99
{
100
assert(
m_total
== 0);
101
if
(
m_histogram_ptr
== NULL) {
102
m_histogram_ptr
=
new
Histogram
;
103
}
104
m_histogram_ptr
->
add
(value);
105
}
Histogram::getTotal
int64_t getTotal() const
Definition:
Histogram.hh:54
AccessTraceForAddress::m_loads
uint64_t m_loads
Definition:
AccessTraceForAddress.hh:70
Histogram.hh
type
uint8_t type
Definition:
inet.hh:421
AccessTraceForAddress::m_user
uint64_t m_user
Definition:
AccessTraceForAddress.hh:74
AccessTraceForAddress::addSample
void addSample(int value)
Definition:
AccessTraceForAddress.cc:98
AccessTraceForAddress::m_touched_by
Set m_touched_by
Definition:
AccessTraceForAddress.hh:76
Set::add
void add(NodeID index)
Definition:
Set.hh:72
AccessTraceForAddress::m_atomics
uint64_t m_atomics
Definition:
AccessTraceForAddress.hh:72
Set::count
int count() const
Definition:
Set.hh:123
AccessTraceForAddress::~AccessTraceForAddress
~AccessTraceForAddress()
Definition:
AccessTraceForAddress.cc:33
AccessTraceForAddress.hh
AccessTraceForAddress::m_sharing
uint64_t m_sharing
Definition:
AccessTraceForAddress.hh:75
AccessTraceForAddress::getTotal
int getTotal() const
Definition:
AccessTraceForAddress.cc:88
AccessTraceForAddress::update
void update(RubyRequestType type, RubyAccessMode access_mode, NodeID cpu, bool sharing_miss)
Definition:
AccessTraceForAddress.cc:62
AccessTraceForAddress::m_addr
Addr m_addr
Definition:
AccessTraceForAddress.hh:69
AccessTraceForAddress::print
void print(std::ostream &out) const
Definition:
AccessTraceForAddress.cc:42
Histogram
Definition:
Histogram.hh:37
AccessTraceForAddress::m_total
uint64_t m_total
Definition:
AccessTraceForAddress.hh:73
AccessTraceForAddress::m_histogram_ptr
Histogram * m_histogram_ptr
Definition:
AccessTraceForAddress.hh:77
NodeID
unsigned int NodeID
Definition:
TypeDefines.hh:34
AccessTraceForAddress::m_stores
uint64_t m_stores
Definition:
AccessTraceForAddress.hh:71
Histogram::add
void add(int64_t value)
Definition:
Histogram.cc:88
Generated on Wed Sep 30 2020 14:02:13 for gem5 by
doxygen
1.8.17