gem5 v24.0.0.0
Loading...
Searching...
No Matches
Topology.hh
Go to the documentation of this file.
1/*
2 * Copyright (c) 2020 Advanced Micro Devices, Inc.
3 * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are
8 * met: redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer;
10 * redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution;
13 * neither the name of the copyright holders nor the names of its
14 * contributors may be used to endorse or promote products derived from
15 * this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 */
29
30/*
31 * The topology here is configurable; it can be a hierachical (default
32 * one) or a 2D torus or a 2D torus with half switches killed. I think
33 * all input port has a one-input-one-output switch connected just to
34 * control and bandwidth, since we don't control bandwidth on input
35 * ports. Basically, the class has a vector of nodes and edges. First
36 * 2*m_nodes elements in the node vector are input and output
37 * ports. Edges are represented in two vectors of src and dest
38 * nodes. All edges have latency.
39 */
40
41#ifndef __MEM_RUBY_NETWORK_TOPOLOGY_HH__
42#define __MEM_RUBY_NETWORK_TOPOLOGY_HH__
43
44#include <iostream>
45#include <vector>
46
49#include "mem/ruby/protocol/LinkDirection.hh"
50
51namespace gem5
52{
53
54namespace ruby
55{
56
57class NetDest;
58class Network;
59
60/*
61 * We use a three-dimensional vector matrix for calculating
62 * the shortest paths for each pair of source and destination
63 * and for each type of virtual network. The three dimensions
64 * represent the source ID, destination ID, and vnet number.
65 */
67
74
75typedef std::map<std::pair<SwitchID, SwitchID>,
77
79{
80 public:
81 Topology(uint32_t num_nodes, uint32_t num_routers, uint32_t num_vnets,
82 const std::vector<BasicExtLink *> &ext_links,
83 const std::vector<BasicIntLink *> &int_links);
84
85 uint32_t numSwitches() const { return m_number_of_switches; }
86 void createLinks(Network *net);
87 void print(std::ostream& out) const { out << "[Topology]"; }
88
89 private:
90 void addLink(SwitchID src, SwitchID dest, BasicLink* link,
91 PortDirection src_outport_dirn = "",
92 PortDirection dest_inport_dirn = "");
93 void makeLink(Network *net, SwitchID src, SwitchID dest,
94 std::vector<NetDest>& routing_table_entry);
95
96 // Helper functions based on chapter 29 of Cormen et al.
97 void extend_shortest_path(Matrix &current_dist, Matrix &latencies,
98 Matrix &inter_switches);
99
100 Matrix shortest_path(const Matrix &weights,
101 Matrix &latencies, Matrix &inter_switches);
102
104 SwitchID final, const Matrix &weights, const Matrix &dist,
105 int vnet);
106
108 const Matrix &weights, const Matrix &dist,
109 int vnet);
110
111 const uint32_t m_nodes;
112 const uint32_t m_number_of_switches;
114
117
119};
120
121inline std::ostream&
122operator<<(std::ostream& out, const Topology& obj)
123{
124 obj.print(out);
125 out << std::flush;
126 return out;
127}
128
129} // namespace ruby
130} // namespace gem5
131
132#endif // __MEM_RUBY_NETWORK_TOPOLOGY_HH__
std::vector< BasicIntLink * > m_int_link_vector
Definition Topology.hh:116
uint32_t numSwitches() const
Definition Topology.hh:85
void makeLink(Network *net, SwitchID src, SwitchID dest, std::vector< NetDest > &routing_table_entry)
Definition Topology.cc:250
void print(std::ostream &out) const
Definition Topology.hh:87
void addLink(SwitchID src, SwitchID dest, BasicLink *link, PortDirection src_outport_dirn="", PortDirection dest_inport_dirn="")
Definition Topology.cc:218
const uint32_t m_number_of_switches
Definition Topology.hh:112
const uint32_t m_nodes
Definition Topology.hh:111
void createLinks(Network *net)
Definition Topology.cc:115
void extend_shortest_path(Matrix &current_dist, Matrix &latencies, Matrix &inter_switches)
Definition Topology.cc:336
std::vector< BasicExtLink * > m_ext_link_vector
Definition Topology.hh:115
Topology(uint32_t num_nodes, uint32_t num_routers, uint32_t num_vnets, const std::vector< BasicExtLink * > &ext_links, const std::vector< BasicIntLink * > &int_links)
Definition Topology.cc:56
bool link_is_shortest_path_to_node(SwitchID src, SwitchID next, SwitchID final, const Matrix &weights, const Matrix &dist, int vnet)
Definition Topology.cc:403
Matrix shortest_path(const Matrix &weights, Matrix &latencies, Matrix &inter_switches)
Definition Topology.cc:394
NetDest shortest_path_to_node(SwitchID src, SwitchID next, const Matrix &weights, const Matrix &dist, int vnet)
Definition Topology.cc:412
STL vector class.
Definition stl.hh:37
std::vector< std::vector< std::vector< int > > > Matrix
Definition Topology.hh:66
unsigned int SwitchID
std::string PortDirection
std::ostream & operator<<(std::ostream &os, const BoolVec &myvector)
Definition BoolVec.cc:49
std::map< std::pair< SwitchID, SwitchID >, std::vector< LinkEntry > > LinkMap
Definition Topology.hh:76
const FlagsType dist
Print the distribution.
Definition info.hh:65
Copyright (c) 2024 - Pranith Kumar Copyright (c) 2020 Inria All rights reserved.
Definition binary32.hh:36
PortDirection dst_inport_dirn
Definition Topology.hh:72
PortDirection src_outport_dirn
Definition Topology.hh:71

Generated on Tue Jun 18 2024 16:24:05 for gem5 by doxygen 1.11.0