gem5  v22.0.0.2
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  m_next_packet_id = 0;
74 
75  m_enable_fault_model = p.enable_fault_model;
77  fault_model = p.fault_model;
78 
80 
81  for (int i = 0 ; i < m_virtual_networks ; i++) {
82  if (m_vnet_type_names[i] == "response")
83  m_vnet_type[i] = DATA_VNET_; // carries data (and ctrl) packets
84  else
85  m_vnet_type[i] = CTRL_VNET_; // carries only ctrl packets
86  }
87 
88  // record the routers
89  for (std::vector<BasicRouter*>::const_iterator i = p.routers.begin();
90  i != p.routers.end(); ++i) {
91  Router* router = safe_cast<Router*>(*i);
92  m_routers.push_back(router);
93 
94  // initialize the router's network pointers
95  router->init_net_ptr(this);
96  }
97 
98  // record the network interfaces
99  for (std::vector<ClockedObject*>::const_iterator i = p.netifs.begin();
100  i != p.netifs.end(); ++i) {
101  NetworkInterface *ni = safe_cast<NetworkInterface *>(*i);
102  m_nis.push_back(ni);
103  ni->init_net_ptr(this);
104  }
105 
106  // Print Garnet version
107  inform("Garnet version %s\n", garnetVersion);
108 }
109 
110 void
112 {
113  Network::init();
114 
115  for (int i=0; i < m_nodes; i++) {
116  m_nis[i]->addNode(m_toNetQueues[i], m_fromNetQueues[i]);
117  }
118 
119  // The topology pointer should have already been initialized in the
120  // parent network constructor
121  assert(m_topology_ptr != NULL);
123 
124  // Initialize topology specific parameters
125  if (getNumRows() > 0) {
126  // Only for Mesh topology
127  // m_num_rows and m_num_cols are only used for
128  // implementing XY or custom routing in RoutingUnit.cc
130  m_num_cols = m_routers.size() / m_num_rows;
131  assert(m_num_rows * m_num_cols == m_routers.size());
132  } else {
133  m_num_rows = -1;
134  m_num_cols = -1;
135  }
136 
137  // FaultModel: declare each router to the fault model
138  if (isFaultModelEnabled()) {
140  i != m_routers.end(); ++i) {
141  Router* router = safe_cast<Router*>(*i);
142  [[maybe_unused]] int router_id =
144  router->get_num_outports(),
145  router->get_vc_per_vnet(),
148  assert(router_id == router->get_id());
149  router->printAggregateFaultProbability(std::cout);
150  router->printFaultVector(std::cout);
151  }
152  }
153 }
154 
155 /*
156  * This function creates a link from the Network Interface (NI)
157  * into the Network.
158  * It creates a Network Link from the NI to a Router and a Credit Link from
159  * the Router to the NI
160 */
161 
162 void
164  std::vector<NetDest>& routing_table_entry)
165 {
166  NodeID local_src = getLocalNodeID(global_src);
167  assert(local_src < m_nodes);
168 
169  GarnetExtLink* garnet_link = safe_cast<GarnetExtLink*>(link);
170 
171  // GarnetExtLink is bi-directional
172  NetworkLink* net_link = garnet_link->m_network_links[LinkDirection_In];
173  net_link->setType(EXT_IN_);
174  CreditLink* credit_link = garnet_link->m_credit_links[LinkDirection_In];
175 
176  m_networklinks.push_back(net_link);
177  m_creditlinks.push_back(credit_link);
178 
179  PortDirection dst_inport_dirn = "Local";
180 
182  m_routers[dest]->get_vc_per_vnet());
183 
184  /*
185  * We check if a bridge was enabled at any end of the link.
186  * The bridge is enabled if either of clock domain
187  * crossing (CDC) or Serializer-Deserializer(SerDes) unit is
188  * enabled for the link at each end. The bridge encapsulates
189  * the functionality for both CDC and SerDes and is a Consumer
190  * object similiar to a NetworkLink.
191  *
192  * If a bridge was enabled we connect the NI and Routers to
193  * bridge before connecting the link. Example, if an external
194  * bridge is enabled, we would connect:
195  * NI--->NetworkBridge--->GarnetExtLink---->Router
196  */
197  if (garnet_link->extBridgeEn) {
198  DPRINTF(RubyNetwork, "Enable external bridge for %s\n",
199  garnet_link->name());
200  m_nis[local_src]->
201  addOutPort(garnet_link->extNetBridge[LinkDirection_In],
202  garnet_link->extCredBridge[LinkDirection_In],
203  dest, m_routers[dest]->get_vc_per_vnet());
204  } else {
205  m_nis[local_src]->addOutPort(net_link, credit_link, dest,
206  m_routers[dest]->get_vc_per_vnet());
207  }
208 
209  if (garnet_link->intBridgeEn) {
210  DPRINTF(RubyNetwork, "Enable internal bridge for %s\n",
211  garnet_link->name());
212  m_routers[dest]->
213  addInPort(dst_inport_dirn,
214  garnet_link->intNetBridge[LinkDirection_In],
215  garnet_link->intCredBridge[LinkDirection_In]);
216  } else {
217  m_routers[dest]->addInPort(dst_inport_dirn, net_link, credit_link);
218  }
219 
220 }
221 
222 /*
223  * This function creates a link from the Network to a NI.
224  * It creates a Network Link from a Router to the NI and
225  * a Credit Link from NI to the Router
226 */
227 
228 void
230  BasicLink* link,
231  std::vector<NetDest>& routing_table_entry)
232 {
233  NodeID local_dest = getLocalNodeID(global_dest);
234  assert(local_dest < m_nodes);
235  assert(src < m_routers.size());
236  assert(m_routers[src] != NULL);
237 
238  GarnetExtLink* garnet_link = safe_cast<GarnetExtLink*>(link);
239 
240  // GarnetExtLink is bi-directional
241  NetworkLink* net_link = garnet_link->m_network_links[LinkDirection_Out];
242  net_link->setType(EXT_OUT_);
243  CreditLink* credit_link = garnet_link->m_credit_links[LinkDirection_Out];
244 
245  m_networklinks.push_back(net_link);
246  m_creditlinks.push_back(credit_link);
247 
248  PortDirection src_outport_dirn = "Local";
249 
251  m_routers[src]->get_vc_per_vnet());
252 
253  /*
254  * We check if a bridge was enabled at any end of the link.
255  * The bridge is enabled if either of clock domain
256  * crossing (CDC) or Serializer-Deserializer(SerDes) unit is
257  * enabled for the link at each end. The bridge encapsulates
258  * the functionality for both CDC and SerDes and is a Consumer
259  * object similiar to a NetworkLink.
260  *
261  * If a bridge was enabled we connect the NI and Routers to
262  * bridge before connecting the link. Example, if an external
263  * bridge is enabled, we would connect:
264  * NI<---NetworkBridge<---GarnetExtLink<----Router
265  */
266  if (garnet_link->extBridgeEn) {
267  DPRINTF(RubyNetwork, "Enable external bridge for %s\n",
268  garnet_link->name());
269  m_nis[local_dest]->
270  addInPort(garnet_link->extNetBridge[LinkDirection_Out],
271  garnet_link->extCredBridge[LinkDirection_Out]);
272  } else {
273  m_nis[local_dest]->addInPort(net_link, credit_link);
274  }
275 
276  if (garnet_link->intBridgeEn) {
277  DPRINTF(RubyNetwork, "Enable internal bridge for %s\n",
278  garnet_link->name());
279  m_routers[src]->
280  addOutPort(src_outport_dirn,
281  garnet_link->intNetBridge[LinkDirection_Out],
282  routing_table_entry, link->m_weight,
283  garnet_link->intCredBridge[LinkDirection_Out],
284  m_routers[src]->get_vc_per_vnet());
285  } else {
286  m_routers[src]->
287  addOutPort(src_outport_dirn, net_link,
288  routing_table_entry,
289  link->m_weight, credit_link,
290  m_routers[src]->get_vc_per_vnet());
291  }
292 }
293 
294 /*
295  * This function creates an internal network link between two routers.
296  * It adds both the network link and an opposite credit link.
297 */
298 
299 void
301  std::vector<NetDest>& routing_table_entry,
302  PortDirection src_outport_dirn,
303  PortDirection dst_inport_dirn)
304 {
305  GarnetIntLink* garnet_link = safe_cast<GarnetIntLink*>(link);
306 
307  // GarnetIntLink is unidirectional
308  NetworkLink* net_link = garnet_link->m_network_link;
309  net_link->setType(INT_);
310  CreditLink* credit_link = garnet_link->m_credit_link;
311 
312  m_networklinks.push_back(net_link);
313  m_creditlinks.push_back(credit_link);
314 
316  std::max(m_routers[dest]->get_vc_per_vnet(),
317  m_routers[src]->get_vc_per_vnet()));
318 
319  /*
320  * We check if a bridge was enabled at any end of the link.
321  * The bridge is enabled if either of clock domain
322  * crossing (CDC) or Serializer-Deserializer(SerDes) unit is
323  * enabled for the link at each end. The bridge encapsulates
324  * the functionality for both CDC and SerDes and is a Consumer
325  * object similiar to a NetworkLink.
326  *
327  * If a bridge was enabled we connect the NI and Routers to
328  * bridge before connecting the link. Example, if a source
329  * bridge is enabled, we would connect:
330  * Router--->NetworkBridge--->GarnetIntLink---->Router
331  */
332  if (garnet_link->dstBridgeEn) {
333  DPRINTF(RubyNetwork, "Enable destination bridge for %s\n",
334  garnet_link->name());
335  m_routers[dest]->addInPort(dst_inport_dirn,
336  garnet_link->dstNetBridge, garnet_link->dstCredBridge);
337  } else {
338  m_routers[dest]->addInPort(dst_inport_dirn, net_link, credit_link);
339  }
340 
341  if (garnet_link->srcBridgeEn) {
342  DPRINTF(RubyNetwork, "Enable source bridge for %s\n",
343  garnet_link->name());
344  m_routers[src]->
345  addOutPort(src_outport_dirn, garnet_link->srcNetBridge,
346  routing_table_entry,
347  link->m_weight, garnet_link->srcCredBridge,
348  m_routers[dest]->get_vc_per_vnet());
349  } else {
350  m_routers[src]->addOutPort(src_outport_dirn, net_link,
351  routing_table_entry,
352  link->m_weight, credit_link,
353  m_routers[dest]->get_vc_per_vnet());
354  }
355 }
356 
357 // Total routers in the network
358 int
360 {
361  return m_routers.size();
362 }
363 
364 // Get ID of router connected to a NI.
365 int
366 GarnetNetwork::get_router_id(int global_ni, int vnet)
367 {
368  NodeID local_ni = getLocalNodeID(global_ni);
369 
370  return m_nis[local_ni]->get_router_id(vnet);
371 }
372 
373 void
375 {
377 
378  // Packets
381  .name(name() + ".packets_received")
384  ;
385 
388  .name(name() + ".packets_injected")
391  ;
392 
395  .name(name() + ".packet_network_latency")
397  ;
398 
401  .name(name() + ".packet_queueing_latency")
403  ;
404 
405  for (int i = 0; i < m_virtual_networks; i++) {
406  m_packets_received.subname(i, csprintf("vnet-%i", i));
407  m_packets_injected.subname(i, csprintf("vnet-%i", i));
410  }
411 
413  .name(name() + ".average_packet_vnet_latency")
417 
419  .name(name() + ".average_packet_vqueue_latency")
423 
425  .name(name() + ".average_packet_network_latency");
428 
430  .name(name() + ".average_packet_queueing_latency");
433 
435  .name(name() + ".average_packet_latency");
438 
439  // Flits
442  .name(name() + ".flits_received")
445  ;
446 
449  .name(name() + ".flits_injected")
452  ;
453 
456  .name(name() + ".flit_network_latency")
458  ;
459 
462  .name(name() + ".flit_queueing_latency")
464  ;
465 
466  for (int i = 0; i < m_virtual_networks; i++) {
467  m_flits_received.subname(i, csprintf("vnet-%i", i));
468  m_flits_injected.subname(i, csprintf("vnet-%i", i));
469  m_flit_network_latency.subname(i, csprintf("vnet-%i", i));
471  }
472 
474  .name(name() + ".average_flit_vnet_latency")
477 
479  .name(name() + ".average_flit_vqueue_latency")
483 
485  .name(name() + ".average_flit_network_latency");
488 
490  .name(name() + ".average_flit_queueing_latency");
493 
495  .name(name() + ".average_flit_latency");
498 
499 
500  // Hops
501  m_avg_hops.name(name() + ".average_hops");
503 
504  // Links
506  .name(name() + ".ext_in_link_utilization");
508  .name(name() + ".ext_out_link_utilization");
510  .name(name() + ".int_link_utilization");
512  .name(name() + ".avg_link_utilization");
515  .name(name() + ".avg_vc_load")
518  ;
519 
520  // Traffic distribution
521  for (int source = 0; source < m_routers.size(); ++source) {
522  m_data_traffic_distribution.push_back(
524  m_ctrl_traffic_distribution.push_back(
526 
527  for (int dest = 0; dest < m_routers.size(); ++dest) {
528  statistics::Scalar *data_packets = new statistics::Scalar();
529  statistics::Scalar *ctrl_packets = new statistics::Scalar();
530 
531  data_packets->name(name() + ".data_traffic_distribution." + "n" +
532  std::to_string(source) + "." + "n" + std::to_string(dest));
533  m_data_traffic_distribution[source].push_back(data_packets);
534 
535  ctrl_packets->name(name() + ".ctrl_traffic_distribution." + "n" +
536  std::to_string(source) + "." + "n" + std::to_string(dest));
537  m_ctrl_traffic_distribution[source].push_back(ctrl_packets);
538  }
539  }
540 }
541 
542 void
544 {
545  RubySystem *rs = params().ruby_system;
546  double time_delta = double(curCycle() - rs->getStartCycle());
547 
548  for (int i = 0; i < m_networklinks.size(); i++) {
549  link_type type = m_networklinks[i]->getType();
550  int activity = m_networklinks[i]->getLinkUtilization();
551 
552  if (type == EXT_IN_)
554  else if (type == EXT_OUT_)
556  else if (type == INT_)
557  m_total_int_link_utilization += activity;
558 
560  (double(activity) / time_delta);
561 
562  std::vector<unsigned int> vc_load = m_networklinks[i]->getVcLoad();
563  for (int j = 0; j < vc_load.size(); j++) {
564  m_average_vc_load[j] += ((double)vc_load[j] / time_delta);
565  }
566  }
567 
568  // Ask the routers to collate their statistics
569  for (int i = 0; i < m_routers.size(); i++) {
570  m_routers[i]->collateStats();
571  }
572 }
573 
574 void
576 {
577  for (int i = 0; i < m_routers.size(); i++) {
578  m_routers[i]->resetStats();
579  }
580  for (int i = 0; i < m_networklinks.size(); i++) {
581  m_networklinks[i]->resetStats();
582  }
583  for (int i = 0; i < m_creditlinks.size(); i++) {
584  m_creditlinks[i]->resetStats();
585  }
586 }
587 
588 void
589 GarnetNetwork::print(std::ostream& out) const
590 {
591  out << "[GarnetNetwork]";
592 }
593 
594 void
596 {
597  int src_node = route.src_router;
598  int dest_node = route.dest_router;
599  int vnet = route.vnet;
600 
601  if (m_vnet_type[vnet] == DATA_VNET_)
602  (*m_data_traffic_distribution[src_node][dest_node])++;
603  else
604  (*m_ctrl_traffic_distribution[src_node][dest_node])++;
605 }
606 
607 uint32_t
609 {
610  uint32_t num_functional_writes = 0;
611 
612  for (unsigned int i = 0; i < m_routers.size(); i++) {
613  num_functional_writes += m_routers[i]->functionalWrite(pkt);
614  }
615 
616  for (unsigned int i = 0; i < m_nis.size(); ++i) {
617  num_functional_writes += m_nis[i]->functionalWrite(pkt);
618  }
619 
620  for (unsigned int i = 0; i < m_networklinks.size(); ++i) {
621  num_functional_writes += m_networklinks[i]->functionalWrite(pkt);
622  }
623 
624  return num_functional_writes;
625 }
626 
627 } // namespace garnet
628 } // namespace ruby
629 } // 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:543
gem5::ruby::garnet::GarnetNetwork::m_next_packet_id
int m_next_packet_id
Definition: GarnetNetwork.hh:213
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:166
gem5::ruby::garnet::GarnetNetwork::m_avg_flit_network_latency
statistics::Formula m_avg_flit_network_latency
Definition: GarnetNetwork.hh:188
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: TypeDefines.hh:44
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:194
gem5::ruby::garnet::GarnetNetwork::m_vnet_type
std::vector< VNET_type > m_vnet_type
Definition: GarnetNetwork.hh:208
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:189
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:173
gem5::ruby::garnet::GarnetNetwork::m_total_ext_in_link_utilization
statistics::Scalar m_total_ext_in_link_utilization
Definition: GarnetNetwork.hh:192
gem5::ruby::garnet::GarnetNetwork::m_packets_injected
statistics::Vector m_packets_injected
Definition: GarnetNetwork.hh:171
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:167
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:210
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:161
gem5::ruby::garnet::GarnetNetwork::m_routers
std::vector< Router * > m_routers
Definition: GarnetNetwork.hh:209
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:193
gem5::ruby::garnet::GarnetNetwork::m_total_hops
statistics::Scalar m_total_hops
Definition: GarnetNetwork.hh:198
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:199
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:165
gem5::ruby::garnet::GarnetNetwork::m_avg_packet_vqueue_latency
statistics::Formula m_avg_packet_vqueue_latency
Definition: GarnetNetwork.hh:176
gem5::ruby::garnet::GarnetNetwork::m_nis
std::vector< NetworkInterface * > m_nis
Definition: GarnetNetwork.hh:212
gem5::ruby::garnet::GarnetNetwork::m_avg_flit_vnet_latency
statistics::Formula m_avg_flit_vnet_latency
Definition: GarnetNetwork.hh:186
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:175
gem5::Named::name
virtual std::string name() const
Definition: named.hh:47
gem5::VegaISA::p
Bitfield< 54 > p
Definition: pagetable.hh:70
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:201
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:291
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::X86ISA::type
type
Definition: misc.hh:727
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:111
gem5::ruby::garnet::GarnetNetwork::m_avg_packet_network_latency
statistics::Formula m_avg_packet_network_latency
Definition: GarnetNetwork.hh:177
gem5::ruby::garnet::GarnetNetwork::m_max_vcs_per_vnet
uint32_t m_max_vcs_per_vnet
Definition: GarnetNetwork.hh:163
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:300
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:162
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:178
gem5::ruby::garnet::GarnetNetwork::m_ctrl_traffic_distribution
std::vector< std::vector< statistics::Scalar * > > m_ctrl_traffic_distribution
Definition: GarnetNetwork.hh:202
gem5::ruby::garnet::GarnetNetwork::m_num_rows
int m_num_rows
Definition: GarnetNetwork.hh:160
compiler.hh
gem5::ruby::garnet::GarnetNetwork::m_creditlinks
std::vector< CreditLink * > m_creditlinks
Definition: GarnetNetwork.hh:211
gem5::ruby::garnet::GarnetNetwork::garnetVersion
const char * garnetVersion
Definition: GarnetNetwork.hh:69
gem5::ruby::SwitchID
unsigned int SwitchID
Definition: TypeDefines.hh:43
gem5::ruby::garnet::GarnetNetwork::makeExtInLink
void makeExtInLink(NodeID src, SwitchID dest, BasicLink *link, std::vector< NetDest > &routing_table_entry)
Definition: GarnetNetwork.cc:163
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:183
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:366
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:184
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:179
gem5::ruby::garnet::GarnetNetwork::m_packet_network_latency
statistics::Vector m_packet_network_latency
Definition: GarnetNetwork.hh:172
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:190
gem5::ruby::garnet::GarnetNetwork::m_flits_injected
statistics::Vector m_flits_injected
Definition: GarnetNetwork.hh:182
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:196
gem5::ruby::garnet::GarnetNetwork::getNumRouters
int getNumRouters()
Definition: GarnetNetwork.cc:359
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:195
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:181
gem5::ruby::garnet::GarnetNetwork::m_buffers_per_ctrl_vc
uint32_t m_buffers_per_ctrl_vc
Definition: GarnetNetwork.hh:164
gem5::ruby::garnet::GarnetNetwork::print
void print(std::ostream &out) const
Definition: GarnetNetwork.cc:589
gem5::ruby::NodeID
unsigned int NodeID
Definition: TypeDefines.hh:42
gem5::ruby::garnet::GarnetNetwork::update_traffic_distribution
void update_traffic_distribution(RouteInfo route)
Definition: GarnetNetwork.cc:595
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:229
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:608
gem5::ruby::garnet::GarnetNetwork::m_avg_flit_vqueue_latency
statistics::Formula m_avg_flit_vqueue_latency
Definition: GarnetNetwork.hh:187
gem5
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
Definition: gpu_translation_state.hh:37
gem5::ruby::garnet::GarnetNetwork::regStats
void regStats()
Callback to set stat parameters.
Definition: GarnetNetwork.cc:374
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:170
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:575
gem5::ArmISA::rs
Bitfield< 9, 8 > rs
Definition: misc_types.hh:377
Router.hh

Generated on Thu Jul 28 2022 13:32:35 for gem5 by doxygen 1.8.17