gem5  v21.2.0.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
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 "base/compiler.hh"
38 #include "debug/RubyNetwork.hh"
48 
49 namespace gem5
50 {
51 
52 namespace ruby
53 {
54 
55 namespace garnet
56 {
57 
58 /*
59  * GarnetNetwork sets up the routers and links and collects stats.
60  * Default parameters (GarnetNetwork.py) can be overwritten from command line
61  * (see configs/network/Network.py)
62  */
63 
65  : Network(p)
66 {
67  m_num_rows = p.num_rows;
68  m_ni_flit_size = p.ni_flit_size;
70  m_buffers_per_data_vc = p.buffers_per_data_vc;
71  m_buffers_per_ctrl_vc = p.buffers_per_ctrl_vc;
72  m_routing_algorithm = p.routing_algorithm;
73 
74  m_enable_fault_model = p.enable_fault_model;
76  fault_model = p.fault_model;
77 
79 
80  for (int i = 0 ; i < m_virtual_networks ; i++) {
81  if (m_vnet_type_names[i] == "response")
82  m_vnet_type[i] = DATA_VNET_; // carries data (and ctrl) packets
83  else
84  m_vnet_type[i] = CTRL_VNET_; // carries only ctrl packets
85  }
86 
87  // record the routers
88  for (std::vector<BasicRouter*>::const_iterator i = p.routers.begin();
89  i != p.routers.end(); ++i) {
90  Router* router = safe_cast<Router*>(*i);
91  m_routers.push_back(router);
92 
93  // initialize the router's network pointers
94  router->init_net_ptr(this);
95  }
96 
97  // record the network interfaces
98  for (std::vector<ClockedObject*>::const_iterator i = p.netifs.begin();
99  i != p.netifs.end(); ++i) {
100  NetworkInterface *ni = safe_cast<NetworkInterface *>(*i);
101  m_nis.push_back(ni);
102  ni->init_net_ptr(this);
103  }
104 
105  // Print Garnet version
106  inform("Garnet version %s\n", garnetVersion);
107 }
108 
109 void
111 {
112  Network::init();
113 
114  for (int i=0; i < m_nodes; i++) {
115  m_nis[i]->addNode(m_toNetQueues[i], m_fromNetQueues[i]);
116  }
117 
118  // The topology pointer should have already been initialized in the
119  // parent network constructor
120  assert(m_topology_ptr != NULL);
122 
123  // Initialize topology specific parameters
124  if (getNumRows() > 0) {
125  // Only for Mesh topology
126  // m_num_rows and m_num_cols are only used for
127  // implementing XY or custom routing in RoutingUnit.cc
129  m_num_cols = m_routers.size() / m_num_rows;
130  assert(m_num_rows * m_num_cols == m_routers.size());
131  } else {
132  m_num_rows = -1;
133  m_num_cols = -1;
134  }
135 
136  // FaultModel: declare each router to the fault model
137  if (isFaultModelEnabled()) {
139  i != m_routers.end(); ++i) {
140  Router* router = safe_cast<Router*>(*i);
141  [[maybe_unused]] int router_id =
143  router->get_num_outports(),
144  router->get_vc_per_vnet(),
147  assert(router_id == router->get_id());
148  router->printAggregateFaultProbability(std::cout);
149  router->printFaultVector(std::cout);
150  }
151  }
152 }
153 
154 /*
155  * This function creates a link from the Network Interface (NI)
156  * into the Network.
157  * It creates a Network Link from the NI to a Router and a Credit Link from
158  * the Router to the NI
159 */
160 
161 void
163  std::vector<NetDest>& routing_table_entry)
164 {
165  NodeID local_src = getLocalNodeID(global_src);
166  assert(local_src < m_nodes);
167 
168  GarnetExtLink* garnet_link = safe_cast<GarnetExtLink*>(link);
169 
170  // GarnetExtLink is bi-directional
171  NetworkLink* net_link = garnet_link->m_network_links[LinkDirection_In];
172  net_link->setType(EXT_IN_);
173  CreditLink* credit_link = garnet_link->m_credit_links[LinkDirection_In];
174 
175  m_networklinks.push_back(net_link);
176  m_creditlinks.push_back(credit_link);
177 
178  PortDirection dst_inport_dirn = "Local";
179 
181  m_routers[dest]->get_vc_per_vnet());
182 
183  /*
184  * We check if a bridge was enabled at any end of the link.
185  * The bridge is enabled if either of clock domain
186  * crossing (CDC) or Serializer-Deserializer(SerDes) unit is
187  * enabled for the link at each end. The bridge encapsulates
188  * the functionality for both CDC and SerDes and is a Consumer
189  * object similiar to a NetworkLink.
190  *
191  * If a bridge was enabled we connect the NI and Routers to
192  * bridge before connecting the link. Example, if an external
193  * bridge is enabled, we would connect:
194  * NI--->NetworkBridge--->GarnetExtLink---->Router
195  */
196  if (garnet_link->extBridgeEn) {
197  DPRINTF(RubyNetwork, "Enable external bridge for %s\n",
198  garnet_link->name());
199  m_nis[local_src]->
200  addOutPort(garnet_link->extNetBridge[LinkDirection_In],
201  garnet_link->extCredBridge[LinkDirection_In],
202  dest, m_routers[dest]->get_vc_per_vnet());
203  } else {
204  m_nis[local_src]->addOutPort(net_link, credit_link, dest,
205  m_routers[dest]->get_vc_per_vnet());
206  }
207 
208  if (garnet_link->intBridgeEn) {
209  DPRINTF(RubyNetwork, "Enable internal bridge for %s\n",
210  garnet_link->name());
211  m_routers[dest]->
212  addInPort(dst_inport_dirn,
213  garnet_link->intNetBridge[LinkDirection_In],
214  garnet_link->intCredBridge[LinkDirection_In]);
215  } else {
216  m_routers[dest]->addInPort(dst_inport_dirn, net_link, credit_link);
217  }
218 
219 }
220 
221 /*
222  * This function creates a link from the Network to a NI.
223  * It creates a Network Link from a Router to the NI and
224  * a Credit Link from NI to the Router
225 */
226 
227 void
229  BasicLink* link,
230  std::vector<NetDest>& routing_table_entry)
231 {
232  NodeID local_dest = getLocalNodeID(global_dest);
233  assert(local_dest < m_nodes);
234  assert(src < m_routers.size());
235  assert(m_routers[src] != NULL);
236 
237  GarnetExtLink* garnet_link = safe_cast<GarnetExtLink*>(link);
238 
239  // GarnetExtLink is bi-directional
240  NetworkLink* net_link = garnet_link->m_network_links[LinkDirection_Out];
241  net_link->setType(EXT_OUT_);
242  CreditLink* credit_link = garnet_link->m_credit_links[LinkDirection_Out];
243 
244  m_networklinks.push_back(net_link);
245  m_creditlinks.push_back(credit_link);
246 
247  PortDirection src_outport_dirn = "Local";
248 
250  m_routers[src]->get_vc_per_vnet());
251 
252  /*
253  * We check if a bridge was enabled at any end of the link.
254  * The bridge is enabled if either of clock domain
255  * crossing (CDC) or Serializer-Deserializer(SerDes) unit is
256  * enabled for the link at each end. The bridge encapsulates
257  * the functionality for both CDC and SerDes and is a Consumer
258  * object similiar to a NetworkLink.
259  *
260  * If a bridge was enabled we connect the NI and Routers to
261  * bridge before connecting the link. Example, if an external
262  * bridge is enabled, we would connect:
263  * NI<---NetworkBridge<---GarnetExtLink<----Router
264  */
265  if (garnet_link->extBridgeEn) {
266  DPRINTF(RubyNetwork, "Enable external bridge for %s\n",
267  garnet_link->name());
268  m_nis[local_dest]->
269  addInPort(garnet_link->extNetBridge[LinkDirection_Out],
270  garnet_link->extCredBridge[LinkDirection_Out]);
271  } else {
272  m_nis[local_dest]->addInPort(net_link, credit_link);
273  }
274 
275  if (garnet_link->intBridgeEn) {
276  DPRINTF(RubyNetwork, "Enable internal bridge for %s\n",
277  garnet_link->name());
278  m_routers[src]->
279  addOutPort(src_outport_dirn,
280  garnet_link->intNetBridge[LinkDirection_Out],
281  routing_table_entry, link->m_weight,
282  garnet_link->intCredBridge[LinkDirection_Out],
283  m_routers[src]->get_vc_per_vnet());
284  } else {
285  m_routers[src]->
286  addOutPort(src_outport_dirn, net_link,
287  routing_table_entry,
288  link->m_weight, credit_link,
289  m_routers[src]->get_vc_per_vnet());
290  }
291 }
292 
293 /*
294  * This function creates an internal network link between two routers.
295  * It adds both the network link and an opposite credit link.
296 */
297 
298 void
300  std::vector<NetDest>& routing_table_entry,
301  PortDirection src_outport_dirn,
302  PortDirection dst_inport_dirn)
303 {
304  GarnetIntLink* garnet_link = safe_cast<GarnetIntLink*>(link);
305 
306  // GarnetIntLink is unidirectional
307  NetworkLink* net_link = garnet_link->m_network_link;
308  net_link->setType(INT_);
309  CreditLink* credit_link = garnet_link->m_credit_link;
310 
311  m_networklinks.push_back(net_link);
312  m_creditlinks.push_back(credit_link);
313 
315  std::max(m_routers[dest]->get_vc_per_vnet(),
316  m_routers[src]->get_vc_per_vnet()));
317 
318  /*
319  * We check if a bridge was enabled at any end of the link.
320  * The bridge is enabled if either of clock domain
321  * crossing (CDC) or Serializer-Deserializer(SerDes) unit is
322  * enabled for the link at each end. The bridge encapsulates
323  * the functionality for both CDC and SerDes and is a Consumer
324  * object similiar to a NetworkLink.
325  *
326  * If a bridge was enabled we connect the NI and Routers to
327  * bridge before connecting the link. Example, if a source
328  * bridge is enabled, we would connect:
329  * Router--->NetworkBridge--->GarnetIntLink---->Router
330  */
331  if (garnet_link->dstBridgeEn) {
332  DPRINTF(RubyNetwork, "Enable destination bridge for %s\n",
333  garnet_link->name());
334  m_routers[dest]->addInPort(dst_inport_dirn,
335  garnet_link->dstNetBridge, garnet_link->dstCredBridge);
336  } else {
337  m_routers[dest]->addInPort(dst_inport_dirn, net_link, credit_link);
338  }
339 
340  if (garnet_link->srcBridgeEn) {
341  DPRINTF(RubyNetwork, "Enable source bridge for %s\n",
342  garnet_link->name());
343  m_routers[src]->
344  addOutPort(src_outport_dirn, garnet_link->srcNetBridge,
345  routing_table_entry,
346  link->m_weight, garnet_link->srcCredBridge,
347  m_routers[dest]->get_vc_per_vnet());
348  } else {
349  m_routers[src]->addOutPort(src_outport_dirn, net_link,
350  routing_table_entry,
351  link->m_weight, credit_link,
352  m_routers[dest]->get_vc_per_vnet());
353  }
354 }
355 
356 // Total routers in the network
357 int
359 {
360  return m_routers.size();
361 }
362 
363 // Get ID of router connected to a NI.
364 int
365 GarnetNetwork::get_router_id(int global_ni, int vnet)
366 {
367  NodeID local_ni = getLocalNodeID(global_ni);
368 
369  return m_nis[local_ni]->get_router_id(vnet);
370 }
371 
372 void
374 {
376 
377  // Packets
380  .name(name() + ".packets_received")
383  ;
384 
387  .name(name() + ".packets_injected")
390  ;
391 
394  .name(name() + ".packet_network_latency")
396  ;
397 
400  .name(name() + ".packet_queueing_latency")
402  ;
403 
404  for (int i = 0; i < m_virtual_networks; i++) {
405  m_packets_received.subname(i, csprintf("vnet-%i", i));
406  m_packets_injected.subname(i, csprintf("vnet-%i", i));
409  }
410 
412  .name(name() + ".average_packet_vnet_latency")
416 
418  .name(name() + ".average_packet_vqueue_latency")
422 
424  .name(name() + ".average_packet_network_latency");
427 
429  .name(name() + ".average_packet_queueing_latency");
432 
434  .name(name() + ".average_packet_latency");
437 
438  // Flits
441  .name(name() + ".flits_received")
444  ;
445 
448  .name(name() + ".flits_injected")
451  ;
452 
455  .name(name() + ".flit_network_latency")
457  ;
458 
461  .name(name() + ".flit_queueing_latency")
463  ;
464 
465  for (int i = 0; i < m_virtual_networks; i++) {
466  m_flits_received.subname(i, csprintf("vnet-%i", i));
467  m_flits_injected.subname(i, csprintf("vnet-%i", i));
468  m_flit_network_latency.subname(i, csprintf("vnet-%i", i));
470  }
471 
473  .name(name() + ".average_flit_vnet_latency")
476 
478  .name(name() + ".average_flit_vqueue_latency")
482 
484  .name(name() + ".average_flit_network_latency");
487 
489  .name(name() + ".average_flit_queueing_latency");
492 
494  .name(name() + ".average_flit_latency");
497 
498 
499  // Hops
500  m_avg_hops.name(name() + ".average_hops");
502 
503  // Links
505  .name(name() + ".ext_in_link_utilization");
507  .name(name() + ".ext_out_link_utilization");
509  .name(name() + ".int_link_utilization");
511  .name(name() + ".avg_link_utilization");
514  .name(name() + ".avg_vc_load")
517  ;
518 
519  // Traffic distribution
520  for (int source = 0; source < m_routers.size(); ++source) {
521  m_data_traffic_distribution.push_back(
523  m_ctrl_traffic_distribution.push_back(
525 
526  for (int dest = 0; dest < m_routers.size(); ++dest) {
527  statistics::Scalar *data_packets = new statistics::Scalar();
528  statistics::Scalar *ctrl_packets = new statistics::Scalar();
529 
530  data_packets->name(name() + ".data_traffic_distribution." + "n" +
531  std::to_string(source) + "." + "n" + std::to_string(dest));
532  m_data_traffic_distribution[source].push_back(data_packets);
533 
534  ctrl_packets->name(name() + ".ctrl_traffic_distribution." + "n" +
535  std::to_string(source) + "." + "n" + std::to_string(dest));
536  m_ctrl_traffic_distribution[source].push_back(ctrl_packets);
537  }
538  }
539 }
540 
541 void
543 {
544  RubySystem *rs = params().ruby_system;
545  double time_delta = double(curCycle() - rs->getStartCycle());
546 
547  for (int i = 0; i < m_networklinks.size(); i++) {
548  link_type type = m_networklinks[i]->getType();
549  int activity = m_networklinks[i]->getLinkUtilization();
550 
551  if (type == EXT_IN_)
553  else if (type == EXT_OUT_)
555  else if (type == INT_)
556  m_total_int_link_utilization += activity;
557 
559  (double(activity) / time_delta);
560 
561  std::vector<unsigned int> vc_load = m_networklinks[i]->getVcLoad();
562  for (int j = 0; j < vc_load.size(); j++) {
563  m_average_vc_load[j] += ((double)vc_load[j] / time_delta);
564  }
565  }
566 
567  // Ask the routers to collate their statistics
568  for (int i = 0; i < m_routers.size(); i++) {
569  m_routers[i]->collateStats();
570  }
571 }
572 
573 void
575 {
576  for (int i = 0; i < m_routers.size(); i++) {
577  m_routers[i]->resetStats();
578  }
579  for (int i = 0; i < m_networklinks.size(); i++) {
580  m_networklinks[i]->resetStats();
581  }
582  for (int i = 0; i < m_creditlinks.size(); i++) {
583  m_creditlinks[i]->resetStats();
584  }
585 }
586 
587 void
588 GarnetNetwork::print(std::ostream& out) const
589 {
590  out << "[GarnetNetwork]";
591 }
592 
593 void
595 {
596  int src_node = route.src_router;
597  int dest_node = route.dest_router;
598  int vnet = route.vnet;
599 
600  if (m_vnet_type[vnet] == DATA_VNET_)
601  (*m_data_traffic_distribution[src_node][dest_node])++;
602  else
603  (*m_ctrl_traffic_distribution[src_node][dest_node])++;
604 }
605 
606 uint32_t
608 {
609  uint32_t num_functional_writes = 0;
610 
611  for (unsigned int i = 0; i < m_routers.size(); i++) {
612  num_functional_writes += m_routers[i]->functionalWrite(pkt);
613  }
614 
615  for (unsigned int i = 0; i < m_nis.size(); ++i) {
616  num_functional_writes += m_nis[i]->functionalWrite(pkt);
617  }
618 
619  for (unsigned int i = 0; i < m_networklinks.size(); ++i) {
620  num_functional_writes += m_networklinks[i]->functionalWrite(pkt);
621  }
622 
623  return num_functional_writes;
624 }
625 
626 } // namespace garnet
627 } // namespace ruby
628 } // namespace gem5
gem5::statistics::Scalar
This is a simple scalar statistic, like a counter.
Definition: statistics.hh:1930
gem5::ruby::garnet::GarnetNetwork::collateStats
void collateStats()
Definition: GarnetNetwork.cc:542
gem5::ruby::garnet::NetworkInterface
Definition: NetworkInterface.hh:62
gem5::ruby::Network::m_virtual_networks
static uint32_t m_virtual_networks
Definition: Network.hh:156
gem5::ruby::garnet::GarnetNetwork::m_routing_algorithm
int m_routing_algorithm
Definition: GarnetNetwork.hh:165
gem5::ruby::garnet::GarnetNetwork::m_avg_flit_network_latency
statistics::Formula m_avg_flit_network_latency
Definition: GarnetNetwork.hh:187
gem5::ruby::garnet::GarnetNetwork::getBuffersPerCtrlVC
uint32_t getBuffersPerCtrlVC()
Definition: GarnetNetwork.hh:80
gem5::ruby::garnet::GarnetNetwork::fault_model
FaultModel * fault_model
Definition: GarnetNetwork.hh:84
gem5::ruby::PortDirection
std::string PortDirection
Definition: Topology.hh:68
gem5::Clocked::curCycle
Cycles curCycle() const
Determine the current cycle, corresponding to a tick aligned to a clock edge.
Definition: clocked_object.hh:195
gem5::ruby::garnet::GarnetNetwork::m_total_int_link_utilization
statistics::Scalar m_total_int_link_utilization
Definition: GarnetNetwork.hh:193
gem5::ruby::garnet::GarnetNetwork::m_vnet_type
std::vector< VNET_type > m_vnet_type
Definition: GarnetNetwork.hh:207
gem5::ruby::garnet::DATA_VNET_
@ DATA_VNET_
Definition: CommonTypes.hh:50
gem5::ruby::garnet::GarnetNetwork::m_avg_flit_queueing_latency
statistics::Formula m_avg_flit_queueing_latency
Definition: GarnetNetwork.hh:188
gem5::ruby::garnet::EXT_OUT_
@ EXT_OUT_
Definition: CommonTypes.hh:52
gem5::ruby::garnet::GarnetNetwork::m_packet_queueing_latency
statistics::Vector m_packet_queueing_latency
Definition: GarnetNetwork.hh:172
gem5::ruby::garnet::GarnetNetwork::m_total_ext_in_link_utilization
statistics::Scalar m_total_ext_in_link_utilization
Definition: GarnetNetwork.hh:191
gem5::ruby::garnet::GarnetNetwork::m_packets_injected
statistics::Vector m_packets_injected
Definition: GarnetNetwork.hh:170
gem5::statistics::nozero
const FlagsType nozero
Don't print if this is zero.
Definition: info.hh:68
gem5::ruby::Network
Definition: Network.hh:82
gem5::SimObject::init
virtual void init()
init() is called after all C++ SimObjects have been created and all ports are connected.
Definition: sim_object.cc:76
sc_dt::to_string
const std::string to_string(sc_enc enc)
Definition: sc_fxdefs.cc:91
gem5::ruby::garnet::Router
Definition: Router.hh:66
gem5::ruby::garnet::RouteInfo
Definition: CommonTypes.hh:56
gem5::ruby::garnet::GarnetNetwork::m_enable_fault_model
bool m_enable_fault_model
Definition: GarnetNetwork.hh:166
gem5::ruby::Topology::createLinks
void createLinks(Network *net)
Definition: Topology.cc:115
gem5::statistics::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:402
cast.hh
gem5::ruby::garnet::RouteInfo::src_router
int src_router
Definition: CommonTypes.hh:69
gem5::ruby::garnet::GarnetNetwork::m_networklinks
std::vector< NetworkLink * > m_networklinks
Definition: GarnetNetwork.hh:209
gem5::ruby::garnet::Router::get_num_outports
int get_num_outports()
Definition: Router.hh:90
std::vector
STL vector class.
Definition: stl.hh:37
gem5::csprintf
std::string csprintf(const char *format, const Args &...args)
Definition: cprintf.hh:161
GarnetNetwork.hh
gem5::ruby::garnet::link_type
link_type
Definition: CommonTypes.hh:52
gem5::ruby::garnet::GarnetNetwork::m_num_cols
int m_num_cols
Definition: GarnetNetwork.hh:160
gem5::ruby::garnet::GarnetNetwork::m_routers
std::vector< Router * > m_routers
Definition: GarnetNetwork.hh:208
gem5::ArmISA::i
Bitfield< 7 > i
Definition: misc_types.hh:67
CommonTypes.hh
gem5::ruby::garnet::GarnetNetwork::m_total_ext_out_link_utilization
statistics::Scalar m_total_ext_out_link_utilization
Definition: GarnetNetwork.hh:192
gem5::ruby::garnet::GarnetNetwork::m_total_hops
statistics::Scalar m_total_hops
Definition: GarnetNetwork.hh:197
gem5::ruby::garnet::EXT_IN_
@ EXT_IN_
Definition: CommonTypes.hh:52
gem5::ruby::garnet::GarnetNetwork::m_avg_hops
statistics::Formula m_avg_hops
Definition: GarnetNetwork.hh:198
gem5::statistics::pdf
const FlagsType pdf
Print the percent of the total that this entry represents.
Definition: info.hh:62
gem5::ArmISA::j
Bitfield< 24 > j
Definition: misc_types.hh:57
gem5::ruby::garnet::GarnetNetwork::m_buffers_per_data_vc
uint32_t m_buffers_per_data_vc
Definition: GarnetNetwork.hh:164
gem5::ruby::garnet::GarnetNetwork::m_avg_packet_vqueue_latency
statistics::Formula m_avg_packet_vqueue_latency
Definition: GarnetNetwork.hh:175
gem5::ruby::garnet::GarnetNetwork::m_nis
std::vector< NetworkInterface * > m_nis
Definition: GarnetNetwork.hh:211
gem5::ruby::garnet::GarnetNetwork::m_avg_flit_vnet_latency
statistics::Formula m_avg_flit_vnet_latency
Definition: GarnetNetwork.hh:185
gem5::statistics::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:289
gem5::ruby::garnet::Router::init_net_ptr
void init_net_ptr(GarnetNetwork *net_ptr)
Definition: Router.hh:93
gem5::ruby::garnet::GarnetNetwork::m_avg_packet_vnet_latency
statistics::Formula m_avg_packet_vnet_latency
Definition: GarnetNetwork.hh:174
gem5::Named::name
virtual std::string name() const
Definition: named.hh:47
gem5::SimObject::params
const Params & params() const
Definition: sim_object.hh:176
gem5::ruby::Network::m_nodes
uint32_t m_nodes
Definition: Network.hh:155
gem5::ruby::garnet::GarnetNetwork::m_data_traffic_distribution
std::vector< std::vector< statistics::Scalar * > > m_data_traffic_distribution
Definition: GarnetNetwork.hh:200
DPRINTF
#define DPRINTF(x,...)
Definition: trace.hh:186
gem5::Packet
A Packet is used to encapsulate a transfer between two objects in the memory system (e....
Definition: packet.hh:283
gem5::ruby::garnet::RouteInfo::dest_router
int dest_router
Definition: CommonTypes.hh:71
gem5::ruby::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:136
gem5::ruby::garnet::GarnetNetwork::getNumRows
int getNumRows() const
Definition: GarnetNetwork.hh:74
gem5::MipsISA::p
Bitfield< 0 > p
Definition: pra_constants.hh:326
gem5::X86ISA::type
type
Definition: misc.hh:733
gem5::ruby::garnet::GarnetNetwork::GarnetNetwork
GarnetNetwork(const Params &p)
Definition: GarnetNetwork.cc:64
gem5::ruby::garnet::GarnetNetwork::init
void init()
init() is called after all C++ SimObjects have been created and all ports are connected.
Definition: GarnetNetwork.cc:110
gem5::ruby::garnet::GarnetNetwork::m_avg_packet_network_latency
statistics::Formula m_avg_packet_network_latency
Definition: GarnetNetwork.hh:176
gem5::ruby::garnet::GarnetNetwork::m_max_vcs_per_vnet
uint32_t m_max_vcs_per_vnet
Definition: GarnetNetwork.hh:162
gem5::ruby::garnet::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:299
gem5::ruby::garnet::Router::printFaultVector
void printFaultVector(std::ostream &out)
Definition: Router.cc:249
gem5::ruby::garnet::GarnetNetwork::m_ni_flit_size
uint32_t m_ni_flit_size
Definition: GarnetNetwork.hh:161
gem5::ruby::Network::getLocalNodeID
NodeID getLocalNodeID(NodeID global_id) const
Definition: Network.cc:253
gem5::ruby::Network::m_fromNetQueues
std::vector< std::vector< MessageBuffer * > > m_fromNetQueues
Definition: Network.hh:164
gem5::ruby::garnet::GarnetNetwork::m_avg_packet_queueing_latency
statistics::Formula m_avg_packet_queueing_latency
Definition: GarnetNetwork.hh:177
gem5::ruby::garnet::GarnetNetwork::m_ctrl_traffic_distribution
std::vector< std::vector< statistics::Scalar * > > m_ctrl_traffic_distribution
Definition: GarnetNetwork.hh:201
gem5::ruby::garnet::GarnetNetwork::m_num_rows
int m_num_rows
Definition: GarnetNetwork.hh:159
compiler.hh
gem5::ruby::garnet::GarnetNetwork::m_creditlinks
std::vector< CreditLink * > m_creditlinks
Definition: GarnetNetwork.hh:210
gem5::ruby::garnet::GarnetNetwork::garnetVersion
const char * garnetVersion
Definition: GarnetNetwork.hh:69
gem5::ruby::SwitchID
unsigned int SwitchID
Definition: TypeDefines.hh:41
gem5::ruby::garnet::GarnetNetwork::makeExtInLink
void makeExtInLink(NodeID src, SwitchID dest, BasicLink *link, std::vector< NetDest > &routing_table_entry)
Definition: GarnetNetwork.cc:162
gem5::ruby::garnet::GarnetNetwork::Params
GarnetNetworkParams Params
Definition: GarnetNetwork.hh:63
RubySystem.hh
gem5::ruby::garnet::GarnetNetwork::m_flit_network_latency
statistics::Vector m_flit_network_latency
Definition: GarnetNetwork.hh:182
gem5::PowerISA::ni
Bitfield< 3 > ni
Definition: misc.hh:99
gem5::ruby::garnet::RouteInfo::vnet
int vnet
Definition: CommonTypes.hh:64
gem5::ruby::garnet::GarnetNetwork::getBuffersPerDataVC
uint32_t getBuffersPerDataVC()
Definition: GarnetNetwork.hh:79
gem5::ruby::garnet::GarnetNetwork::get_router_id
int get_router_id(int ni, int vnet)
Definition: GarnetNetwork.cc:365
gem5::statistics::Group::regStats
virtual void regStats()
Callback to set stat parameters.
Definition: group.cc:69
gem5::ruby::garnet::GarnetNetwork::m_flit_queueing_latency
statistics::Vector m_flit_queueing_latency
Definition: GarnetNetwork.hh:183
gem5::ruby::Network::m_toNetQueues
std::vector< std::vector< MessageBuffer * > > m_toNetQueues
Definition: Network.hh:163
gem5::ruby::Network::m_vnet_type_names
std::vector< std::string > m_vnet_type_names
Definition: Network.hh:157
gem5::ruby::garnet::CTRL_VNET_
@ CTRL_VNET_
Definition: CommonTypes.hh:50
MessageBuffer.hh
gem5::ruby::RubySystem
Definition: RubySystem.hh:63
gem5::ruby::garnet::GarnetNetwork::m_avg_packet_latency
statistics::Formula m_avg_packet_latency
Definition: GarnetNetwork.hh:178
gem5::ruby::garnet::GarnetNetwork::m_packet_network_latency
statistics::Vector m_packet_network_latency
Definition: GarnetNetwork.hh:171
inform
#define inform(...)
Definition: logging.hh:247
gem5::ruby::Network::m_topology_ptr
Topology * m_topology_ptr
Definition: Network.hh:158
gem5::ruby::garnet::GarnetNetwork::m_avg_flit_latency
statistics::Formula m_avg_flit_latency
Definition: GarnetNetwork.hh:189
gem5::ruby::garnet::GarnetNetwork::m_flits_injected
statistics::Vector m_flits_injected
Definition: GarnetNetwork.hh:181
gem5::ruby::garnet::GarnetNetwork::isFaultModelEnabled
bool isFaultModelEnabled() const
Definition: GarnetNetwork.hh:83
gem5::ruby::garnet::GarnetNetwork::m_average_vc_load
statistics::Vector m_average_vc_load
Definition: GarnetNetwork.hh:195
gem5::ruby::garnet::GarnetNetwork::getNumRouters
int getNumRouters()
Definition: GarnetNetwork.cc:358
gem5::ruby::garnet::Router::get_num_inports
int get_num_inports()
Definition: Router.hh:89
gem5::statistics::oneline
const FlagsType oneline
Print all values on a single line.
Definition: info.hh:72
gem5::ruby::garnet::GarnetNetwork::m_average_link_utilization
statistics::Scalar m_average_link_utilization
Definition: GarnetNetwork.hh:194
gem5::ruby::garnet::Router::get_vc_per_vnet
uint32_t get_vc_per_vnet()
Definition: Router.hh:88
gem5::ruby::garnet::GarnetNetwork::m_flits_received
statistics::Vector m_flits_received
Definition: GarnetNetwork.hh:180
gem5::ruby::garnet::GarnetNetwork::m_buffers_per_ctrl_vc
uint32_t m_buffers_per_ctrl_vc
Definition: GarnetNetwork.hh:163
gem5::ruby::garnet::GarnetNetwork::print
void print(std::ostream &out) const
Definition: GarnetNetwork.cc:588
gem5::ruby::NodeID
unsigned int NodeID
Definition: TypeDefines.hh:40
gem5::ruby::garnet::GarnetNetwork::update_traffic_distribution
void update_traffic_distribution(RouteInfo route)
Definition: GarnetNetwork.cc:594
gem5::RiscvISA::sum
Bitfield< 18 > sum
Definition: misc.hh:555
gem5::ruby::garnet::Router::printAggregateFaultProbability
void printAggregateFaultProbability(std::ostream &out)
Definition: Router.cc:267
gem5::ruby::garnet::GarnetNetwork::makeExtOutLink
void makeExtOutLink(SwitchID src, NodeID dest, BasicLink *link, std::vector< NetDest > &routing_table_entry)
Definition: GarnetNetwork.cc:228
gem5::ruby::garnet::Router::get_id
int get_id()
Definition: Router.hh:91
gem5::statistics::DataWrap::flags
Derived & flags(Flags _flags)
Set the flags and marks this stat to print at the end of simulation.
Definition: statistics.hh:358
gem5::ruby::garnet::GarnetNetwork::functionalWrite
uint32_t functionalWrite(Packet *pkt)
Function for performing a functional write.
Definition: GarnetNetwork.cc:607
gem5::ruby::garnet::GarnetNetwork::m_avg_flit_vqueue_latency
statistics::Formula m_avg_flit_vqueue_latency
Definition: GarnetNetwork.hh:186
gem5
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
Definition: tlb.cc:60
gem5::ruby::garnet::GarnetNetwork::regStats
void regStats()
Callback to set stat parameters.
Definition: GarnetNetwork.cc:373
gem5::statistics::total
const FlagsType total
Print the total.
Definition: info.hh:60
gem5::statistics::VectorBase::init
Derived & init(size_type size)
Set this vector to have the given size.
Definition: statistics.hh:1040
gem5::ruby::garnet::GarnetNetwork::m_packets_received
statistics::Vector m_packets_received
Definition: GarnetNetwork.hh:169
NetworkInterface.hh
NetDest.hh
gem5::ruby::garnet::INT_
@ INT_
Definition: CommonTypes.hh:52
gem5::ruby::garnet::GarnetNetwork::resetStats
void resetStats()
Callback to reset stats.
Definition: GarnetNetwork.cc:574
gem5::ArmISA::rs
Bitfield< 9, 8 > rs
Definition: misc_types.hh:377
Router.hh

Generated on Tue Dec 21 2021 11:34:33 for gem5 by doxygen 1.8.17