gem5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
gpu_tlb.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2011-2015 Advanced Micro Devices, Inc.
3  * All rights reserved.
4  *
5  * For use for simulation and test purposes only
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions are met:
9  *
10  * 1. Redistributions of source code must retain the above copyright notice,
11  * this list of conditions and the following disclaimer.
12  *
13  * 2. Redistributions in binary form must reproduce the above copyright notice,
14  * this list of conditions and the following disclaimer in the documentation
15  * and/or other materials provided with the distribution.
16  *
17  * 3. Neither the name of the copyright holder nor the names of its contributors
18  * may be used to endorse or promote products derived from this software
19  * without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
25  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31  * POSSIBILITY OF SUCH DAMAGE.
32  *
33  * Author: Lisa Hsu
34  */
35 
36 #ifndef __GPU_TLB_HH__
37 #define __GPU_TLB_HH__
38 
39 #include <fstream>
40 #include <list>
41 #include <queue>
42 #include <string>
43 #include <vector>
44 
45 #include "arch/generic/tlb.hh"
46 #include "arch/x86/pagetable.hh"
48 #include "arch/x86/regs/segment.hh"
49 #include "base/callback.hh"
50 #include "base/misc.hh"
51 #include "base/statistics.hh"
53 #include "mem/mem_object.hh"
54 #include "mem/port.hh"
55 #include "mem/request.hh"
56 #include "params/X86GPUTLB.hh"
57 #include "sim/sim_object.hh"
58 
59 class BaseTLB;
60 class Packet;
61 class ThreadContext;
62 
63 namespace X86ISA
64 {
65  class GpuTlbEntry : public TlbEntry
66  {
67  public:
68  GpuTlbEntry(Addr asn, Addr _vaddr, Addr _paddr, bool _valid)
69  : TlbEntry(asn, _vaddr, _paddr, false, false), valid(_valid) { }
70 
71  GpuTlbEntry() : TlbEntry(), valid(false) { }
72 
73  bool valid;
74  };
75 
76  class GpuTLB : public MemObject
77  {
78  protected:
79  friend class Walker;
80 
82 
83  uint32_t configAddress;
84 
85  // TLB clock: will inherit clock from shader's clock period in terms
86  // of nuber of ticks of curTime (aka global simulation clock)
87  // The assignment of TLB clock from shader clock is done in the python
88  // config files.
89  int clock;
90 
91  public:
92  // clock related functions ; maps to-and-from Simulation ticks and
93  // object clocks.
94  Tick frequency() const { return SimClock::Frequency / clock; }
95 
96  Tick
97  ticks(int numCycles) const
98  {
99  return (Tick)clock * numCycles;
100  }
101 
102  Tick curCycle() const { return curTick() / clock; }
103  Tick tickToCycles(Tick val) const { return val / clock;}
104 
105  typedef X86GPUTLBParams Params;
106  GpuTLB(const Params *p);
107  ~GpuTLB();
108 
109  typedef enum BaseTLB::Mode Mode;
110 
112  {
113  public:
114  virtual ~Translation() { }
115 
120  virtual void markDelayed() = 0;
121 
127  virtual void finish(Fault fault, RequestPtr req, ThreadContext *tc,
128  Mode mode) = 0;
129  };
130 
131  void dumpAll();
132  GpuTlbEntry *lookup(Addr va, bool update_lru=true);
133  void setConfigAddress(uint32_t addr);
134 
135  protected:
136  EntryList::iterator lookupIt(Addr va, bool update_lru=true);
138 
139  public:
140  Walker *getWalker();
141  void invalidateAll();
142  void invalidateNonGlobal();
143  void demapPage(Addr va, uint64_t asn);
144 
145  protected:
146  int size;
147  int assoc;
148  int numSets;
149 
153  bool FA;
155 
161 
166 
172 
174 
175  /*
176  * It's a per-set list. As long as we have not reached
177  * the full capacity of the given set, grab an entry from
178  * the freeList.
179  */
181 
190 
192 
194  Translation *translation, Mode mode, bool &delayedResponse,
195  bool timing, int &latency);
196 
197  public:
198  // latencies for a TLB hit, miss and page fault
202 
203  // local_stats are as seen from the TLB
204  // without taking into account coalescing
209 
210  // global_stats are as seen from the
211  // CU's perspective taking into account
212  // all coalesced requests.
217 
218  // from the CU perspective (global)
220  // from the CU perspective (global)
223  // from the perspective of this TLB
225  // from the perspective of this TLB
227  // I take the avg. per page and then
228  // the avg. over all pages.
230 
231  void regStats();
232  void updatePageFootprint(Addr virt_page_addr);
233  void printAccessPattern();
234 
235 
237  int &latency);
238 
240  Translation *translation, Mode mode,
241  int &latency);
242 
245 
246  GpuTlbEntry *insert(Addr vpn, GpuTlbEntry &entry);
247 
248  // Checkpointing
249  virtual void serialize(CheckpointOut& cp) const;
250  virtual void unserialize(CheckpointIn& cp);
251  void issueTranslation();
253  bool tlbLookup(RequestPtr req, ThreadContext *tc, bool update_stats);
254 
256  PacketPtr pkt);
257 
259 
261  GpuTlbEntry *tlb_entry, Mode mode);
262 
263  void updatePhysAddresses(Addr virt_page_addr, GpuTlbEntry *tlb_entry,
264  Addr phys_page_addr);
265 
266  void issueTLBLookup(PacketPtr pkt);
267 
268  // CpuSidePort is the TLB Port closer to the CPU/CU side
269  class CpuSidePort : public SlavePort
270  {
271  public:
272  CpuSidePort(const std::string &_name, GpuTLB * gpu_TLB,
273  PortID _index)
274  : SlavePort(_name, gpu_TLB), tlb(gpu_TLB), index(_index) { }
275 
276  protected:
278  int index;
279 
280  virtual bool recvTimingReq(PacketPtr pkt);
281  virtual Tick recvAtomic(PacketPtr pkt) { return 0; }
282  virtual void recvFunctional(PacketPtr pkt);
283  virtual void recvRangeChange() { }
284  virtual void recvReqRetry();
285  virtual void recvRespRetry() { assert(false); }
286  virtual AddrRangeList getAddrRanges() const;
287  };
288 
296  class MemSidePort : public MasterPort
297  {
298  public:
299  MemSidePort(const std::string &_name, GpuTLB * gpu_TLB,
300  PortID _index)
301  : MasterPort(_name, gpu_TLB), tlb(gpu_TLB), index(_index) { }
302 
304 
305  protected:
307  int index;
308 
309  virtual bool recvTimingResp(PacketPtr pkt);
310  virtual Tick recvAtomic(PacketPtr pkt) { return 0; }
311  virtual void recvFunctional(PacketPtr pkt) { }
312  virtual void recvRangeChange() { }
313  virtual void recvReqRetry();
314  };
315 
316  // TLB ports on the cpu Side
318  // TLB ports on the memory side
320 
321  BaseMasterPort &getMasterPort(const std::string &if_name,
322  PortID idx=InvalidPortID);
323 
324  BaseSlavePort &getSlavePort(const std::string &if_name,
325  PortID idx=InvalidPortID);
326 
344  {
345  // TLB mode, read or write
347  // Thread context associated with this req
349 
350  /*
351  * TLB entry to be populated and passed back and filled in
352  * previous TLBs. Equivalent to the data cache concept of
353  * "data return."
354  */
356  // Is this a TLB prefetch request?
357  bool prefetch;
358  // When was the req for this translation issued
359  uint64_t issueTime;
360  // Remember where this came from
362 
363  // keep track of #uncoalesced reqs per packet per TLB level;
364  // reqCnt per level >= reqCnt higher level
366  // TLB level this packet hit in; 0 if it hit in the page table
367  int hitLevel;
369 
371  bool _prefetch=false,
372  Packet::SenderState *_saved=nullptr)
373  : tlbMode(tlb_mode), tc(_tc), tlbEntry(nullptr),
374  prefetch(_prefetch), issueTime(0),
375  hitLevel(0),saved(_saved) { }
376  };
377 
378  // maximum number of permitted coalesced requests per cycle
380 
381  // Current number of outstandings coalesced requests.
382  // Should be <= maxCoalescedReqs
384 
392  void translationReturn(Addr virtPageAddr, tlbOutcome outcome,
393  PacketPtr pkt);
394 
395  class TLBEvent : public Event
396  {
397  private:
405 
406  public:
407  TLBEvent(GpuTLB *_tlb, Addr _addr, tlbOutcome outcome,
408  PacketPtr _pkt);
409 
410  void process();
411  const char *description() const;
412 
413  // updateOutcome updates the tlbOutcome of a TLBEvent
414  void updateOutcome(tlbOutcome _outcome);
416  };
417 
418  std::unordered_map<Addr, TLBEvent*> translationReturnEvent;
419 
420  // this FIFO queue keeps track of the virt. page addresses
421  // that are pending cleanup
422  std::queue<Addr> cleanupQueue;
423 
424  // the cleanupEvent is scheduled after a TLBEvent triggers in order to
425  // free memory and do the required clean-up
426  void cleanup();
427 
429 
435  struct AccessInfo
436  {
437  unsigned int lastTimeAccessed; // last access to this page
438  unsigned int accessesPerPage;
439  // need to divide it by accessesPerPage at the end
440  unsigned int totalReuseDistance;
441 
451  unsigned int sumDistance;
452  unsigned int meanDistance;
453  };
454 
455  typedef std::unordered_map<Addr, AccessInfo> AccessPatternTable;
457 
458  // Called at the end of simulation to dump page access stats.
459  void exitCallback();
460 
462  };
463 }
464 
465 #endif // __GPU_TLB_HH__
A MasterPort is a specialisation of a BaseMasterPort, which implements the default protocol for the t...
Definition: port.hh:167
AccessPatternTable TLBFootprint
Definition: gpu_tlb.hh:456
unsigned int accessesPerPage
Definition: gpu_tlb.hh:438
Stats::Formula globalTLBMissRate
Definition: gpu_tlb.hh:216
bool allocationPolicy
Allocation Policy: true if we always allocate on a hit, false otherwise.
Definition: gpu_tlb.hh:160
Stats::Scalar localCycles
Definition: gpu_tlb.hh:224
const char * description() const
Return a C string describing the event.
Definition: gpu_tlb.cc:1369
virtual void serialize(CheckpointOut &cp) const
Serialize an object.
Definition: gpu_tlb.cc:945
const PortID InvalidPortID
Definition: types.hh:182
TLB TranslationState: this currently is a somewhat bastardization of the usage of SenderState...
Definition: gpu_tlb.hh:343
Stats::Scalar avgReuseDistance
Definition: gpu_tlb.hh:229
void translationReturn(Addr virtPageAddr, tlbOutcome outcome, PacketPtr pkt)
A TLBEvent is scheduled after the TLB lookup and helps us take the appropriate actions: (e...
Definition: gpu_tlb.cc:1252
virtual void recvRespRetry()
Called by the master port if sendTimingResp was called on this slave port (causing recvTimingResp to ...
Definition: gpu_tlb.hh:285
CpuSidePort(const std::string &_name, GpuTLB *gpu_TLB, PortID _index)
Definition: gpu_tlb.hh:272
void handleFuncTranslationReturn(PacketPtr pkt, tlbOutcome outcome)
handleFuncTranslationReturn is called on a TLB hit, when a TLB miss returns or when a page fault retu...
Definition: gpu_tlb.cc:1416
Stats::Scalar accessCycles
Definition: gpu_tlb.hh:219
Stats::Formula localTLBMissRate
Definition: gpu_tlb.hh:208
Declaration of a request, the overall memory request consisting of the parts of the request that are ...
void invalidateAll()
Definition: gpu_tlb.cc:237
unsigned int meanDistance
Definition: gpu_tlb.hh:452
void exitCallback()
Definition: gpu_tlb.cc:1701
void issueTranslation()
Fault translateAtomic(RequestPtr req, ThreadContext *tc, Mode mode, int &latency)
Definition: gpu_tlb.cc:914
Walker * getWalker()
Definition: gpu_tlb.cc:938
MemObject declaration.
EntryList::iterator lookupIt(Addr va, bool update_lru=true)
Definition: gpu_tlb.cc:194
Tick tickToCycles(Tick val) const
Definition: gpu_tlb.hh:103
Port Object Declaration.
MemSidePort is the TLB Port closer to the memory side If this is a last level TLB then this port will...
Definition: gpu_tlb.hh:296
bool hasMemSidePort
if true, then this is not the last level TLB
Definition: gpu_tlb.hh:165
unsigned int totalReuseDistance
Definition: gpu_tlb.hh:440
Tick doMmuRegRead(ThreadContext *tc, Packet *pkt)
unsigned int lastTimeAccessed
Definition: gpu_tlb.hh:437
A SlavePort is a specialisation of a port.
Definition: port.hh:331
void translateTiming(RequestPtr req, ThreadContext *tc, Translation *translation, Mode mode, int &latency)
Definition: gpu_tlb.cc:924
unsigned int sumDistance
Definition: gpu_tlb.hh:451
Bitfield< 4, 0 > mode
Definition: miscregs.hh:1385
Stats::Scalar localNumTLBMisses
Definition: gpu_tlb.hh:207
Tick Frequency
The simulated frequency of curTick(). (In ticks per second)
Definition: core.cc:47
int maxCoalescedReqs
Definition: gpu_tlb.hh:379
ThreadContext is the external interface to all thread state for anything outside of the CPU...
std::vector< GpuTlbEntry > tlb
Definition: gpu_tlb.hh:173
A BaseSlavePort is a protocol-agnostic slave port, responsible only for the structural connection to ...
Definition: port.hh:139
Declaration of Statistics objects.
This is a simple scalar statistic, like a counter.
Definition: statistics.hh:2475
GpuTlbEntry * lookup(Addr va, bool update_lru=true)
Definition: gpu_tlb.cc:224
enum BaseTLB::Mode Mode
Definition: gpu_tlb.hh:109
STL vector class.
Definition: stl.hh:40
Bitfield< 63 > val
Definition: misc.hh:770
Walker * walker
Definition: gpu_tlb.hh:137
TLBEvent(GpuTLB *_tlb, Addr _addr, tlbOutcome outcome, PacketPtr _pkt)
Definition: gpu_tlb.cc:1121
virtual void recvReqRetry()
Called by the slave port if sendTimingReq was called on this master port (causing recvTimingReq to be...
Definition: gpu_tlb.cc:1634
Stats::Scalar numUniquePages
Definition: gpu_tlb.hh:222
Tick curCycle() const
Definition: gpu_tlb.hh:102
Definition: tlb.hh:53
Stats::Scalar globalNumTLBMisses
Definition: gpu_tlb.hh:215
std::queue< Addr > cleanupQueue
Definition: gpu_tlb.hh:422
std::vector< MemSidePort * > memSidePort
Definition: gpu_tlb.hh:319
bool accessDistance
Print out accessDistance stats.
Definition: gpu_tlb.hh:171
GpuTlbEntry(Addr asn, Addr _vaddr, Addr _paddr, bool _valid)
Definition: gpu_tlb.hh:68
Tick curTick()
The current simulated tick.
Definition: core.hh:47
virtual void markDelayed()=0
Signal that the translation has been delayed due to a hw page table walk.
Fault translateInt(RequestPtr req, ThreadContext *tc)
Definition: gpu_tlb.cc:288
std::deque< PacketPtr > retries
Definition: gpu_tlb.hh:303
void regStats()
Register statistics for this object.
Definition: gpu_tlb.cc:955
Stats::Formula localLatency
Definition: gpu_tlb.hh:226
void pagingProtectionChecks(ThreadContext *tc, PacketPtr pkt, GpuTlbEntry *tlb_entry, Mode mode)
Do Paging protection checks.
Definition: gpu_tlb.cc:1133
virtual Tick recvAtomic(PacketPtr pkt)
Definition: gpu_tlb.hh:310
int outstandingReqs
Definition: gpu_tlb.hh:383
std::vector< EntryList > entryList
An entryList per set is the equivalent of an LRU stack; it's used to guide replacement decisions...
Definition: gpu_tlb.hh:189
void invalidateNonGlobal()
Definition: gpu_tlb.cc:257
uint64_t Tick
Tick count type.
Definition: types.hh:63
Fault translate(RequestPtr req, ThreadContext *tc, Translation *translation, Mode mode, bool &delayedResponse, bool timing, int &latency)
Definition: gpu_tlb.cc:711
virtual AddrRangeList getAddrRanges() const
Get a list of the non-overlapping address ranges the owner is responsible for.
Definition: gpu_tlb.cc:1601
void setConfigAddress(uint32_t addr)
Definition: gpu_tlb.cc:251
virtual bool recvTimingResp(PacketPtr pkt)
MemSidePort receives the packet back.
Definition: gpu_tlb.cc:1615
MemSidePort(const std::string &_name, GpuTLB *gpu_TLB, PortID _index)
Definition: gpu_tlb.hh:299
BaseMasterPort & getMasterPort(const std::string &if_name, PortID idx=InvalidPortID)
Get a master port with a given name and index.
Definition: gpu_tlb.cc:152
This hash map will use the virtual page address as a key and will keep track of total number of acces...
Definition: gpu_tlb.hh:435
X86GPUTLBParams Params
Definition: gpu_tlb.hh:105
bool tlbLookup(RequestPtr req, ThreadContext *tc, bool update_stats)
TLB_lookup will only perform a TLB lookup returning true on a TLB hit and false on a TLB miss...
Definition: gpu_tlb.cc:663
void demapPage(Addr va, uint64_t asn)
Definition: gpu_tlb.cc:275
virtual void recvFunctional(PacketPtr pkt)
Receive a functional request packet from the master port.
Definition: gpu_tlb.cc:1481
TlbEntry(Addr asn, Addr _vaddr, Addr _paddr, bool uncacheable, bool read_only)
virtual void recvRangeChange()
Called to receive an address range change from the peer slave port.
Definition: gpu_tlb.hh:312
std::unordered_map< Addr, TLBEvent * > translationReturnEvent
Definition: gpu_tlb.hh:418
void handleTranslationReturn(Addr addr, tlbOutcome outcome, PacketPtr pkt)
handleTranslationReturn is called on a TLB hit, when a TLB miss returns or when a page fault returns...
Definition: gpu_tlb.cc:1167
STL list class.
Definition: stl.hh:54
virtual void recvFunctional(PacketPtr pkt)
Definition: gpu_tlb.hh:311
std::vector< CpuSidePort * > cpuSidePort
Definition: gpu_tlb.hh:317
Stats::Scalar globalNumTLBAccesses
Definition: gpu_tlb.hh:213
void updateOutcome(tlbOutcome _outcome)
Definition: gpu_tlb.cc:1375
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:142
Packet::SenderState * saved
Definition: gpu_tlb.hh:368
std::vector< EntryList > freeList
Definition: gpu_tlb.hh:180
A Packet is used to encapsulate a transfer between two objects in the memory system (e...
Definition: packet.hh:245
Bitfield< 8 > va
Definition: miscregs.hh:1473
virtual void finish(Fault fault, RequestPtr req, ThreadContext *tc, Mode mode)=0
The memory for this object may be dynamically allocated, and it may be responsible for cleaning itsle...
A virtual base opaque structure used to hold state associated with the packet (e.g., an MSHR), specific to a MemObject that sees the packet.
Definition: packet.hh:377
Tick ticks(int numCycles) const
Definition: gpu_tlb.hh:97
STL deque class.
Definition: stl.hh:47
std::unordered_map< Addr, AccessInfo > AccessPatternTable
Definition: gpu_tlb.hh:455
A formula for statistics that is calculated when printed.
Definition: statistics.hh:2895
Mode
Definition: tlb.hh:61
virtual Tick recvAtomic(PacketPtr pkt)
Receive an atomic request packet from the master port.
Definition: gpu_tlb.hh:281
EventWrapper< GpuTLB,&GpuTLB::cleanup > cleanupEvent
Definition: gpu_tlb.hh:428
void updatePhysAddresses(Addr virt_page_addr, GpuTlbEntry *tlb_entry, Addr phys_page_addr)
uint32_t configAddress
Definition: gpu_tlb.hh:83
std::list< GpuTlbEntry * > EntryList
Definition: gpu_tlb.hh:81
virtual bool recvTimingReq(PacketPtr pkt)
Receive a timing request from the master port.
Definition: gpu_tlb.cc:1393
virtual void unserialize(CheckpointIn &cp)
Unserialize an object.
Definition: gpu_tlb.cc:950
std::vector< unsigned int > localTLBAccesses
The field below will help us compute the access distance, that is the number of (coalesced) TLB acces...
Definition: gpu_tlb.hh:450
std::ostream CheckpointOut
Definition: serialize.hh:67
int missLatency2
Definition: gpu_tlb.hh:201
std::vector< SlavePort * > ports
Definition: gpu_tlb.hh:361
Definition: eventq.hh:185
void cleanup()
Definition: gpu_tlb.cc:1642
The MemObject class extends the ClockedObject with accessor functions to get its master and slave por...
Definition: mem_object.hh:60
A BaseMasterPort is a protocol-agnostic master port, responsible only for the structural connection t...
Definition: port.hh:115
GpuTlbEntry * insert(Addr vpn, GpuTlbEntry &entry)
Definition: gpu_tlb.cc:168
int missLatency1
Definition: gpu_tlb.hh:200
Stats::Scalar pageTableCycles
Definition: gpu_tlb.hh:221
Tick frequency() const
Definition: gpu_tlb.hh:94
Stats::Scalar localNumTLBHits
Definition: gpu_tlb.hh:206
TranslationState(Mode tlb_mode, ThreadContext *_tc, bool _prefetch=false, Packet::SenderState *_saved=nullptr)
Definition: gpu_tlb.hh:370
int16_t PortID
Port index/ID type, and a symbolic name for an invalid port id.
Definition: types.hh:181
Bitfield< 0 > p
Definition: pagetable.hh:95
GpuTLB(const Params *p)
Definition: gpu_tlb.cc:62
EventWrapper< GpuTLB,&GpuTLB::exitCallback > exitEvent
Definition: gpu_tlb.hh:461
Tick doMmuRegWrite(ThreadContext *tc, Packet *pkt)
virtual void recvRangeChange()
Definition: gpu_tlb.hh:283
bool FA
true if this is a fully-associative TLB
Definition: gpu_tlb.hh:153
Stats::Scalar localNumTLBAccesses
Definition: gpu_tlb.hh:205
virtual void recvReqRetry()
Definition: gpu_tlb.cc:1593
BaseSlavePort & getSlavePort(const std::string &if_name, PortID idx=InvalidPortID)
Get a slave port with a given name and index.
Definition: gpu_tlb.cc:138
Stats::Scalar globalNumTLBHits
Definition: gpu_tlb.hh:214
std::shared_ptr< FaultBase > Fault
Definition: types.hh:184
Bitfield< 3 > addr
Definition: types.hh:81
tlbOutcome outcome
outcome can be TLB_HIT, TLB_MISS, or PAGE_WALK
Definition: gpu_tlb.hh:403
std::vector< int > reqCnt
Definition: gpu_tlb.hh:365
void issueTLBLookup(PacketPtr pkt)
Do the TLB lookup for this coalesced request and schedule another event <TLB access="" latency>=""> c...
Definition: gpu_tlb.cc:1043
void updatePageFootprint(Addr virt_page_addr)
Definition: gpu_tlb.cc:1666
void printAccessPattern()

Generated on Fri Jun 9 2017 13:03:47 for gem5 by doxygen 1.8.6