Again, #if 0 in several places.  This related to garnet?

  Nate

On Sat, Dec 12, 2009 at 2:37 PM, Brad Beckmann <brad.beckm...@amd.com> wrote:
> # HG changeset patch
> # User Brad Beckmann <brad.beckm...@amd.com>
> # Date 1260657435 28800
> # Node ID e657fd802abe54b28a19e2c851e8b3f700b10293
> # Parent  f164db9baf4ad51cf790ea3b134fed28f4e3d026
> ruby: Add support for generating topologies in Python.
>
> diff -r f164db9baf4a -r e657fd802abe configs/example/memtest-ruby.py
> --- a/configs/example/memtest-ruby.py   Sat Dec 12 14:37:15 2009 -0800
> +++ b/configs/example/memtest-ruby.py   Sat Dec 12 14:37:15 2009 -0800
> @@ -104,24 +104,35 @@
>     latency = 15
>     size = 1048576
>
> -class CrossbarTopology(Topology):
> -    connections="hi"
> +# It would be nice to lump all the network nodes into a single list,
> +# but for consistency with the old scripts I'm segregating them by
> +# type.  I'm not sure if this is really necessary or not.
> +
> +# net_nodes = []
> +l1_cntrl_nodes = []
> +dir_cntrl_nodes = []
>
> - for cpu in cpus:
> +for cpu in cpus:
>     l1_cntrl = L1Cache_Controller()
> -    cpu_seq = RubySequencer(controller=l1_cntrl,
> -                            icache=L1Cache(controller=l1_cntrl),
> -                            dcache=L1Cache(controller=l1_cntrl))
> +    cpu_seq = RubySequencer(controller = l1_cntrl,
> +                            icache = L1Cache(controller = l1_cntrl),
> +                            dcache = L1Cache(controller = l1_cntrl))
>     cpu.controller = l1_cntrl
>     cpu.sequencer = cpu_seq
>     cpu.test = cpu_seq.port
>     cpu_seq.funcmem_port = system.physmem.port
>     cpu.functional = system.funcmem.port
>
> -    dir_cntrl = Directory_Controller(directory=RubyDirectoryMemory(),
> -                                     memory_control=RubyMemoryControl())
> +    dir_cntrl = Directory_Controller(version = i,
> +                                     directory = RubyDirectoryMemory(),
> +                                     memory_control = RubyMemoryControl())
>
> -network = SimpleNetwork(topology=CrossbarTopology())
> +    # net_nodes += [l1_cntrl, dir_cntrl]
> +    l1_cntrl_nodes.append(l1_cntrl)
> +    dir_cntrl_nodes.append(dir_cntrl)
> +
> +network = SimpleNetwork(topology = makeCrossbar(l1_cntrl_nodes + \
> +                                                dir_cntrl_nodes))
>
>  system.ruby = RubySystem(network = network,
>                          profiler = RubyProfiler(),
> diff -r f164db9baf4a -r e657fd802abe src/mem/ruby/network/Network.py
> --- a/src/mem/ruby/network/Network.py   Sat Dec 12 14:37:15 2009 -0800
> +++ b/src/mem/ruby/network/Network.py   Sat Dec 12 14:37:15 2009 -0800
> @@ -1,13 +1,42 @@
>  from m5.params import *
>  from m5.SimObject import SimObject
>
> +class Link(SimObject):
> +    type = 'Link'
> +    latency = Param.Int(1, "")
> +    bw_multiplier = Param.Int("")
> +    weight = Param.Int(1, "")
> +
> +class ExtLink(Link):
> +    type = 'ExtLink'
> +    ext_node = Param.RubyController("External node")
> +    int_node = Param.Int("ID of internal node")
> +    bw_multiplier = 64
> +
> +class IntLink(Link):
> +    type = 'IntLink'
> +    node_a = Param.Int("ID of internal node on one end")
> +    node_b = Param.Int("ID of internal node on other end")
> +    bw_multiplier = 16
> +
>  class Topology(SimObject):
>     type = 'Topology'
> -    connections = Param.String("")
> +    ext_links = VectorParam.ExtLink("Links to external nodes")
> +    int_links = VectorParam.IntLink("Links between internal nodes")
> +    num_int_nodes = Param.Int("Nunber of internal nodes")
>     print_config = Param.Bool(False, "")
>
> +def makeCrossbar(nodes):
> +    ext_links = [ExtLink(ext_node=n, int_node=i)
> +                 for (i, n) in enumerate(nodes)]
> +    xbar = len(nodes) # node ID for crossbar switch
> +    int_links = [IntLink(node_a=i, node_b=xbar) for i in range(len(nodes))]
> +    return Topology(ext_links=ext_links, int_links=int_links,
> +                    num_int_nodes=len(nodes)+1)
> +
>  class RubyNetwork(SimObject):
>     type = 'RubyNetwork'
> +    cxx_class = 'Network'
>     abstract = True
>     number_of_virtual_networks = Param.Int(10, "");
>     topology = Param.Topology("");
> diff -r f164db9baf4a -r e657fd802abe 
> src/mem/ruby/network/garnet-fixed-pipeline/GarnetNetwork_d.cc
> --- a/src/mem/ruby/network/garnet-fixed-pipeline/GarnetNetwork_d.cc     Sat 
> Dec 12 14:37:15 2009 -0800
> +++ b/src/mem/ruby/network/garnet-fixed-pipeline/GarnetNetwork_d.cc     Sat 
> Dec 12 14:37:15 2009 -0800
> @@ -96,7 +96,7 @@
>                 ni->addNode(m_toNetQueues[i], m_fromNetQueues[i]);
>                 m_ni_ptr_vector.insertAtBottom(ni);
>         }
> -        m_topology_ptr->createLinks(false);  // false because this isn't a 
> reconfiguration
> +        m_topology_ptr->createLinks(this, false);  // false because this 
> isn't a reconfiguration
>         for(int i = 0; i < m_router_ptr_vector.size(); i++)
>         {
>                 m_router_ptr_vector[i]->init();
> diff -r f164db9baf4a -r e657fd802abe 
> src/mem/ruby/network/garnet-flexible-pipeline/GarnetNetwork.cc
> --- a/src/mem/ruby/network/garnet-flexible-pipeline/GarnetNetwork.cc    Sat 
> Dec 12 14:37:15 2009 -0800
> +++ b/src/mem/ruby/network/garnet-flexible-pipeline/GarnetNetwork.cc    Sat 
> Dec 12 14:37:15 2009 -0800
> @@ -95,7 +95,7 @@
>                 ni->addNode(m_toNetQueues[i], m_fromNetQueues[i]);
>                 m_ni_ptr_vector.insertAtBottom(ni);
>         }
> -        m_topology_ptr->createLinks(false);  // false because this isn't a 
> reconfiguration
> +        m_topology_ptr->createLinks(this, false);  // false because this 
> isn't a reconfiguration
>  }
>
>  GarnetNetwork::~GarnetNetwork()
> diff -r f164db9baf4a -r e657fd802abe 
> src/mem/ruby/network/simple/CustomTopology.cc
> --- a/src/mem/ruby/network/simple/CustomTopology.cc     Sat Dec 12 14:37:15 
> 2009 -0800
> +++ b/src/mem/ruby/network/simple/CustomTopology.cc     Sat Dec 12 14:37:15 
> 2009 -0800
> @@ -23,6 +23,7 @@
>     endpointConnectionExist[k] = false;
>   }
>
> +#if 0
>   stringstream networkFile( m_connections );
>
>   string line = "";
> @@ -121,6 +122,7 @@
>       }
>     }
>   } // end of file
> +#endif
>
>   // makes sure all enpoints are connected in the soon to be created network
>   for (int k = 0; k < endpointConnectionExist.size(); k++) {
> diff -r f164db9baf4a -r e657fd802abe 
> src/mem/ruby/network/simple/SimpleNetwork.cc
> --- a/src/mem/ruby/network/simple/SimpleNetwork.cc      Sat Dec 12 14:37:15 
> 2009 -0800
> +++ b/src/mem/ruby/network/simple/SimpleNetwork.cc      Sat Dec 12 14:37:15 
> 2009 -0800
> @@ -62,8 +62,6 @@
>  SimpleNetwork::SimpleNetwork(const Params *p)
>     : Network(p)
>  {
> -  m_virtual_networks = 0;
> -  m_topology_ptr = NULL;
>  }
>
>  void SimpleNetwork::init()
> @@ -101,7 +99,7 @@
>   for (int i=0; i<number_of_switches; i++) {
>     m_switch_ptr_vector.insertAtBottom(new Switch(i, this));
>   }
> -  m_topology_ptr->createLinks(false);  // false because this isn't a 
> reconfiguration
> +  m_topology_ptr->createLinks(this, false);  // false because this isn't a 
> reconfiguration
>  }
>
>  void SimpleNetwork::reset()
> diff -r f164db9baf4a -r e657fd802abe src/mem/ruby/network/simple/Topology.cc
> --- a/src/mem/ruby/network/simple/Topology.cc   Sat Dec 12 14:37:15 2009 -0800
> +++ b/src/mem/ruby/network/simple/Topology.cc   Sat Dec 12 14:37:15 2009 -0800
> @@ -39,6 +39,7 @@
>  #include "mem/ruby/network/simple/Topology.hh"
>  #include "mem/ruby/common/NetDest.hh"
>  #include "mem/ruby/network/Network.hh"
> +#include "mem/ruby/slicc_interface/AbstractController.hh"
>  #include "mem/protocol/TopologyType.hh"
>  #include "mem/gems_common/util.hh"
>  #include "mem/protocol/MachineType.hh"
> @@ -65,19 +66,29 @@
>  Topology::Topology(const Params *p)
>     : SimObject(p)
>  {
> -//    m_network_ptr = p->network;
> -    m_connections = p->connections;
>     m_print_config = p->print_config;
> -  m_nodes = MachineType_base_number(MachineType_NUM);
> -  m_number_of_switches = 0;
> +    m_number_of_switches = p->num_int_nodes;
> +  // initialize component latencies record
> +  m_component_latencies.setSize(0);
> +  m_component_inter_switches.setSize(0);
>  }
>
>  void Topology::init()
>  {
> +    // need to defer this until init, to guarantee that constructors
> +    // for all the controller objects have been called.
> +    m_nodes = MachineType_base_number(MachineType_NUM);
>  }
>
>  void Topology::makeTopology()
>  {
> +    if (m_nodes != params()->ext_links.size()) {
> +        fatal("m_nodes (%d) != ext_links vector length (%d)\n",
> +              m_nodes != params()->ext_links.size());
> +    }
> +
> +
> +
>   /*
>   if (m_nodes == 1) {
>     SwitchID id = newSwitchID();
> @@ -95,6 +106,7 @@
>   Vector< SwitchID > int_network_switches;  // internal switches extracted 
> from the file
>   Vector<bool> endpointConnectionExist;  // used to ensure all endpoints are 
> connected to the network
>
> +#if 0
>   endpointConnectionExist.setSize(m_nodes);
>
>   // initialize endpoint check vector
> @@ -201,6 +213,7 @@
>     }
>   } // end of file
>
> +
>   // makes sure all enpoints are connected in the soon to be created network
>   for (int k = 0; k < endpointConnectionExist.size(); k++) {
>     if (endpointConnectionExist[k] == false) {
> @@ -210,18 +223,39 @@
>   }
>
>   ASSERT(nodePairs.size() == latencies.size() && latencies.size() == 
> bw_multis.size() && latencies.size() == weights.size())
> +
>   for (int k = 0; k < nodePairs.size(); k++) {
> -    ASSERT(nodePairs[k].size() == 2);
>     addLink(nodePairs[k][0], nodePairs[k][1], latencies[k], bw_multis[k], 
> weights[k]);
>   }
> +#endif
>
> -  // initialize component latencies record
> -  m_component_latencies.setSize(0);
> -  m_component_inter_switches.setSize(0);
> +  for (vector<ExtLink*>::const_iterator i = params()->ext_links.begin();
> +       i != params()->ext_links.end(); ++i)
> +  {
> +      const ExtLinkParams *p = (*i)->params();
> +      AbstractController *c = p->ext_node;
> +      int ext_idx1 =
> +          MachineType_base_number(c->getMachineType()) + c->getVersion();
> +      int ext_idx2 = ext_idx1 + m_nodes;
> +      int int_idx = p->int_node + 2*m_nodes;
> +
> +      addLink(ext_idx1, int_idx, p->latency, p->bw_multiplier, p->weight);
> +      addLink(int_idx, ext_idx2, p->latency, p->bw_multiplier, p->weight);
> +  }
> +
> +  for (vector<IntLink*>::const_iterator i = params()->int_links.begin();
> +       i != params()->int_links.end(); ++i)
> +  {
> +      const IntLinkParams *p = (*i)->params();
> +      int a = p->node_a + 2*m_nodes;
> +      int b = p->node_b + 2*m_nodes;
> +      addLink(a, b, p->latency, p->bw_multiplier, p->weight);
> +      addLink(b, a, p->latency, p->bw_multiplier, p->weight);
> +  }
>  }
>
>
> -void Topology::createLinks(bool isReconfiguration)
> +void Topology::createLinks(Network *net, bool isReconfiguration)
>  {
>   // Find maximum switchID
>
> @@ -279,7 +313,7 @@
>       if (weight > 0 && weight != INFINITE_LATENCY) {
>         NetDest destination_set = shortest_path_to_node(i, j, 
> topology_weights, dist);
>         assert(latency != -1);
> -        makeLink(i, j, destination_set, latency, weight, bw_multiplier, 
> isReconfiguration);
> +        makeLink(net, i, j, destination_set, latency, weight, bw_multiplier, 
> isReconfiguration);
>       }
>     }
>   }
> @@ -303,6 +337,7 @@
>
>  void Topology::addLink(SwitchID src, SwitchID dest, int link_latency, int 
> bw_multiplier, int link_weight)
>  {
> +    cprintf("addLink(%d, %d, %d, %d, %d)\n", src, dest, link_latency, 
> bw_multiplier, link_weight);
>   ASSERT(src <= m_number_of_switches+m_nodes+m_nodes);
>   ASSERT(dest <= m_number_of_switches+m_nodes+m_nodes);
>   m_links_src_vector.insertAtBottom(src);
> @@ -312,20 +347,20 @@
>   m_bw_multiplier_vector.insertAtBottom(bw_multiplier);
>  }
>
> -void Topology::makeLink(SwitchID src, SwitchID dest, const NetDest& 
> routing_table_entry, int link_latency, int link_weight, int bw_multiplier, 
> bool isReconfiguration)
> +void Topology::makeLink(Network *net, SwitchID src, SwitchID dest, const 
> NetDest& routing_table_entry, int link_latency, int link_weight, int 
> bw_multiplier, bool isReconfiguration)
>  {
>   // Make sure we're not trying to connect two end-point nodes directly 
> together
>   assert((src >= 2*m_nodes) || (dest >= 2*m_nodes));
>
>   if (src < m_nodes) {
> -    m_network_ptr->makeInLink(src, dest-(2*m_nodes), routing_table_entry, 
> link_latency, bw_multiplier, isReconfiguration);
> +    net->makeInLink(src, dest-(2*m_nodes), routing_table_entry, 
> link_latency, bw_multiplier, isReconfiguration);
>   } else if (dest < 2*m_nodes) {
>     assert(dest >= m_nodes);
>     NodeID node = dest-m_nodes;
> -    m_network_ptr->makeOutLink(src-(2*m_nodes), node, routing_table_entry, 
> link_latency, link_weight, bw_multiplier, isReconfiguration);
> +    net->makeOutLink(src-(2*m_nodes), node, routing_table_entry, 
> link_latency, link_weight, bw_multiplier, isReconfiguration);
>   } else {
>     assert((src >= 2*m_nodes) && (dest >= 2*m_nodes));
> -    m_network_ptr->makeInternalLink(src-(2*m_nodes), dest-(2*m_nodes), 
> routing_table_entry, link_latency, link_weight, bw_multiplier, 
> isReconfiguration);
> +    net->makeInternalLink(src-(2*m_nodes), dest-(2*m_nodes), 
> routing_table_entry, link_latency, link_weight, bw_multiplier, 
> isReconfiguration);
>   }
>  }
>
> @@ -454,3 +489,21 @@
>  {
>     return new Topology(this);
>  }
> +
> +Link *
> +LinkParams::create()
> +{
> +    return new Link(this);
> +}
> +
> +ExtLink *
> +ExtLinkParams::create()
> +{
> +    return new ExtLink(this);
> +}
> +
> +IntLink *
> +IntLinkParams::create()
> +{
> +    return new IntLink(this);
> +}
> diff -r f164db9baf4a -r e657fd802abe src/mem/ruby/network/simple/Topology.hh
> --- a/src/mem/ruby/network/simple/Topology.hh   Sat Dec 12 14:37:15 2009 -0800
> +++ b/src/mem/ruby/network/simple/Topology.hh   Sat Dec 12 14:37:15 2009 -0800
> @@ -52,17 +52,45 @@
>  #include "mem/ruby/system/NodeID.hh"
>  #include "sim/sim_object.hh"
>  #include "params/Topology.hh"
> +#include "params/Link.hh"
> +#include "params/ExtLink.hh"
> +#include "params/IntLink.hh"
>
>  class Network;
>  class NetDest;
>
>  typedef Vector < Vector <int> > Matrix;
>
> +class Link : public SimObject {
> +  public:
> +    typedef LinkParams Params;
> +    Link(const Params *p) : SimObject(p) {}
> +    const Params *params() const { return (const Params *)_params; }
> +};
> +
> +
> +class ExtLink : public Link {
> +  public:
> +    typedef ExtLinkParams Params;
> +    ExtLink(const Params *p) : Link(p) {}
> +    const Params *params() const { return (const Params *)_params; }
> +};
> +
> +
> +class IntLink : public Link {
> +  public:
> +    typedef IntLinkParams Params;
> +    IntLink(const Params *p) : Link(p) {}
> +    const Params *params() const { return (const Params *)_params; }
> +};
> +
> +
>  class Topology : public SimObject {
>  public:
>   // Constructors
>     typedef TopologyParams Params;
>     Topology(const Params *p);
> +    const Params *params() const { return (const Params *)_params; }
>
>   // Destructor
>   virtual ~Topology() {}
> @@ -72,7 +100,7 @@
>   // Public Methods
>   void makeTopology();
>   int numSwitches() const { return m_number_of_switches; }
> -  void createLinks(bool isReconfiguration);
> +  void createLinks(Network *net, bool isReconfiguration);
>
>   const string getName() { return m_name; }
>   void printStats(ostream& out) const {}
> @@ -86,7 +114,7 @@
>   void addLink(SwitchID src, SwitchID dest, int link_latency);
>   void addLink(SwitchID src, SwitchID dest, int link_latency, int 
> bw_multiplier);
>   void addLink(SwitchID src, SwitchID dest, int link_latency, int 
> bw_multiplier, int link_weight);
> -  void makeLink(SwitchID src, SwitchID dest, const NetDest& 
> routing_table_entry, int link_latency, int weight, int bw_multiplier, bool 
> isReconfiguration);
> +  void makeLink(Network *net, SwitchID src, SwitchID dest, const NetDest& 
> routing_table_entry, int link_latency, int weight, int bw_multiplier, bool 
> isReconfiguration);
>
>   //  void makeSwitchesPerChip(Vector< Vector < SwitchID > > &nodePairs, 
> Vector<int> &latencies, Vector<int> &bw_multis, int numberOfChips);
>
> @@ -98,8 +126,6 @@
>   // Data Members (m_ prefix)
>   string m_name;
>   bool m_print_config;
> -  Network* m_network_ptr;
> -  string m_connections;
>   NodeID m_nodes;
>   int m_number_of_switches;
>
>
> _______________________________________________
> m5-dev mailing list
> m5-dev@m5sim.org
> http://m5sim.org/mailman/listinfo/m5-dev
>
>
_______________________________________________
m5-dev mailing list
m5-dev@m5sim.org
http://m5sim.org/mailman/listinfo/m5-dev

Reply via email to