Skip to content

Commit

Permalink
mem-garnet: Upgrade garnet version to 3.0
Browse files Browse the repository at this point in the history
This version of garnet includes HeteroGarnet which
supports heterogenous interconnect systems, flexible
router and link configurations, and better debugging
resources.
This patch changes the garnet directory structure
to not include the version number. The user will be
informed about the garnet version being used.

Change-Id: Id4763421528305193ae0cd10c159b385a9513553
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/34259
Reviewed-by: Jason Lowe-Power <power.jg@gmail.com>
Maintainer: Jason Lowe-Power <power.jg@gmail.com>
Tested-by: kokoro <noreply+kokoro@google.com>
  • Loading branch information
srikantAmd authored and BobbyRBruce committed Sep 11, 2020
1 parent 1c3e411 commit 7957b1c
Show file tree
Hide file tree
Showing 39 changed files with 190 additions and 168 deletions.
25 changes: 17 additions & 8 deletions configs/network/Network.py
Expand Up @@ -31,7 +31,7 @@
import m5
from m5.objects import *
from m5.defines import buildEnv
from m5.util import addToPath, fatal
from m5.util import addToPath, fatal, warn

def define_options(parser):
# By default, ruby uses the simple timing cpu
Expand All @@ -42,8 +42,9 @@ def define_options(parser):
parser.add_option("--mesh-rows", type="int", default=0,
help="the number of rows in the mesh topology")
parser.add_option("--network", type="choice", default="simple",
choices=['simple', 'garnet2.0'],
help="'simple'|'garnet2.0'")
choices=['simple', 'garnet'],
help="""'simple'|'garnet' (garnet2.0 will be
deprecated.)""")
parser.add_option("--router-latency", action="store", type="int",
default=1,
help="""number of pipeline stages in the garnet router.
Expand All @@ -65,8 +66,8 @@ def define_options(parser):
default=0,
help="""routing algorithm in network.
0: weight-based table
1: XY (for Mesh. see garnet2.0/RoutingUnit.cc)
2: Custom (see garnet2.0/RoutingUnit.cc""")
1: XY (for Mesh. see garnet/RoutingUnit.cc)
2: Custom (see garnet/RoutingUnit.cc""")
parser.add_option("--network-fault-model", action="store_true",
default=False,
help="""enable network fault model:
Expand All @@ -77,8 +78,16 @@ def define_options(parser):

def create_network(options, ruby):

# Set the network classes based on the command line options
# Allow legacy users to use garnet through garnet2.0 option
# until next gem5 release.
if options.network == "garnet2.0":
warn("Usage of option 'garnet2.0' will be depracated. " \
"Please use 'garnet' for using the latest garnet " \
"version. Current version: 3.0")
options.network = "garnet"

# Set the network classes based on the command line options
if options.network == "garnet":
NetworkClass = GarnetNetwork
IntLinkClass = GarnetIntLink
ExtLinkClass = GarnetExtLink
Expand All @@ -101,7 +110,7 @@ def create_network(options, ruby):

def init_network(options, network, InterfaceClass):

if options.network == "garnet2.0":
if options.network == "garnet":
network.num_rows = options.mesh_rows
network.vcs_per_vnet = options.vcs_per_vnet
network.ni_flit_size = options.link_width_bits / 8
Expand Down Expand Up @@ -181,6 +190,6 @@ def init_network(options, network, InterfaceClass):
network.netifs = netifs

if options.network_fault_model:
assert(options.network == "garnet2.0")
assert(options.network == "garnet")
network.enable_fault_model = True
network.fault_model = FaultModel()
Expand Up @@ -28,8 +28,8 @@
*/


#ifndef __MEM_RUBY_NETWORK_GARNET2_0_COMMONTYPES_HH__
#define __MEM_RUBY_NETWORK_GARNET2_0_COMMONTYPES_HH__
#ifndef __MEM_RUBY_NETWORK_GARNET_0_COMMONTYPES_HH__
#define __MEM_RUBY_NETWORK_GARNET_0_COMMONTYPES_HH__

#include "mem/ruby/common/NetDest.hh"

Expand Down Expand Up @@ -65,4 +65,4 @@ struct RouteInfo

#define INFINITE_ 10000

#endif //__MEM_RUBY_NETWORK_GARNET2_0_COMMONTYPES_HH__
#endif //__MEM_RUBY_NETWORK_GARNET_0_COMMONTYPES_HH__
Expand Up @@ -27,7 +27,7 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

#include "mem/ruby/network/garnet2.0/Credit.hh"
#include "mem/ruby/network/garnet/Credit.hh"

#include "base/trace.hh"
#include "debug/RubyNetwork.hh"
Expand Down
Expand Up @@ -28,15 +28,15 @@
*/


#ifndef __MEM_RUBY_NETWORK_GARNET2_0_CREDIT_HH__
#define __MEM_RUBY_NETWORK_GARNET2_0_CREDIT_HH__
#ifndef __MEM_RUBY_NETWORK_GARNET_0_CREDIT_HH__
#define __MEM_RUBY_NETWORK_GARNET_0_CREDIT_HH__

#include <cassert>
#include <iostream>

#include "base/types.hh"
#include "mem/ruby/network/garnet2.0/CommonTypes.hh"
#include "mem/ruby/network/garnet2.0/flit.hh"
#include "mem/ruby/network/garnet/CommonTypes.hh"
#include "mem/ruby/network/garnet/flit.hh"

// Credit Signal for buffers inside VC
// Carries m_vc (inherits from flit.hh)
Expand All @@ -61,4 +61,4 @@ class Credit : public flit
bool m_is_free_signal;
};

#endif // __MEM_RUBY_NETWORK_GARNET2_0_CREDIT_HH__
#endif // __MEM_RUBY_NETWORK_GARNET_0_CREDIT_HH__
Expand Up @@ -28,10 +28,10 @@
*/


#ifndef __MEM_RUBY_NETWORK_GARNET2_0_CREDITLINK_HH__
#define __MEM_RUBY_NETWORK_GARNET2_0_CREDITLINK_HH__
#ifndef __MEM_RUBY_NETWORK_GARNET_0_CREDITLINK_HH__
#define __MEM_RUBY_NETWORK_GARNET_0_CREDITLINK_HH__

#include "mem/ruby/network/garnet2.0/NetworkLink.hh"
#include "mem/ruby/network/garnet/NetworkLink.hh"
#include "params/CreditLink.hh"

class CreditLink : public NetworkLink
Expand All @@ -41,4 +41,4 @@ class CreditLink : public NetworkLink
CreditLink(const Params *p) : NetworkLink(p) {}
};

#endif // __MEM_RUBY_NETWORK_GARNET2_0_CREDITLINK_HH__
#endif // __MEM_RUBY_NETWORK_GARNET_0_CREDITLINK_HH__
Expand Up @@ -29,11 +29,11 @@
*/


#include "mem/ruby/network/garnet2.0/CrossbarSwitch.hh"
#include "mem/ruby/network/garnet/CrossbarSwitch.hh"

#include "debug/RubyNetwork.hh"
#include "mem/ruby/network/garnet2.0/OutputUnit.hh"
#include "mem/ruby/network/garnet2.0/Router.hh"
#include "mem/ruby/network/garnet/OutputUnit.hh"
#include "mem/ruby/network/garnet/Router.hh"

CrossbarSwitch::CrossbarSwitch(Router *router)
: Consumer(router), m_router(router), m_num_vcs(m_router->get_num_vcs()),
Expand Down
Expand Up @@ -29,15 +29,15 @@
*/


#ifndef __MEM_RUBY_NETWORK_GARNET2_0_CROSSBARSWITCH_HH__
#define __MEM_RUBY_NETWORK_GARNET2_0_CROSSBARSWITCH_HH__
#ifndef __MEM_RUBY_NETWORK_GARNET_0_CROSSBARSWITCH_HH__
#define __MEM_RUBY_NETWORK_GARNET_0_CROSSBARSWITCH_HH__

#include <iostream>
#include <vector>

#include "mem/ruby/common/Consumer.hh"
#include "mem/ruby/network/garnet2.0/CommonTypes.hh"
#include "mem/ruby/network/garnet2.0/flitBuffer.hh"
#include "mem/ruby/network/garnet/CommonTypes.hh"
#include "mem/ruby/network/garnet/flitBuffer.hh"

class Router;

Expand Down Expand Up @@ -68,4 +68,4 @@ class CrossbarSwitch : public Consumer
std::vector<flitBuffer> switchBuffers;
};

#endif // __MEM_RUBY_NETWORK_GARNET2_0_CROSSBARSWITCH_HH__
#endif // __MEM_RUBY_NETWORK_GARNET_0_CROSSBARSWITCH_HH__
Expand Up @@ -28,12 +28,12 @@
*/


#include "mem/ruby/network/garnet2.0/GarnetLink.hh"
#include "mem/ruby/network/garnet/GarnetLink.hh"

#include "debug/RubyNetwork.hh"
#include "mem/ruby/network/garnet2.0/CreditLink.hh"
#include "mem/ruby/network/garnet2.0/NetworkBridge.hh"
#include "mem/ruby/network/garnet2.0/NetworkLink.hh"
#include "mem/ruby/network/garnet/CreditLink.hh"
#include "mem/ruby/network/garnet/NetworkBridge.hh"
#include "mem/ruby/network/garnet/NetworkLink.hh"

GarnetIntLink::GarnetIntLink(const Params *p)
: BasicIntLink(p)
Expand Down
Expand Up @@ -28,17 +28,17 @@
*/


#ifndef __MEM_RUBY_NETWORK_GARNET2_0_GARNETLINK_HH__
#define __MEM_RUBY_NETWORK_GARNET2_0_GARNETLINK_HH__
#ifndef __MEM_RUBY_NETWORK_GARNET_0_GARNETLINK_HH__
#define __MEM_RUBY_NETWORK_GARNET_0_GARNETLINK_HH__

#include <iostream>
#include <string>
#include <vector>

#include "mem/ruby/network/BasicLink.hh"
#include "mem/ruby/network/garnet2.0/CreditLink.hh"
#include "mem/ruby/network/garnet2.0/NetworkBridge.hh"
#include "mem/ruby/network/garnet2.0/NetworkLink.hh"
#include "mem/ruby/network/garnet/CreditLink.hh"
#include "mem/ruby/network/garnet/NetworkBridge.hh"
#include "mem/ruby/network/garnet/NetworkLink.hh"
#include "params/GarnetExtLink.hh"
#include "params/GarnetIntLink.hh"

Expand Down Expand Up @@ -123,4 +123,4 @@ operator<<(std::ostream& out, const GarnetExtLink& obj)
return out;
}

#endif //__MEM_RUBY_NETWORK_GARNET2_0_GARNETLINK_HH__
#endif //__MEM_RUBY_NETWORK_GARNET_0_GARNETLINK_HH__
Expand Up @@ -37,7 +37,7 @@ class CDCType(Enum): vals = [

class NetworkLink(ClockedObject):
type = 'NetworkLink'
cxx_header = "mem/ruby/network/garnet2.0/NetworkLink.hh"
cxx_header = "mem/ruby/network/garnet/NetworkLink.hh"
link_id = Param.Int(Parent.link_id, "link id")
link_latency = Param.Cycles(Parent.latency, "link latency")
vcs_per_vnet = Param.Int(Parent.vcs_per_vnet,
Expand All @@ -50,11 +50,11 @@ class NetworkLink(ClockedObject):

class CreditLink(NetworkLink):
type = 'CreditLink'
cxx_header = "mem/ruby/network/garnet2.0/CreditLink.hh"
cxx_header = "mem/ruby/network/garnet/CreditLink.hh"

class NetworkBridge(CreditLink):
type = 'NetworkBridge'
cxx_header = "mem/ruby/network/garnet2.0/NetworkBridge.hh"
cxx_header = "mem/ruby/network/garnet/NetworkBridge.hh"
link = Param.NetworkLink("Associated Network Link")
vtype = Param.CDCType('LINK_OBJECT',
"Direction of CDC LINK->OBJECT or OBJECT->LINK")
Expand All @@ -64,7 +64,7 @@ class NetworkBridge(CreditLink):
# Interior fixed pipeline links between routers
class GarnetIntLink(BasicIntLink):
type = 'GarnetIntLink'
cxx_header = "mem/ruby/network/garnet2.0/GarnetLink.hh"
cxx_header = "mem/ruby/network/garnet/GarnetLink.hh"
# The internal link includes one forward link (for flit)
# and one backward flow-control link (for credit)
network_link = Param.NetworkLink(NetworkLink(), "forward link")
Expand Down Expand Up @@ -101,7 +101,7 @@ class GarnetIntLink(BasicIntLink):
# Exterior fixed pipeline links between a router and a controller
class GarnetExtLink(BasicExtLink):
type = 'GarnetExtLink'
cxx_header = "mem/ruby/network/garnet2.0/GarnetLink.hh"
cxx_header = "mem/ruby/network/garnet/GarnetLink.hh"
# The external link is bi-directional.
# It includes two forward links (for flits)
# and two backward flow-control links (for credits),
Expand Down
Expand Up @@ -29,20 +29,20 @@
*/


#include "mem/ruby/network/garnet2.0/GarnetNetwork.hh"
#include "mem/ruby/network/garnet/GarnetNetwork.hh"

#include <cassert>

#include "base/cast.hh"
#include "debug/RubyNetwork.hh"
#include "mem/ruby/common/NetDest.hh"
#include "mem/ruby/network/MessageBuffer.hh"
#include "mem/ruby/network/garnet2.0/CommonTypes.hh"
#include "mem/ruby/network/garnet2.0/CreditLink.hh"
#include "mem/ruby/network/garnet2.0/GarnetLink.hh"
#include "mem/ruby/network/garnet2.0/NetworkInterface.hh"
#include "mem/ruby/network/garnet2.0/NetworkLink.hh"
#include "mem/ruby/network/garnet2.0/Router.hh"
#include "mem/ruby/network/garnet/CommonTypes.hh"
#include "mem/ruby/network/garnet/CreditLink.hh"
#include "mem/ruby/network/garnet/GarnetLink.hh"
#include "mem/ruby/network/garnet/NetworkInterface.hh"
#include "mem/ruby/network/garnet/NetworkLink.hh"
#include "mem/ruby/network/garnet/Router.hh"
#include "mem/ruby/system/RubySystem.hh"

using namespace std;
Expand Down Expand Up @@ -93,6 +93,9 @@ GarnetNetwork::GarnetNetwork(const Params *p)
m_nis.push_back(ni);
ni->init_net_ptr(this);
}

// Print Garnet version
inform("Garnet version %s\n", garnetVersion);
}

void
Expand Down
Expand Up @@ -29,15 +29,15 @@
*/


#ifndef __MEM_RUBY_NETWORK_GARNET2_0_GARNETNETWORK_HH__
#define __MEM_RUBY_NETWORK_GARNET2_0_GARNETNETWORK_HH__
#ifndef __MEM_RUBY_NETWORK_GARNET_0_GARNETNETWORK_HH__
#define __MEM_RUBY_NETWORK_GARNET_0_GARNETNETWORK_HH__

#include <iostream>
#include <vector>

#include "mem/ruby/network/Network.hh"
#include "mem/ruby/network/fault_model/FaultModel.hh"
#include "mem/ruby/network/garnet2.0/CommonTypes.hh"
#include "mem/ruby/network/garnet/CommonTypes.hh"
#include "params/GarnetNetwork.hh"

class FaultModel;
Expand All @@ -56,6 +56,8 @@ class GarnetNetwork : public Network

void init();

const char *garnetVersion = "3.0";

// Configuration (set externally)

// for 2D topology
Expand Down Expand Up @@ -202,4 +204,4 @@ operator<<(std::ostream& out, const GarnetNetwork& obj)
return out;
}

#endif //__MEM_RUBY_NETWORK_GARNET2_0_GARNETNETWORK_HH__
#endif //__MEM_RUBY_NETWORK_GARNET_0_GARNETNETWORK_HH__
Expand Up @@ -36,7 +36,7 @@

class GarnetNetwork(RubyNetwork):
type = 'GarnetNetwork'
cxx_header = "mem/ruby/network/garnet2.0/GarnetNetwork.hh"
cxx_header = "mem/ruby/network/garnet/GarnetNetwork.hh"
num_rows = Param.Int(0, "number of rows if 2D (mesh/torus/..) topology");
ni_flit_size = Param.UInt32(16, "network interface flit size in bytes")
vcs_per_vnet = Param.UInt32(4, "virtual channels per virtual network");
Expand All @@ -52,7 +52,7 @@ class GarnetNetwork(RubyNetwork):
class GarnetNetworkInterface(ClockedObject):
type = 'GarnetNetworkInterface'
cxx_class = 'NetworkInterface'
cxx_header = "mem/ruby/network/garnet2.0/NetworkInterface.hh"
cxx_header = "mem/ruby/network/garnet/NetworkInterface.hh"

id = Param.UInt32("ID in relation to other network interfaces")
vcs_per_vnet = Param.UInt32(Parent.vcs_per_vnet,
Expand All @@ -65,7 +65,7 @@ class GarnetNetworkInterface(ClockedObject):
class GarnetRouter(BasicRouter):
type = 'GarnetRouter'
cxx_class = 'Router'
cxx_header = "mem/ruby/network/garnet2.0/Router.hh"
cxx_header = "mem/ruby/network/garnet/Router.hh"
vcs_per_vnet = Param.UInt32(Parent.vcs_per_vnet,
"virtual channels per virtual network")
virt_nets = Param.UInt32(Parent.number_of_virtual_networks,
Expand Down
Expand Up @@ -29,11 +29,11 @@
*/


#include "mem/ruby/network/garnet2.0/InputUnit.hh"
#include "mem/ruby/network/garnet/InputUnit.hh"

#include "debug/RubyNetwork.hh"
#include "mem/ruby/network/garnet2.0/Credit.hh"
#include "mem/ruby/network/garnet2.0/Router.hh"
#include "mem/ruby/network/garnet/Credit.hh"
#include "mem/ruby/network/garnet/Router.hh"

using namespace std;

Expand Down

0 comments on commit 7957b1c

Please sign in to comment.