1# Copyright (c) 2012 Advanced Micro Devices, Inc. 2# All rights reserved. 3# 4# Redistribution and use in source and binary forms, with or without 5# modification, are permitted provided that the following conditions are 6# met: redistributions of source code must retain the above copyright 7# notice, this list of conditions and the following disclaimer; 8# redistributions in binary form must reproduce the above copyright --- 59 unchanged lines hidden (view full) --- 68 self.intBW = intBW 69 self.extBW = extBW 70 self.intLatency = intLatency 71 self.extLatency = extLatency 72 73 def add(self, node): 74 self.nodes.append(node) 75 |
76 def makeTopology(self, options, network, IntLink, ExtLink, Router): |
77 """ Recursively make all of the links and routers 78 """ |
79 80 # make a router to connect all of the nodes 81 self.router = Router(router_id=self.num_routers()) |
82 network.routers.append(self.router) 83 |
84 for node in self.nodes: 85 if type(node) == Cluster: |
86 node.makeTopology(options, network, IntLink, ExtLink, Router) |
87 88 # connect this cluster to the router 89 link = IntLink(link_id=self.num_int_links(), node_a=self.router, node_b=node.router) 90 if node.extBW: 91 link.bandwidth_factor = node.extBW 92 elif self.intBW: # if there is an interanl b/w for this node and no ext b/w to override 93 link.bandwidth_factor = self.intBW 94 95 if node.extLatency: 96 link.latency = node.extLatency 97 elif self.intLatency: 98 link.latency = self.intLatency 99 |
100 network.int_links.append(link) |
101 else: 102 # node is just a controller connect it to the router via a ext_link 103 link = ExtLink(link_id=self.num_ext_links(), ext_node=node, int_node=self.router) 104 if self.intBW: 105 link.bandwidth_factor = self.intBW 106 if self.intLatency: 107 link.latency = self.intLatency 108 |
109 network.ext_links.append(link) |
110 |
111 def __len__(self): 112 return len([i for i in self.nodes if type(i) != Cluster]) + \ 113 sum([len(i) for i in self.nodes if type(i) == Cluster]) |