gem5  v20.1.0.0
GarnetNetwork.cc
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2020 Advanced Micro Devices, Inc.
3  * Copyright (c) 2008 Princeton University
4  * Copyright (c) 2016 Georgia Institute of Technology
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions are
9  * met: redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer;
11  * redistributions in binary form must reproduce the above copyright
12  * notice, this list of conditions and the following disclaimer in the
13  * documentation and/or other materials provided with the distribution;
14  * neither the name of the copyright holders nor the names of its
15  * contributors may be used to endorse or promote products derived from
16  * this software without specific prior written permission.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  */
30 
31 
33 
34 #include <cassert>
35 
36 #include "base/cast.hh"
37 #include "debug/RubyNetwork.hh"
47 
48 using namespace std;
49 
50 /*
51  * GarnetNetwork sets up the routers and links and collects stats.
52  * Default parameters (GarnetNetwork.py) can be overwritten from command line
53  * (see configs/network/Network.py)
54  */
55 
57  : Network(p)
58 {
59  m_num_rows = p->num_rows;
60  m_ni_flit_size = p->ni_flit_size;
62  m_buffers_per_data_vc = p->buffers_per_data_vc;
63  m_buffers_per_ctrl_vc = p->buffers_per_ctrl_vc;
64  m_routing_algorithm = p->routing_algorithm;
65 
66  m_enable_fault_model = p->enable_fault_model;
68  fault_model = p->fault_model;
69 
71 
72  for (int i = 0 ; i < m_virtual_networks ; i++) {
73  if (m_vnet_type_names[i] == "response")
74  m_vnet_type[i] = DATA_VNET_; // carries data (and ctrl) packets
75  else
76  m_vnet_type[i] = CTRL_VNET_; // carries only ctrl packets
77  }
78 
79  // record the routers
80  for (vector<BasicRouter*>::const_iterator i = p->routers.begin();
81  i != p->routers.end(); ++i) {
82  Router* router = safe_cast<Router*>(*i);
83  m_routers.push_back(router);
84 
85  // initialize the router's network pointers
86  router->init_net_ptr(this);
87  }
88 
89  // record the network interfaces
90  for (vector<ClockedObject*>::const_iterator i = p->netifs.begin();
91  i != p->netifs.end(); ++i) {
92  NetworkInterface *ni = safe_cast<NetworkInterface *>(*i);
93  m_nis.push_back(ni);
94  ni->init_net_ptr(this);
95  }
96 
97  // Print Garnet version
98  inform("Garnet version %s\n", garnetVersion);
99 }
100 
101 void
103 {
104  Network::init();
105 
106  for (int i=0; i < m_nodes; i++) {
107  m_nis[i]->addNode(m_toNetQueues[i], m_fromNetQueues[i]);
108  }
109 
110  // The topology pointer should have already been initialized in the
111  // parent network constructor
112  assert(m_topology_ptr != NULL);
114 
115  // Initialize topology specific parameters
116  if (getNumRows() > 0) {
117  // Only for Mesh topology
118  // m_num_rows and m_num_cols are only used for
119  // implementing XY or custom routing in RoutingUnit.cc
121  m_num_cols = m_routers.size() / m_num_rows;
122  assert(m_num_rows * m_num_cols == m_routers.size());
123  } else {
124  m_num_rows = -1;
125  m_num_cols = -1;
126  }
127 
128  // FaultModel: declare each router to the fault model
129  if (isFaultModelEnabled()) {
131  i != m_routers.end(); ++i) {
132  Router* router = safe_cast<Router*>(*i);
133  int router_id M5_VAR_USED =
135  router->get_num_outports(),
136  router->get_vc_per_vnet(),
139  assert(router_id == router->get_id());
140  router->printAggregateFaultProbability(cout);
141  router->printFaultVector(cout);
142  }
143  }
144 }
145 
146 /*
147  * This function creates a link from the Network Interface (NI)
148  * into the Network.
149  * It creates a Network Link from the NI to a Router and a Credit Link from
150  * the Router to the NI
151 */
152 
153 void
155  std::vector<NetDest>& routing_table_entry)
156 {
157  NodeID local_src = getLocalNodeID(global_src);
158  assert(local_src < m_nodes);
159 
160  GarnetExtLink* garnet_link = safe_cast<GarnetExtLink*>(link);
161 
162  // GarnetExtLink is bi-directional
163  NetworkLink* net_link = garnet_link->m_network_links[LinkDirection_In];
164  net_link->setType(EXT_IN_);
165  CreditLink* credit_link = garnet_link->m_credit_links[LinkDirection_In];
166 
167  m_networklinks.push_back(net_link);
168  m_creditlinks.push_back(credit_link);
169 
170  PortDirection dst_inport_dirn = "Local";
171 
173  m_routers[dest]->get_vc_per_vnet());
174 
175  /*
176  * We check if a bridge was enabled at any end of the link.
177  * The bridge is enabled if either of clock domain
178  * crossing (CDC) or Serializer-Deserializer(SerDes) unit is
179  * enabled for the link at each end. The bridge encapsulates
180  * the functionality for both CDC and SerDes and is a Consumer
181  * object similiar to a NetworkLink.
182  *
183  * If a bridge was enabled we connect the NI and Routers to
184  * bridge before connecting the link. Example, if an external
185  * bridge is enabled, we would connect:
186  * NI--->NetworkBridge--->GarnetExtLink---->Router
187  */
188  if (garnet_link->extBridgeEn) {
189  DPRINTF(RubyNetwork, "Enable external bridge for %s\n",
190  garnet_link->name());
191  m_nis[local_src]->
192  addOutPort(garnet_link->extNetBridge[LinkDirection_In],
193  garnet_link->extCredBridge[LinkDirection_In],
194  dest, m_routers[dest]->get_vc_per_vnet());
195  } else {
196  m_nis[local_src]->addOutPort(net_link, credit_link, dest,
197  m_routers[dest]->get_vc_per_vnet());
198  }
199 
200  if (garnet_link->intBridgeEn) {
201  DPRINTF(RubyNetwork, "Enable internal bridge for %s\n",
202  garnet_link->name());
203  m_routers[dest]->
204  addInPort(dst_inport_dirn,
205  garnet_link->intNetBridge[LinkDirection_In],
206  garnet_link->intCredBridge[LinkDirection_In]);
207  } else {
208  m_routers[dest]->addInPort(dst_inport_dirn, net_link, credit_link);
209  }
210 
211 }
212 
213 /*
214  * This function creates a link from the Network to a NI.
215  * It creates a Network Link from a Router to the NI and
216  * a Credit Link from NI to the Router
217 */
218 
219 void
221  BasicLink* link,
222  std::vector<NetDest>& routing_table_entry)
223 {
224  NodeID local_dest = getLocalNodeID(global_dest);
225  assert(local_dest < m_nodes);
226  assert(src < m_routers.size());
227  assert(m_routers[src] != NULL);
228 
229  GarnetExtLink* garnet_link = safe_cast<GarnetExtLink*>(link);
230 
231  // GarnetExtLink is bi-directional
232  NetworkLink* net_link = garnet_link->m_network_links[LinkDirection_Out];
233  net_link->setType(EXT_OUT_);
234  CreditLink* credit_link = garnet_link->m_credit_links[LinkDirection_Out];
235 
236  m_networklinks.push_back(net_link);
237  m_creditlinks.push_back(credit_link);
238 
239  PortDirection src_outport_dirn = "Local";
240 
242  m_routers[src]->get_vc_per_vnet());
243 
244  /*
245  * We check if a bridge was enabled at any end of the link.
246  * The bridge is enabled if either of clock domain
247  * crossing (CDC) or Serializer-Deserializer(SerDes) unit is
248  * enabled for the link at each end. The bridge encapsulates
249  * the functionality for both CDC and SerDes and is a Consumer
250  * object similiar to a NetworkLink.
251  *
252  * If a bridge was enabled we connect the NI and Routers to
253  * bridge before connecting the link. Example, if an external
254  * bridge is enabled, we would connect:
255  * NI<---NetworkBridge<---GarnetExtLink<----Router
256  */
257  if (garnet_link->extBridgeEn) {
258  DPRINTF(RubyNetwork, "Enable external bridge for %s\n",
259  garnet_link->name());
260  m_nis[local_dest]->
261  addInPort(garnet_link->extNetBridge[LinkDirection_Out],
262  garnet_link->extCredBridge[LinkDirection_Out]);
263  } else {
264  m_nis[local_dest]->addInPort(net_link, credit_link);
265  }
266 
267  if (garnet_link->intBridgeEn) {
268  DPRINTF(RubyNetwork, "Enable internal bridge for %s\n",
269  garnet_link->name());
270  m_routers[src]->
271  addOutPort(src_outport_dirn,
272  garnet_link->intNetBridge[LinkDirection_Out],
273  routing_table_entry, link->m_weight,
274  garnet_link->intCredBridge[LinkDirection_Out],
275  m_routers[src]->get_vc_per_vnet());
276  } else {
277  m_routers[src]->
278  addOutPort(src_outport_dirn, net_link,
279  routing_table_entry,
280  link->m_weight, credit_link,
281  m_routers[src]->get_vc_per_vnet());
282  }
283 }
284 
285 /*
286  * This function creates an internal network link between two routers.
287  * It adds both the network link and an opposite credit link.
288 */
289 
290 void
292  std::vector<NetDest>& routing_table_entry,
293  PortDirection src_outport_dirn,
294  PortDirection dst_inport_dirn)
295 {
296  GarnetIntLink* garnet_link = safe_cast<GarnetIntLink*>(link);
297 
298  // GarnetIntLink is unidirectional
299  NetworkLink* net_link = garnet_link->m_network_link;
300  net_link->setType(INT_);
301  CreditLink* credit_link = garnet_link->m_credit_link;
302 
303  m_networklinks.push_back(net_link);
304  m_creditlinks.push_back(credit_link);
305 
307  std::max(m_routers[dest]->get_vc_per_vnet(),
308  m_routers[src]->get_vc_per_vnet()));
309 
310  /*
311  * We check if a bridge was enabled at any end of the link.
312  * The bridge is enabled if either of clock domain
313  * crossing (CDC) or Serializer-Deserializer(SerDes) unit is
314  * enabled for the link at each end. The bridge encapsulates
315  * the functionality for both CDC and SerDes and is a Consumer
316  * object similiar to a NetworkLink.
317  *
318  * If a bridge was enabled we connect the NI and Routers to
319  * bridge before connecting the link. Example, if a source
320  * bridge is enabled, we would connect:
321  * Router--->NetworkBridge--->GarnetIntLink---->Router
322  */
323  if (garnet_link->dstBridgeEn) {
324  DPRINTF(RubyNetwork, "Enable destination bridge for %s\n",
325  garnet_link->name());
326  m_routers[dest]->addInPort(dst_inport_dirn,
327  garnet_link->dstNetBridge, garnet_link->dstCredBridge);
328  } else {
329  m_routers[dest]->addInPort(dst_inport_dirn, net_link, credit_link);
330  }
331 
332  if (garnet_link->srcBridgeEn) {
333  DPRINTF(RubyNetwork, "Enable source bridge for %s\n",
334  garnet_link->name());
335  m_routers[src]->
336  addOutPort(src_outport_dirn, garnet_link->srcNetBridge,
337  routing_table_entry,
338  link->m_weight, garnet_link->srcCredBridge,
339  m_routers[dest]->get_vc_per_vnet());
340  } else {
341  m_routers[src]->addOutPort(src_outport_dirn, net_link,
342  routing_table_entry,
343  link->m_weight, credit_link,
344  m_routers[dest]->get_vc_per_vnet());
345  }
346 }
347 
348 // Total routers in the network
349 int
351 {
352  return m_routers.size();
353 }
354 
355 // Get ID of router connected to a NI.
356 int
357 GarnetNetwork::get_router_id(int global_ni, int vnet)
358 {
359  NodeID local_ni = getLocalNodeID(global_ni);
360 
361  return m_nis[local_ni]->get_router_id(vnet);
362 }
363 
364 void
366 {
368 
369  // Packets
372  .name(name() + ".packets_received")
374  ;
375 
378  .name(name() + ".packets_injected")
380  ;
381 
384  .name(name() + ".packet_network_latency")
386  ;
387 
390  .name(name() + ".packet_queueing_latency")
392  ;
393 
394  for (int i = 0; i < m_virtual_networks; i++) {
395  m_packets_received.subname(i, csprintf("vnet-%i", i));
396  m_packets_injected.subname(i, csprintf("vnet-%i", i));
399  }
400 
402  .name(name() + ".average_packet_vnet_latency")
406 
408  .name(name() + ".average_packet_vqueue_latency")
412 
414  .name(name() + ".average_packet_network_latency");
417 
419  .name(name() + ".average_packet_queueing_latency");
422 
424  .name(name() + ".average_packet_latency");
427 
428  // Flits
431  .name(name() + ".flits_received")
433  ;
434 
437  .name(name() + ".flits_injected")
439  ;
440 
443  .name(name() + ".flit_network_latency")
445  ;
446 
449  .name(name() + ".flit_queueing_latency")
451  ;
452 
453  for (int i = 0; i < m_virtual_networks; i++) {
454  m_flits_received.subname(i, csprintf("vnet-%i", i));
455  m_flits_injected.subname(i, csprintf("vnet-%i", i));
456  m_flit_network_latency.subname(i, csprintf("vnet-%i", i));
458  }
459 
461  .name(name() + ".average_flit_vnet_latency")
464 
466  .name(name() + ".average_flit_vqueue_latency")
470 
472  .name(name() + ".average_flit_network_latency");
475 
477  .name(name() + ".average_flit_queueing_latency");
480 
482  .name(name() + ".average_flit_latency");
485 
486 
487  // Hops
488  m_avg_hops.name(name() + ".average_hops");
490 
491  // Links
493  .name(name() + ".ext_in_link_utilization");
495  .name(name() + ".ext_out_link_utilization");
497  .name(name() + ".int_link_utilization");
499  .name(name() + ".avg_link_utilization");
502  .name(name() + ".avg_vc_load")
504  ;
505 }
506 
507 void
509 {
510  RubySystem *rs = params()->ruby_system;
511  double time_delta = double(curCycle() - rs->getStartCycle());
512 
513  for (int i = 0; i < m_networklinks.size(); i++) {
514  link_type type = m_networklinks[i]->getType();
515  int activity = m_networklinks[i]->getLinkUtilization();
516 
517  if (type == EXT_IN_)
519  else if (type == EXT_OUT_)
521  else if (type == INT_)
522  m_total_int_link_utilization += activity;
523 
525  (double(activity) / time_delta);
526 
527  vector<unsigned int> vc_load = m_networklinks[i]->getVcLoad();
528  for (int j = 0; j < vc_load.size(); j++) {
529  m_average_vc_load[j] += ((double)vc_load[j] / time_delta);
530  }
531  }
532 
533  // Ask the routers to collate their statistics
534  for (int i = 0; i < m_routers.size(); i++) {
535  m_routers[i]->collateStats();
536  }
537 }
538 
539 void
541 {
542  for (int i = 0; i < m_routers.size(); i++) {
543  m_routers[i]->resetStats();
544  }
545  for (int i = 0; i < m_networklinks.size(); i++) {
546  m_networklinks[i]->resetStats();
547  }
548  for (int i = 0; i < m_creditlinks.size(); i++) {
549  m_creditlinks[i]->resetStats();
550  }
551 }
552 
553 void
554 GarnetNetwork::print(ostream& out) const
555 {
556  out << "[GarnetNetwork]";
557 }
558 
560 GarnetNetworkParams::create()
561 {
562  return new GarnetNetwork(this);
563 }
564 
565 uint32_t
567 {
568  uint32_t num_functional_writes = 0;
569 
570  for (unsigned int i = 0; i < m_routers.size(); i++) {
571  num_functional_writes += m_routers[i]->functionalWrite(pkt);
572  }
573 
574  for (unsigned int i = 0; i < m_nis.size(); ++i) {
575  num_functional_writes += m_nis[i]->functionalWrite(pkt);
576  }
577 
578  for (unsigned int i = 0; i < m_networklinks.size(); ++i) {
579  num_functional_writes += m_networklinks[i]->functionalWrite(pkt);
580  }
581 
582  return num_functional_writes;
583 }
Network::m_vnet_type_names
std::vector< std::string > m_vnet_type_names
Definition: Network.hh:152
GarnetNetwork::m_average_link_utilization
Stats::Scalar m_average_link_utilization
Definition: GarnetNetwork.hh:182
GarnetNetwork::m_avg_packet_vnet_latency
Stats::Formula m_avg_packet_vnet_latency
Definition: GarnetNetwork.hh:162
Stats::Group::regStats
virtual void regStats()
Callback to set stat parameters.
Definition: group.cc:64
GarnetNetwork::resetStats
void resetStats()
Callback to reset stats.
Definition: GarnetNetwork.cc:540
Router::get_id
int get_id()
Definition: Router.hh:81
GarnetNetwork::m_vnet_type
std::vector< VNET_type > m_vnet_type
Definition: GarnetNetwork.hh:192
GarnetNetwork::m_nis
std::vector< NetworkInterface * > m_nis
Definition: GarnetNetwork.hh:196
GarnetNetwork::m_num_cols
int m_num_cols
Definition: GarnetNetwork.hh:148
GarnetNetwork::m_packet_network_latency
Stats::Vector m_packet_network_latency
Definition: GarnetNetwork.hh:159
GarnetNetwork::m_flits_injected
Stats::Vector m_flits_injected
Definition: GarnetNetwork.hh:169
GarnetNetwork::get_router_id
int get_router_id(int ni, int vnet)
Definition: GarnetNetwork.cc:357
RiscvISA::sum
Bitfield< 18 > sum
Definition: registers.hh:609
DATA_VNET_
@ DATA_VNET_
Definition: CommonTypes.hh:41
GarnetNetwork::m_ni_flit_size
uint32_t m_ni_flit_size
Definition: GarnetNetwork.hh:149
ArmISA::i
Bitfield< 7 > i
Definition: miscregs_types.hh:63
GarnetNetwork::init
void init()
init() is called after all C++ SimObjects have been created and all ports are connected.
Definition: GarnetNetwork.cc:102
Router::printAggregateFaultProbability
void printAggregateFaultProbability(std::ostream &out)
Definition: Router.cc:260
GarnetNetwork::m_total_ext_out_link_utilization
Stats::Scalar m_total_ext_out_link_utilization
Definition: GarnetNetwork.hh:180
Network::m_toNetQueues
std::vector< std::vector< MessageBuffer * > > m_toNetQueues
Definition: Network.hh:158
GarnetNetwork::makeExtInLink
void makeExtInLink(NodeID src, SwitchID dest, BasicLink *link, std::vector< NetDest > &routing_table_entry)
Definition: GarnetNetwork.cc:154
GarnetNetwork::m_routers
std::vector< Router * > m_routers
Definition: GarnetNetwork.hh:193
type
uint8_t type
Definition: inet.hh:421
cast.hh
GarnetNetwork::garnetVersion
const char * garnetVersion
Definition: GarnetNetwork.hh:59
GarnetNetwork::Params
GarnetNetworkParams Params
Definition: GarnetNetwork.hh:53
std::vector
STL vector class.
Definition: stl.hh:37
Network::m_virtual_networks
static uint32_t m_virtual_networks
Definition: Network.hh:151
Router::get_vc_per_vnet
uint32_t get_vc_per_vnet()
Definition: Router.hh:78
GarnetNetwork.hh
Network::init
void init() override
init() is called after all C++ SimObjects have been created and all ports are connected.
Definition: Network.cc:154
GarnetNetwork::getBuffersPerCtrlVC
uint32_t getBuffersPerCtrlVC()
Definition: GarnetNetwork.hh:70
GarnetNetwork::m_total_hops
Stats::Scalar m_total_hops
Definition: GarnetNetwork.hh:185
CommonTypes.hh
GarnetNetwork::m_flit_network_latency
Stats::Vector m_flit_network_latency
Definition: GarnetNetwork.hh:170
Router::printFaultVector
void printFaultVector(std::ostream &out)
Definition: Router.cc:242
Stats::DataWrap::flags
Derived & flags(Flags _flags)
Set the flags and marks this stat to print at the end of simulation.
Definition: statistics.hh:331
INT_
@ INT_
Definition: CommonTypes.hh:43
EXT_IN_
@ EXT_IN_
Definition: CommonTypes.hh:43
CTRL_VNET_
@ CTRL_VNET_
Definition: CommonTypes.hh:41
GarnetNetwork::m_avg_hops
Stats::Formula m_avg_hops
Definition: GarnetNetwork.hh:186
ArmISA::j
Bitfield< 24 > j
Definition: miscregs_types.hh:54
GarnetNetwork::m_avg_flit_network_latency
Stats::Formula m_avg_flit_network_latency
Definition: GarnetNetwork.hh:175
GarnetNetwork::makeInternalLink
void makeInternalLink(SwitchID src, SwitchID dest, BasicLink *link, std::vector< NetDest > &routing_table_entry, PortDirection src_outport_dirn, PortDirection dest_inport_dirn)
Definition: GarnetNetwork.cc:291
Network::getLocalNodeID
NodeID getLocalNodeID(NodeID global_id) const
Definition: Network.cc:249
GarnetNetwork::getNumRouters
int getNumRouters()
Definition: GarnetNetwork.cc:350
Stats::oneline
const FlagsType oneline
Print all values on a single line.
Definition: info.hh:61
Router
Definition: Router.hh:56
GarnetNetwork::m_avg_packet_latency
Stats::Formula m_avg_packet_latency
Definition: GarnetNetwork.hh:166
GarnetNetwork::m_packets_received
Stats::Vector m_packets_received
Definition: GarnetNetwork.hh:157
DPRINTF
#define DPRINTF(x,...)
Definition: trace.hh:234
RubySystem
Definition: RubySystem.hh:52
GarnetNetwork::m_avg_packet_vqueue_latency
Stats::Formula m_avg_packet_vqueue_latency
Definition: GarnetNetwork.hh:163
Clocked::curCycle
Cycles curCycle() const
Determine the current cycle, corresponding to a tick aligned to a clock edge.
Definition: clocked_object.hh:192
GarnetNetwork::isFaultModelEnabled
bool isFaultModelEnabled() const
Definition: GarnetNetwork.hh:73
GarnetNetwork::print
void print(std::ostream &out) const
Definition: GarnetNetwork.cc:554
GarnetNetwork::m_total_int_link_utilization
Stats::Scalar m_total_int_link_utilization
Definition: GarnetNetwork.hh:181
GarnetNetwork::m_enable_fault_model
bool m_enable_fault_model
Definition: GarnetNetwork.hh:154
GarnetNetwork::m_buffers_per_data_vc
uint32_t m_buffers_per_data_vc
Definition: GarnetNetwork.hh:152
Router::get_num_outports
int get_num_outports()
Definition: Router.hh:80
NetworkInterface
Definition: NetworkInterface.hh:52
RubySystem.hh
GarnetNetwork::makeExtOutLink
void makeExtOutLink(SwitchID src, NodeID dest, BasicLink *link, std::vector< NetDest > &routing_table_entry)
Definition: GarnetNetwork.cc:220
Network
Definition: Network.hh:76
Stats::DataWrap::name
Derived & name(const std::string &name)
Set the name and marks this stat to print at the end of simulation.
Definition: statistics.hh:274
Stats::VectorBase::init
Derived & init(size_type size)
Set this vector to have the given size.
Definition: statistics.hh:1177
GarnetNetwork::m_avg_flit_vqueue_latency
Stats::Formula m_avg_flit_vqueue_latency
Definition: GarnetNetwork.hh:174
Stats::nozero
const FlagsType nozero
Don't print if this is zero.
Definition: info.hh:57
Network::m_fromNetQueues
std::vector< std::vector< MessageBuffer * > > m_fromNetQueues
Definition: Network.hh:159
GarnetNetwork::m_routing_algorithm
int m_routing_algorithm
Definition: GarnetNetwork.hh:153
Network::params
const Params * params() const
Definition: Network.hh:81
EXT_OUT_
@ EXT_OUT_
Definition: CommonTypes.hh:43
SimObject::name
virtual const std::string name() const
Definition: sim_object.hh:133
FaultModel::declare_router
int declare_router(int number_of_inputs, int number_of_outputs, int number_of_vcs_per_vnet, int number_of_buff_per_data_vc, int number_of_buff_per_ctrl_vc)
Definition: FaultModel.cc:133
MessageBuffer.hh
GarnetNetwork::getBuffersPerDataVC
uint32_t getBuffersPerDataVC()
Definition: GarnetNetwork.hh:69
GarnetNetwork::m_flit_queueing_latency
Stats::Vector m_flit_queueing_latency
Definition: GarnetNetwork.hh:171
Router::get_num_inports
int get_num_inports()
Definition: Router.hh:79
GarnetNetwork::m_average_vc_load
Stats::Vector m_average_vc_load
Definition: GarnetNetwork.hh:183
inform
#define inform(...)
Definition: logging.hh:240
GarnetNetwork::m_avg_packet_network_latency
Stats::Formula m_avg_packet_network_latency
Definition: GarnetNetwork.hh:164
GarnetNetwork::m_avg_flit_queueing_latency
Stats::Formula m_avg_flit_queueing_latency
Definition: GarnetNetwork.hh:176
GarnetNetwork::m_max_vcs_per_vnet
uint32_t m_max_vcs_per_vnet
Definition: GarnetNetwork.hh:150
GarnetNetwork::m_num_rows
int m_num_rows
Definition: GarnetNetwork.hh:147
std
Overload hash function for BasicBlockRange type.
Definition: vec_reg.hh:587
link_type
link_type
Definition: CommonTypes.hh:43
Stats::pdf
const FlagsType pdf
Print the percent of the total that this entry represents.
Definition: info.hh:51
Packet
A Packet is used to encapsulate a transfer between two objects in the memory system (e....
Definition: packet.hh:257
Topology::createLinks
void createLinks(Network *net)
Definition: Topology.cc:111
ArmISA::rs
Bitfield< 9, 8 > rs
Definition: miscregs_types.hh:372
GarnetNetwork::m_buffers_per_ctrl_vc
uint32_t m_buffers_per_ctrl_vc
Definition: GarnetNetwork.hh:151
GarnetNetwork::GarnetNetwork
GarnetNetwork(const Params *p)
Definition: GarnetNetwork.cc:56
PowerISA::ni
Bitfield< 3 > ni
Definition: miscregs.hh:92
GarnetNetwork::m_avg_flit_latency
Stats::Formula m_avg_flit_latency
Definition: GarnetNetwork.hh:177
PortDirection
std::string PortDirection
Definition: Topology.hh:62
GarnetNetwork
Definition: GarnetNetwork.hh:50
GarnetNetwork::m_avg_flit_vnet_latency
Stats::Formula m_avg_flit_vnet_latency
Definition: GarnetNetwork.hh:173
GarnetNetwork::m_creditlinks
std::vector< CreditLink * > m_creditlinks
Definition: GarnetNetwork.hh:195
Stats::DataWrapVec::subname
Derived & subname(off_type index, const std::string &name)
Set the subfield name for the given index, and marks this stat to print at the end of simulation.
Definition: statistics.hh:374
GarnetNetwork::collateStats
void collateStats()
Definition: GarnetNetwork.cc:508
NodeID
unsigned int NodeID
Definition: TypeDefines.hh:34
GarnetNetwork::regStats
void regStats()
Callback to set stat parameters.
Definition: GarnetNetwork.cc:365
Router::init_net_ptr
void init_net_ptr(GarnetNetwork *net_ptr)
Definition: Router.hh:83
GarnetNetwork::m_packets_injected
Stats::Vector m_packets_injected
Definition: GarnetNetwork.hh:158
GarnetNetwork::m_flits_received
Stats::Vector m_flits_received
Definition: GarnetNetwork.hh:168
MipsISA::p
Bitfield< 0 > p
Definition: pra_constants.hh:323
GarnetNetwork::m_avg_packet_queueing_latency
Stats::Formula m_avg_packet_queueing_latency
Definition: GarnetNetwork.hh:165
GarnetNetwork::m_packet_queueing_latency
Stats::Vector m_packet_queueing_latency
Definition: GarnetNetwork.hh:160
Stats::total
const FlagsType total
Print the total.
Definition: info.hh:49
Network::m_nodes
uint32_t m_nodes
Definition: Network.hh:150
GarnetNetwork::functionalWrite
uint32_t functionalWrite(Packet *pkt)
Function for performing a functional write.
Definition: GarnetNetwork.cc:566
GarnetNetwork::m_total_ext_in_link_utilization
Stats::Scalar m_total_ext_in_link_utilization
Definition: GarnetNetwork.hh:179
GarnetNetwork::m_networklinks
std::vector< NetworkLink * > m_networklinks
Definition: GarnetNetwork.hh:194
NetworkInterface.hh
csprintf
std::string csprintf(const char *format, const Args &...args)
Definition: cprintf.hh:158
NetDest.hh
GarnetNetwork::fault_model
FaultModel * fault_model
Definition: GarnetNetwork.hh:74
SwitchID
unsigned int SwitchID
Definition: TypeDefines.hh:35
Network::m_topology_ptr
Topology * m_topology_ptr
Definition: Network.hh:153
GarnetNetwork::getNumRows
int getNumRows() const
Definition: GarnetNetwork.hh:64
Router.hh

Generated on Wed Sep 30 2020 14:02:13 for gem5 by doxygen 1.8.17