diff --git a/src/sst/elements/merlin/Makefile.am b/src/sst/elements/merlin/Makefile.am index ff094f2af3..650c2027e8 100644 --- a/src/sst/elements/merlin/Makefile.am +++ b/src/sst/elements/merlin/Makefile.am @@ -107,12 +107,14 @@ EXTRA_DIST = \ tests/dragon_128_platform_test.py \ tests/dragon_128_platform_test_cm.py \ tests/platform_file_dragon_128.py \ + tests/dragon_128_test_deferred.py \ tests/polarfly_455_test.py \ tests/polarstar_504_test.py \ tests/refFiles/test_merlin_dragon_128_platform_test.out \ tests/refFiles/test_merlin_dragon_128_platform_test_cm.out \ tests/refFiles/test_merlin_dragon_128_test.out \ tests/refFiles/test_merlin_dragon_128_test_fl.out \ + tests/refFiles/test_merlin_dragon_128_test_deferred.out \ tests/refFiles/test_merlin_dragon_72_test.out \ tests/refFiles/test_merlin_fattree_128_test.out \ tests/refFiles/test_merlin_fattree_256_test.out \ diff --git a/src/sst/elements/merlin/interfaces/pymerlin-interface.py b/src/sst/elements/merlin/interfaces/pymerlin-interface.py index 5b1c43a8ed..23cc861fae 100644 --- a/src/sst/elements/merlin/interfaces/pymerlin-interface.py +++ b/src/sst/elements/merlin/interfaces/pymerlin-interface.py @@ -26,7 +26,7 @@ def __init__(self): self._subscribeToPlatformParamSet("network_interface") # returns subcomp, port_name - def build(self,comp,slot,slot_num,job_id,job_size,logical_nid,use_nid_remap = False): + def build(self,comp,slot,slot_num,job_id,job_size,logical_nid,use_nid_remap = False, link=None): if self._check_first_build(): set_name = "params_%s"%self._instance_name sst.addGlobalParams(set_name, self._getGroupParams("params")) @@ -39,7 +39,12 @@ def build(self,comp,slot,slot_num,job_id,job_size,logical_nid,use_nid_remap = Fa self._applyStatisticsSettings(sub) sub.addGlobalParamSet("params_%s"%self._instance_name) sub.addParam("logical_nid",logical_nid) - return sub,"rtr_port" + + if link: + sub.addLink(link, "rtr_port"); + return True + else: + return sub,"rtr_port" class ReorderLinkControl(NetworkInterface): @@ -62,11 +67,14 @@ def _network_interface_callback(self, variable_name, value): def setNetworkInterface(self,interface): self.network_interface = interface - def build(self,comp,slot,slot_num,job_id,job_size,nid,use_nid_map = False): + def build(self,comp,slot,slot_num,job_id,job_size,nid,use_nid_map = False, link = None): sub = comp.setSubComponent(slot,"merlin.reorderlinkcontrol",slot_num) #self._applyStatisticsSettings(sub) #sub.addParams(self._params) - return self.network_interface.build(sub,"networkIF",0,job_id,job_size,nid,use_nid_map) + + return NetworkInterface._instanceNetworkInterfaceBackCompat( + self.network_interface,sub,"networkIF",0,job_id,job_size,nid,use_nid_map,link) + # Functions to enable statistics def enableAllStatistics(self,stat_params,apply_to_children=False): diff --git a/src/sst/elements/merlin/pymerlin-base.py b/src/sst/elements/merlin/pymerlin-base.py index 2007c98418..f990114878 100644 --- a/src/sst/elements/merlin/pymerlin-base.py +++ b/src/sst/elements/merlin/pymerlin-base.py @@ -599,10 +599,9 @@ def findClass(base,name,_seen): class Topology(TemplateBase): def __init__(self): TemplateBase.__init__(self) - self._declareClassVariables(["network_name","endPointLinks","built","router","_prefix"]) + self._declareClassVariables(["network_name","endPointLinks","built","router"]) - self._prefix = "" - self._lockVariable("_prefix") + self.network_name = "" self._setCallbackOnWrite("network_name",self._network_name_callback) self._setCallbackOnWrite("router",self._router_callback) @@ -619,26 +618,30 @@ def __init__(self): def _network_name_callback(self, variable_name, value): self._lockVariable(variable_name) - if value: - self._unlockVariable("_prefix") - self._prefix = "%s."%value - self._lockVariable("_prefix") def _router_callback(self, variable_name, value): # Lock variable if it wasn't set to None if value: self._lockVariable(variable_name) - def getName(self): return "NoName" + # build() will automatically apply the network_name as a name + # prefix before calling _build_impl(). If you want to have the + # prefix automatically applied, override the _build_impl() + # function. If you want to control this yourself, overload the + # build() function. def build(self, endpoint): + sst.pushNamePrefix(self.network_name) + self._build_impl(endpoint) + sst.popNamePrefix() + def _build_impl(self, endpoint): pass def getEndPointLinks(self): pass def getNumNodes(self): pass def getRouterNameForId(self,rtr_id): - return "%srtr%d"%(self._prefix,rtr_id) + return "rtr%d"%(rtr_id) def findRouterById(self,rtr_id): return sst.findComponentByName(self.getRouterNameForId(rtr_id)) def _instanceRouter(self,radix,rtr_id): @@ -648,21 +651,137 @@ class NetworkInterface(TemplateBase): def __init__(self): TemplateBase.__init__(self) - # returns subcomp, port_name - def build(self,comp,slot,slot_num,link,job_id,job_size,logical_nid,use_nid_remap=False): + + # NetworkInterface.build() has two possible implementations: + + # OLD: Takes no link and returns an sst.SubComponent and port name + + # NEW: Take a link and returns True if something was connected to + # it. + + # This is the new method for instancing endpoints. You need to + # create the Link object first, then pass it in. If False is + # returned, then nothing was hooked up to the Link by build(). If + # True is returned, then something was connected and the parent + # needs to hook up its end of the Link. Note that the python Link + # class does not add anything to the ConfigGraph until a call to + # Link.connect or (Sub)Component.addLink is called, so it won't + # create strange artificts in the ConfigGraph if a Link is created + # by not used. + + # For backward compatibility, use_nid_map and link should be + # optional arguments, in that order. Once we transition + # completely over to the new way, both will become required. + + # To maintain backward compatibility with the old method, the new + # implemenation will need to check to see if link is None, if so, + # then return subcomp, port_name. Otherwise, return True or False + # depending on if the passed in link was connected or not. + + # Objects that want to use the new Link version of the function + # will need to do so in a try block and catch the TypeError + # exception. If no exception is thrown the implementation + # supports the Link method, otherwise the object needs to fallback + # to the old method. Once the old version is no longer supported, + # the try/except block can be removed. This functionality is + # encapsulated in the _instanceNetworkInterfaceBackCompat() + def build(self,comp,slot,slot_num,job_id,job_size,logical_nid,use_nid_remap=False,link=None): return None + # Convenience function to loada NetworkInterface in a backward + # compatibile manner. Adheres to the rules for backward + # compatilbility described in the comment to build() + @staticmethod + def _instanceNetworkInterfaceBackCompat( + netif,comp,slot,slot_num,job_id,job_size,logical_nid,use_nid_remap,link): + if not link: + # If link is None, then we are using the old method. + # This will return (subcomp, port_name) + return netif.build(comp,slot,slot_num,job_id,job_size,logical_nid,use_nid_remap) + + # Using the new method, need to do a try/except to make sure + # the underlying networkif supports the link method + try: + built = netif.build(comp,slot,slot_num,job_id,job_size,logical_nid,use_nid_remap,link) + return built + except TypeError: + # Underlying networkif doesn't support the Link method. + # Need to call the old method and connect the link + # manually + subcomp, port_name = netif.build(comp,slot,slot_num,job_id,job_size,logical_nid,use_nid_remap) + if not subcomp: + # Nothing was hooked up, return False + return False + # Need to hookup the subcomponent to the link that was + # passed in + subcomp.addLink(link, port_name) + return True + # Base class that is used to build endpoints class Buildable(TemplateBase): def __init__(self): TemplateBase.__init__(self) - # build() returns an sst.SubComponent and port name - def build(self, nID, extraKeys): + def name(self): + return "Buildable" + + # build() has two possible implemenations. + + # OLD: Takes no link and returns an sst.SubComponent and port name + + # NEW: Take a link and returns True if something was connected to + # it. + + # This is the new method for instancing endpoints. You need to + # create the Link object first, then pass it in. If False is + # returned, then nothing was hooked up to the Link by build(). If + # True is returned, then something was connected and the parent + # needs to hook up its end of the Link. Note that the python Link + # class does not add anything to the ConfigGraph until a call to + # Link.connect or (Sub)Component.addLink is called, so it won't + # create strange artificts in the ConfigGraph if a Link is created + # by not used. + + # For backward compatibility, link should be an optional + # argumentr. Once we transition completely over to the new way, + # link will become required. + + # To maintain backward compatibility with the old method, the new + # implemenation will need to check to see if link is None, if so, + # then return subcomp, port_name. Otherwise, return True or False + # depending on if the passed in link was connected or not. + + # Objects that want to use the new Link version of the function + # will need to do so in a try block and catch the TypeError + # exception. If no exception is thrown the implementation + # supports the Link method, otherwise the object needs to fallback + # to the old method. Once the old version is no longer supported, + # the try/except block can be removed. This functionality is + # encapsulated in the _instanceNetworkInterfaceBackCompat() + def build(self, nID, extraKeys, link=None): return None + + # Convenience function to load a Buildable in a backward + # compatibile manner. Adheres to the rules for backward + # compatilbility described in the comment to build() + @staticmethod + def _instanceBuildableBackCompat(endpoint, comp, comp_port, nID, extraKeys, link): + try: + # Try the new Link-based method first + built = endpoint.build(nID, extraKeys, link) + if built: + comp.addLink(link, comp_port) + except TypeError as error: + # If it doesn't support the Link-based method, + # fall-back to old method + (nic, port_name) = endpoint.build(nID, extraKeys) + if nic: + link.connect( (nic, port_name), (comp, comp_port) ) + + # Classes that define endpoints class Job(Buildable): def __init__(self,job_id,size): @@ -681,6 +800,10 @@ def getName(self): def getSize(self): return self.size + # This will create a linear nid map in the case where you build + # this using a deferred build + def createLinearNidMap(self): + self._nid_map = list(range(self.size)) class RouterTemplate(TemplateBase): @@ -735,20 +858,57 @@ def instanceRouter(self, name, radix, rtr_id): def getTopologySlotName(self): return "topology" - class SystemEndpoint(Buildable): def __init__(self,system): Buildable.__init__(self) self._declareClassVariables(["_system"]) self._system = system - # build() returns an sst.Component and port name - def build(self, nID, extraKeys): + # build() returns an sst.Component and port name if no link is + # passed in. Otherwise, it returns True if an endpoint was + # connected and False otherwise. + def build(self, nID, extraKeys, link=None): # Just get the proper job object for this nID and call build if self._system._endpoints[nID]: - return self._system._endpoints[nID].build(nID, extraKeys) + # There is an endpoint, instance it + if link: + # Need to try the new Link method + try: + return self._system._endpoints[nID].build(nID, extraKeys, link) + except TypeError: + # Link method not support, so will need to hook up + # the link manually + comp, port = self._system._endpoints[nID].build(nID, extraKeys) + comp.addLink(link, port) + return True + else: + # Using old method + return self._system._endpoints[nID].build(nID, extraKeys) else: - return (None, None) + if link: + return False + else: + return (None, None) + +# This is a endpoint class used to get all the links in a topology +# build. This info is then used to create the endpoints in the +# multiplane system +class DeferredEndpoint(Buildable): + def __init__(self): + Buildable.__init__(self) + self._declareClassVariables(["_link_map"]) + # Dictionary that holds a map from network id to (extraKeys, Link) + self._link_map = {} + + + def build(self, nID, extraKeys, link): + self._link_map[nID] = link + return True + + # Return the link associated with the specified endpoint ID. Will + # throw an exception if passed an invalid nID. + def getLink(self, nID): + return self._link_map[nID] class EmptyJob(Job): @@ -758,13 +918,13 @@ def __init__(self,job_id,size): def getName(self): return "Empty Job" - def build(self, nID, extraKeys): + def build(self, nID, extraKeys, link=None): nic = sst.Component("empty_node_%d"%nID, "merlin.simple_patterns.empty") id = self._nid_map[nID] # Add the linkcontrol - networkif, port_name = self.network_interface.build(nic,"networkIF",0,self.job_id,self.size,id) - return (networkif, port_name) + return NetworkInterface._instanceNetworkInterfaceBackCompat( + self.network_interface,nic,"networkIF",0,self.job_id,self.size,id,False,link) class System(TemplateBase): @@ -779,12 +939,13 @@ def addAllocationFunction(cls,name,func): def __init__(self): TemplateBase.__init__(self) - self._declareClassVariables(["topology","allocation_block_size","_available_nodes","_num_nodes","_endpoints"]) + self._declareClassVariables(["topology","allocation_block_size","_available_nodes","_num_nodes","_endpoints","_deferred_endpoint"]) self._setCallbackOnWrite("topology",self._topology_config_callback) self._setCallbackOnWrite("allocation_block_size",self._block_size_config_callback) self._subscribeToPlatformParamSet("system") self.topology = PlatformDefinition.getPlatformDefinedClassInstance("topology") + self._deferred_endpoint = None #self.allocation_block_size = 1 def setTopology(self, topo, allocation_block_size = 1): @@ -802,6 +963,20 @@ def build(self): system_ep = SystemEndpoint(self) self.topology.build(system_ep) + # Will build the topology using the DeferredEndpoint, which means + # all allocations will be ignored. After this is called, use the + # getLinkForEndpoint(nID) call to get the link associated with + # that endpoint. + def deferred_build(self): + self._deferred_endpoint = DeferredEndpoint() + self.topology.build(self._deferred_endpoint) + + def getLinkForEndpoint(self, nID): + if not self._deferred_endpoint: + # throw exception + pass + return self._deferred_endpoint.getLink(nID) + def _topology_config_callback(self, variable_name, value): if not value: return self._lockVariable(variable_name) diff --git a/src/sst/elements/merlin/pymerlin-endpoint.py b/src/sst/elements/merlin/pymerlin-endpoint.py index 9cadcf5458..73ab5be008 100644 --- a/src/sst/elements/merlin/pymerlin-endpoint.py +++ b/src/sst/elements/merlin/pymerlin-endpoint.py @@ -28,7 +28,7 @@ def __init__(self,job_id,size): def getName(self): return "TestJob" - def build(self, nID, extraKeys): + def build(self, nID, extraKeys, link = None): nic = sst.Component("testNic_%d"%nID, "merlin.test_nic") self._applyStatisticsSettings(nic) nic.addParams(self._getGroupParams("main")) @@ -38,9 +38,8 @@ def build(self, nID, extraKeys): nic.addParam("id", id) # Add the linkcontrol - networkif, port_name = self.network_interface.build(nic,"networkIF",0,self.job_id,self.size,id,True) - - return (networkif,port_name) + return NetworkInterface._instanceNetworkInterfaceBackCompat( + self.network_interface,nic,"networkIF",0,self.job_id,self.size,id,True,link) class OfferedLoadJob(Job): diff --git a/src/sst/elements/merlin/router.h b/src/sst/elements/merlin/router.h index 3a020c7381..fa7ccff37b 100644 --- a/src/sst/elements/merlin/router.h +++ b/src/sst/elements/merlin/router.h @@ -486,6 +486,11 @@ class Topology : public SubComponent { // Parameters are: num_ports, id, num_vns SST_ELI_REGISTER_SUBCOMPONENT_API(SST::Merlin::Topology, int, int, int) + SST_ELI_DOCUMENT_PARAMS( + {"network_name", "Name of the network. Required if two networks of the same topology are used in the same simulation; primarily use to namespace global shared object used by the topology."} + ) + + enum PortState {R2R, R2N, UNCONNECTED, FAILED}; Topology(ComponentId_t cid) : SubComponent(cid), output(getSimulationOutput()) {} virtual ~Topology() {} diff --git a/src/sst/elements/merlin/tests/dragon_128_test_deferred.py b/src/sst/elements/merlin/tests/dragon_128_test_deferred.py new file mode 100644 index 0000000000..7412feadcc --- /dev/null +++ b/src/sst/elements/merlin/tests/dragon_128_test_deferred.py @@ -0,0 +1,139 @@ +#!/usr/bin/env python +# +# Copyright 2009-2023 NTESS. Under the terms +# of Contract DE-NA0003525 with NTESS, the U.S. +# Government retains certain rights in this software. +# +# Copyright (c) 2009-2023, NTESS +# All rights reserved. +# +# This file is part of the SST software package. For license +# information, see the LICENSE file in the top level directory of the +# distribution. + +import sst +from sst.merlin.base import * +from sst.merlin.endpoint import * +from sst.merlin.interface import * +from sst.merlin.topology import * + +if __name__ == "__main__": + + # This file creates two dragonfly networks of different sizes and + # instances the endpoints using deferred build. + + # Network 1 + ### Setup the topology + topo = topoDragonFly() + topo.hosts_per_router = 4 + topo.routers_per_group = 8 + topo.intergroup_links = 4 + topo.num_groups = 5 + topo.algorithm = "ugal" + topo.network_name = "net1" + + # Set up the routers + router = hr_router() + router.link_bw = "4GB/s" + router.flit_size = "8B" + router.xbar_bw = "6GB/s" + router.input_latency = "20ns" + router.output_latency = "20ns" + router.input_buf_size = "4kB" + router.output_buf_size = "4kB" + router.num_vns = 2 + router.xbar_arb = "merlin.xbar_arb_lru" + + topo.router = router + topo.link_latency = "20ns" + + ### set up the endpoint + networkif = LinkControl() + networkif.link_bw = "4GB/s" + networkif.input_buf_size = "1kB" + networkif.output_buf_size = "1kB" + + networkif_ro = ReorderLinkControl() + networkif_ro.network_interface = networkif + + ep = TestJob(0,topo.getNumNodes()) + ep.network_interface = networkif_ro + #ep.num_messages = 10 + #ep.message_size = "8B" + #ep.send_untimed_bcast = False + + system = System() + system.setTopology(topo) + + system.deferred_build() + + # Need to push the name prefix to match the network name + sst.pushNamePrefix(topo.network_name) + ep.createLinearNidMap() + for x in range(topo.getNumNodes()): + ep.build(x, {}, system.getLinkForEndpoint(x)) + sst.popNamePrefix() + + ##### Done with first network + + # Newtork 2 + ### Setup the topology + topo = topoDragonFly() + topo.hosts_per_router = 4 + topo.routers_per_group = 8 + topo.intergroup_links = 4 + topo.num_groups = 4 + topo.algorithm = "ugal" + topo.network_name = "net2" + + # Set up the routers + router = hr_router() + router.link_bw = "4GB/s" + router.flit_size = "8B" + router.xbar_bw = "6GB/s" + router.input_latency = "20ns" + router.output_latency = "20ns" + router.input_buf_size = "4kB" + router.output_buf_size = "4kB" + router.num_vns = 2 + router.xbar_arb = "merlin.xbar_arb_lru" + + topo.router = router + topo.link_latency = "20ns" + + ### set up the endpoint + networkif = LinkControl() + networkif.link_bw = "4GB/s" + networkif.input_buf_size = "1kB" + networkif.output_buf_size = "1kB" + + networkif_ro = ReorderLinkControl() + networkif_ro.network_interface = networkif + + ep = TestJob(0,topo.getNumNodes()) + ep.network_interface = networkif_ro + #ep.num_messages = 10 + #ep.message_size = "8B" + #ep.send_untimed_bcast = False + + system = System() + system.setTopology(topo) + + system.deferred_build() + + # Need to push the name prefix to match the network name + sst.pushNamePrefix(topo.network_name) + ep.createLinearNidMap() + for x in range(topo.getNumNodes()): + ep.build(x, {}, system.getLinkForEndpoint(x)) + sst.popNamePrefix() + + + # sst.setStatisticLoadLevel(9) + + # sst.setStatisticOutput("sst.statOutputCSV"); + # sst.setStatisticOutputOptions({ + # "filepath" : "stats.csv", + # "separator" : ", " + # }) + diff --git a/src/sst/elements/merlin/tests/refFiles/test_merlin_dragon_128_test_deferred.out b/src/sst/elements/merlin/tests/refFiles/test_merlin_dragon_128_test_deferred.out new file mode 100644 index 0000000000..d790a6cf18 --- /dev/null +++ b/src/sst/elements/merlin/tests/refFiles/test_merlin_dragon_128_test_deferred.out @@ -0,0 +1,865 @@ +2312: 0 Finished sending packets (total of 10) +2312: 1 Finished sending packets (total of 10) +2312: 2 Finished sending packets (total of 10) +2312: 3 Finished sending packets (total of 10) +2312: 4 Finished sending packets (total of 10) +2312: 5 Finished sending packets (total of 10) +2312: 6 Finished sending packets (total of 10) +2312: 7 Finished sending packets (total of 10) +2312: 8 Finished sending packets (total of 10) +2312: 9 Finished sending packets (total of 10) +2312: 10 Finished sending packets (total of 10) +2312: 11 Finished sending packets (total of 10) +2312: 12 Finished sending packets (total of 10) +2312: 13 Finished sending packets (total of 10) +2312: 14 Finished sending packets (total of 10) +2312: 15 Finished sending packets (total of 10) +2312: 16 Finished sending packets (total of 10) +2312: 17 Finished sending packets (total of 10) +2312: 18 Finished sending packets (total of 10) +2312: 19 Finished sending packets (total of 10) +2312: 20 Finished sending packets (total of 10) +2312: 21 Finished sending packets (total of 10) +2312: 22 Finished sending packets (total of 10) +2312: 23 Finished sending packets (total of 10) +2312: 24 Finished sending packets (total of 10) +2312: 25 Finished sending packets (total of 10) +2312: 26 Finished sending packets (total of 10) +2312: 27 Finished sending packets (total of 10) +2312: 28 Finished sending packets (total of 10) +2312: 29 Finished sending packets (total of 10) +2312: 30 Finished sending packets (total of 10) +2312: 31 Finished sending packets (total of 10) +2312: 32 Finished sending packets (total of 10) +2312: 33 Finished sending packets (total of 10) +2312: 34 Finished sending packets (total of 10) +2312: 35 Finished sending packets (total of 10) +2312: 36 Finished sending packets (total of 10) +2312: 37 Finished sending packets (total of 10) +2312: 38 Finished sending packets (total of 10) +2312: 39 Finished sending packets (total of 10) +2312: 40 Finished sending packets (total of 10) +2312: 41 Finished sending packets (total of 10) +2312: 42 Finished sending packets (total of 10) +2312: 43 Finished sending packets (total of 10) +2312: 44 Finished sending packets (total of 10) +2312: 45 Finished sending packets (total of 10) +2312: 46 Finished sending packets (total of 10) +2312: 47 Finished sending packets (total of 10) +2312: 48 Finished sending packets (total of 10) +2312: 49 Finished sending packets (total of 10) +2312: 50 Finished sending packets (total of 10) +2312: 51 Finished sending packets (total of 10) +2312: 52 Finished sending packets (total of 10) +2312: 53 Finished sending packets (total of 10) +2312: 54 Finished sending packets (total of 10) +2312: 55 Finished sending packets (total of 10) +2312: 56 Finished sending packets (total of 10) +2312: 57 Finished sending packets (total of 10) +2312: 58 Finished sending packets (total of 10) +2312: 59 Finished sending packets (total of 10) +2312: 60 Finished sending packets (total of 10) +2312: 61 Finished sending packets (total of 10) +2312: 62 Finished sending packets (total of 10) +2312: 63 Finished sending packets (total of 10) +2312: 64 Finished sending packets (total of 10) +2312: 65 Finished sending packets (total of 10) +2312: 66 Finished sending packets (total of 10) +2312: 67 Finished sending packets (total of 10) +2312: 68 Finished sending packets (total of 10) +2312: 69 Finished sending packets (total of 10) +2312: 70 Finished sending packets (total of 10) +2312: 71 Finished sending packets (total of 10) +2312: 72 Finished sending packets (total of 10) +2312: 73 Finished sending packets (total of 10) +2312: 74 Finished sending packets (total of 10) +2312: 75 Finished sending packets (total of 10) +2312: 76 Finished sending packets (total of 10) +2312: 77 Finished sending packets (total of 10) +2312: 78 Finished sending packets (total of 10) +2312: 79 Finished sending packets (total of 10) +2312: 80 Finished sending packets (total of 10) +2312: 81 Finished sending packets (total of 10) +2312: 82 Finished sending packets (total of 10) +2312: 83 Finished sending packets (total of 10) +2312: 84 Finished sending packets (total of 10) +2312: 85 Finished sending packets (total of 10) +2312: 86 Finished sending packets (total of 10) +2312: 87 Finished sending packets (total of 10) +2312: 88 Finished sending packets (total of 10) +2312: 89 Finished sending packets (total of 10) +2312: 90 Finished sending packets (total of 10) +2312: 91 Finished sending packets (total of 10) +2312: 92 Finished sending packets (total of 10) +2312: 93 Finished sending packets (total of 10) +2312: 94 Finished sending packets (total of 10) +2312: 95 Finished sending packets (total of 10) +2312: 96 Finished sending packets (total of 10) +2312: 97 Finished sending packets (total of 10) +2312: 98 Finished sending packets (total of 10) +2312: 99 Finished sending packets (total of 10) +2312: 100 Finished sending packets (total of 10) +2312: 101 Finished sending packets (total of 10) +2312: 102 Finished sending packets (total of 10) +2312: 103 Finished sending packets (total of 10) +2312: 104 Finished sending packets (total of 10) +2312: 105 Finished sending packets (total of 10) +2312: 106 Finished sending packets (total of 10) +2312: 107 Finished sending packets (total of 10) +2312: 108 Finished sending packets (total of 10) +2312: 109 Finished sending packets (total of 10) +2312: 110 Finished sending packets (total of 10) +2312: 111 Finished sending packets (total of 10) +2312: 112 Finished sending packets (total of 10) +2312: 113 Finished sending packets (total of 10) +2312: 114 Finished sending packets (total of 10) +2312: 115 Finished sending packets (total of 10) +2312: 116 Finished sending packets (total of 10) +2312: 117 Finished sending packets (total of 10) +2312: 118 Finished sending packets (total of 10) +2312: 119 Finished sending packets (total of 10) +2312: 120 Finished sending packets (total of 10) +2312: 121 Finished sending packets (total of 10) +2312: 122 Finished sending packets (total of 10) +2312: 123 Finished sending packets (total of 10) +2312: 124 Finished sending packets (total of 10) +2312: 125 Finished sending packets (total of 10) +2312: 126 Finished sending packets (total of 10) +2312: 127 Finished sending packets (total of 10) +2952: 0 Finished sending packets (total of 10) +2952: 1 Finished sending packets (total of 10) +2952: 2 Finished sending packets (total of 10) +2952: 3 Finished sending packets (total of 10) +2952: 4 Finished sending packets (total of 10) +2952: 5 Finished sending packets (total of 10) +2952: 6 Finished sending packets (total of 10) +2952: 7 Finished sending packets (total of 10) +2952: 8 Finished sending packets (total of 10) +2952: 9 Finished sending packets (total of 10) +2952: 10 Finished sending packets (total of 10) +2952: 11 Finished sending packets (total of 10) +2952: 12 Finished sending packets (total of 10) +2952: 13 Finished sending packets (total of 10) +2952: 14 Finished sending packets (total of 10) +2952: 15 Finished sending packets (total of 10) +2952: 16 Finished sending packets (total of 10) +2952: 17 Finished sending packets (total of 10) +2952: 18 Finished sending packets (total of 10) +2952: 19 Finished sending packets (total of 10) +2952: 20 Finished sending packets (total of 10) +2952: 21 Finished sending packets (total of 10) +2952: 22 Finished sending packets (total of 10) +2952: 23 Finished sending packets (total of 10) +2952: 24 Finished sending packets (total of 10) +2952: 25 Finished sending packets (total of 10) +2952: 26 Finished sending packets (total of 10) +2952: 27 Finished sending packets (total of 10) +2952: 28 Finished sending packets (total of 10) +2952: 29 Finished sending packets (total of 10) +2952: 30 Finished sending packets (total of 10) +2952: 31 Finished sending packets (total of 10) +2952: 32 Finished sending packets (total of 10) +2952: 33 Finished sending packets (total of 10) +2952: 34 Finished sending packets (total of 10) +2952: 35 Finished sending packets (total of 10) +2952: 36 Finished sending packets (total of 10) +2952: 37 Finished sending packets (total of 10) +2952: 38 Finished sending packets (total of 10) +2952: 39 Finished sending packets (total of 10) +2952: 40 Finished sending packets (total of 10) +2952: 41 Finished sending packets (total of 10) +2952: 42 Finished sending packets (total of 10) +2952: 43 Finished sending packets (total of 10) +2952: 44 Finished sending packets (total of 10) +2952: 45 Finished sending packets (total of 10) +2952: 46 Finished sending packets (total of 10) +2952: 47 Finished sending packets (total of 10) +2952: 48 Finished sending packets (total of 10) +2952: 49 Finished sending packets (total of 10) +2952: 50 Finished sending packets (total of 10) +2952: 51 Finished sending packets (total of 10) +2952: 52 Finished sending packets (total of 10) +2952: 53 Finished sending packets (total of 10) +2952: 54 Finished sending packets (total of 10) +2952: 55 Finished sending packets (total of 10) +2952: 56 Finished sending packets (total of 10) +2952: 57 Finished sending packets (total of 10) +2952: 58 Finished sending packets (total of 10) +2952: 59 Finished sending packets (total of 10) +2952: 60 Finished sending packets (total of 10) +2952: 61 Finished sending packets (total of 10) +2952: 62 Finished sending packets (total of 10) +2952: 63 Finished sending packets (total of 10) +2952: 64 Finished sending packets (total of 10) +2952: 65 Finished sending packets (total of 10) +2952: 66 Finished sending packets (total of 10) +2952: 67 Finished sending packets (total of 10) +2952: 68 Finished sending packets (total of 10) +2952: 69 Finished sending packets (total of 10) +2952: 70 Finished sending packets (total of 10) +2952: 71 Finished sending packets (total of 10) +2952: 72 Finished sending packets (total of 10) +2952: 73 Finished sending packets (total of 10) +2952: 74 Finished sending packets (total of 10) +2952: 75 Finished sending packets (total of 10) +2952: 76 Finished sending packets (total of 10) +2952: 77 Finished sending packets (total of 10) +2952: 78 Finished sending packets (total of 10) +2952: 79 Finished sending packets (total of 10) +2952: 80 Finished sending packets (total of 10) +2952: 81 Finished sending packets (total of 10) +2952: 82 Finished sending packets (total of 10) +2952: 83 Finished sending packets (total of 10) +2952: 84 Finished sending packets (total of 10) +2952: 85 Finished sending packets (total of 10) +2952: 86 Finished sending packets (total of 10) +2952: 87 Finished sending packets (total of 10) +2952: 88 Finished sending packets (total of 10) +2952: 89 Finished sending packets (total of 10) +2952: 90 Finished sending packets (total of 10) +2952: 91 Finished sending packets (total of 10) +2952: 92 Finished sending packets (total of 10) +2952: 93 Finished sending packets (total of 10) +2952: 94 Finished sending packets (total of 10) +2952: 95 Finished sending packets (total of 10) +2952: 96 Finished sending packets (total of 10) +2952: 97 Finished sending packets (total of 10) +2952: 98 Finished sending packets (total of 10) +2952: 99 Finished sending packets (total of 10) +2952: 100 Finished sending packets (total of 10) +2952: 101 Finished sending packets (total of 10) +2952: 102 Finished sending packets (total of 10) +2952: 103 Finished sending packets (total of 10) +2952: 104 Finished sending packets (total of 10) +2952: 105 Finished sending packets (total of 10) +2952: 106 Finished sending packets (total of 10) +2952: 107 Finished sending packets (total of 10) +2952: 108 Finished sending packets (total of 10) +2952: 109 Finished sending packets (total of 10) +2952: 110 Finished sending packets (total of 10) +2952: 111 Finished sending packets (total of 10) +2952: 112 Finished sending packets (total of 10) +2952: 113 Finished sending packets (total of 10) +2952: 114 Finished sending packets (total of 10) +2952: 115 Finished sending packets (total of 10) +2952: 116 Finished sending packets (total of 10) +2952: 117 Finished sending packets (total of 10) +2952: 118 Finished sending packets (total of 10) +2952: 119 Finished sending packets (total of 10) +2952: 120 Finished sending packets (total of 10) +2952: 121 Finished sending packets (total of 10) +2952: 122 Finished sending packets (total of 10) +2952: 123 Finished sending packets (total of 10) +2952: 124 Finished sending packets (total of 10) +2952: 125 Finished sending packets (total of 10) +2952: 126 Finished sending packets (total of 10) +2952: 127 Finished sending packets (total of 10) +2952: 128 Finished sending packets (total of 10) +2952: 129 Finished sending packets (total of 10) +2952: 130 Finished sending packets (total of 10) +2952: 131 Finished sending packets (total of 10) +2952: 132 Finished sending packets (total of 10) +2952: 133 Finished sending packets (total of 10) +2952: 134 Finished sending packets (total of 10) +2952: 135 Finished sending packets (total of 10) +2952: 136 Finished sending packets (total of 10) +2952: 137 Finished sending packets (total of 10) +2952: 138 Finished sending packets (total of 10) +2952: 139 Finished sending packets (total of 10) +2952: 140 Finished sending packets (total of 10) +2952: 141 Finished sending packets (total of 10) +2952: 142 Finished sending packets (total of 10) +2952: 143 Finished sending packets (total of 10) +2952: 144 Finished sending packets (total of 10) +2952: 145 Finished sending packets (total of 10) +2952: 146 Finished sending packets (total of 10) +2952: 147 Finished sending packets (total of 10) +2952: 148 Finished sending packets (total of 10) +2952: 149 Finished sending packets (total of 10) +2952: 150 Finished sending packets (total of 10) +2952: 151 Finished sending packets (total of 10) +2952: 152 Finished sending packets (total of 10) +2952: 153 Finished sending packets (total of 10) +2952: 154 Finished sending packets (total of 10) +2952: 155 Finished sending packets (total of 10) +2952: 156 Finished sending packets (total of 10) +2952: 157 Finished sending packets (total of 10) +2952: 158 Finished sending packets (total of 10) +2952: 159 Finished sending packets (total of 10) +5613: NIC 64 received all packets (total of 1600)! +5622: NIC 72 received all packets (total of 1600)! +5625: NIC 65 received all packets (total of 1600)! +5626: NIC 139 received all packets (total of 1600)! +5627: NIC 27 received all packets (total of 1600)! +5630: NIC 26 received all packets (total of 1600)! +5636: NIC 76 received all packets (total of 1600)! +5640: NIC 84 received all packets (total of 1600)! +5645: NIC 77 received all packets (total of 1600)! +5645: NIC 130 received all packets (total of 1600)! +5646: NIC 16 received all packets (total of 1600)! +5647: NIC 22 received all packets (total of 1600)! +5648: NIC 132 received all packets (total of 1600)! +5651: NIC 45 received all packets (total of 1600)! +5651: NIC 138 received all packets (total of 1600)! +5652: NIC 79 received all packets (total of 1600)! +5656: NIC 5 received all packets (total of 1600)! +5657: NIC 52 received all packets (total of 1600)! +5658: NIC 56 received all packets (total of 1600)! +5659: NIC 32 received all packets (total of 1600)! +5659: NIC 57 received all packets (total of 1600)! +5659: NIC 83 received all packets (total of 1600)! +5660: NIC 142 received all packets (total of 1600)! +5662: NIC 85 received all packets (total of 1600)! +5663: NIC 38 received all packets (total of 1600)! +5667: NIC 39 received all packets (total of 1600)! +5669: NIC 36 received all packets (total of 1600)! +5670: NIC 33 received all packets (total of 1600)! +5671: NIC 21 received all packets (total of 1600)! +5671: NIC 34 received all packets (total of 1600)! +5673: NIC 37 received all packets (total of 1600)! +5674: NIC 35 received all packets (total of 1600)! +5674: NIC 40 received all packets (total of 1600)! +5674: NIC 144 received all packets (total of 1600)! +5675: NIC 44 received all packets (total of 1600)! +5676: NIC 1 received all packets (total of 1600)! +5677: NIC 93 received all packets (total of 1600)! +5677: NIC 129 received all packets (total of 1600)! +5680: NIC 2 received all packets (total of 1600)! +5681: NIC 133 received all packets (total of 1600)! +5683: NIC 101 received all packets (total of 1600)! +5683: NIC 119 received all packets (total of 1600)! +5683: NIC 145 received all packets (total of 1600)! +5684: NIC 25 received all packets (total of 1600)! +5684: NIC 49 received all packets (total of 1600)! +5685: NIC 28 received all packets (total of 1600)! +5685: NIC 147 received all packets (total of 1600)! +5686: NIC 4 received all packets (total of 1600)! +5686: NIC 66 received all packets (total of 1600)! +5686: NIC 94 received all packets (total of 1600)! +5686: NIC 141 received all packets (total of 1600)! +5687: NIC 9 received all packets (total of 1600)! +5687: NIC 14 received all packets (total of 1600)! +5687: NIC 46 received all packets (total of 1600)! +5687: NIC 51 received all packets (total of 1600)! +5687: NIC 62 received all packets (total of 1600)! +5690: NIC 6 received all packets (total of 1600)! +5690: NIC 10 received all packets (total of 1600)! +5690: NIC 47 received all packets (total of 1600)! +5690: NIC 63 received all packets (total of 1600)! +5693: NIC 61 received all packets (total of 1600)! +5694: NIC 53 received all packets (total of 1600)! +5694: NIC 99 received all packets (total of 1600)! +5694: NIC 102 received all packets (total of 1600)! +5695: NIC 41 received all packets (total of 1600)! +5696: NIC 54 received all packets (total of 1600)! +5698: NIC 0 received all packets (total of 1600)! +5698: NIC 42 received all packets (total of 1600)! +5698: NIC 43 received all packets (total of 1600)! +5699: NIC 12 received all packets (total of 1600)! +5699: NIC 31 received all packets (total of 1600)! +5699: NIC 48 received all packets (total of 1600)! +5699: NIC 60 received all packets (total of 1600)! +5699: NIC 82 received all packets (total of 1600)! +5699: NIC 89 received all packets (total of 1600)! +5699: NIC 146 received all packets (total of 1600)! +5701: NIC 3 received all packets (total of 1600)! +5701: NIC 7 received all packets (total of 1600)! +5701: NIC 113 received all packets (total of 1600)! +5702: NIC 13 received all packets (total of 1600)! +5702: NIC 50 received all packets (total of 1600)! +5702: NIC 92 received all packets (total of 1600)! +5702: NIC 131 received all packets (total of 1600)! +5703: NIC 15 received all packets (total of 1600)! +5703: NIC 135 received all packets (total of 1600)! +5705: NIC 8 received all packets (total of 1600)! +5705: NIC 17 received all packets (total of 1600)! +5705: NIC 55 received all packets (total of 1600)! +5705: NIC 67 received all packets (total of 1600)! +5706: NIC 70 received all packets (total of 1600)! +5706: NIC 107 received all packets (total of 1600)! +5706: NIC 136 received all packets (total of 1600)! +5706: NIC 158 received all packets (total of 1600)! +5707: NIC 11 received all packets (total of 1600)! +5707: NIC 23 received all packets (total of 1600)! +5707: NIC 58 received all packets (total of 1600)! +5709: NIC 18 received all packets (total of 1600)! +5709: NIC 24 received all packets (total of 1600)! +5709: NIC 71 received all packets (total of 1600)! +5709: NIC 74 received all packets (total of 1600)! +5710: NIC 59 received all packets (total of 1600)! +5711: NIC 19 received all packets (total of 1600)! +5711: NIC 29 received all packets (total of 1600)! +5711: NIC 112 received all packets (total of 1600)! +5713: NIC 20 received all packets (total of 1600)! +5714: NIC 30 received all packets (total of 1600)! +5714: NIC 86 received all packets (total of 1600)! +5714: NIC 137 received all packets (total of 1600)! +5717: NIC 87 received all packets (total of 1600)! +5719: NIC 90 received all packets (total of 1600)! +5719: NIC 159 received all packets (total of 1600)! +5721: NIC 68 received all packets (total of 1600)! +5721: NIC 91 received all packets (total of 1600)! +5723: NIC 69 received all packets (total of 1600)! +5726: NIC 73 received all packets (total of 1600)! +5728: NIC 100 received all packets (total of 1600)! +5729: NIC 75 received all packets (total of 1600)! +5730: NIC 78 received all packets (total of 1600)! +5731: NIC 103 received all packets (total of 1600)! +5731: NIC 154 received all packets (total of 1600)! +5733: NIC 80 received all packets (total of 1600)! +5735: NIC 81 received all packets (total of 1600)! +5738: NIC 157 received all packets (total of 1600)! +5741: NIC 88 received all packets (total of 1600)! +5741: NIC 98 received all packets (total of 1600)! +5742: NIC 95 received all packets (total of 1600)! +5742: NIC 134 received all packets (total of 1600)! +5743: NIC 140 received all packets (total of 1600)! +5750: NIC 148 received all packets (total of 1600)! +5751: NIC 109 received all packets (total of 1600)! +5754: NIC 152 received all packets (total of 1600)! +5755: NIC 96 received all packets (total of 1600)! +5757: NIC 128 received all packets (total of 1600)! +5757: NIC 153 received all packets (total of 1600)! +5758: NIC 120 received all packets (total of 1600)! +5759: NIC 97 received all packets (total of 1600)! +5759: NIC 143 received all packets (total of 1600)! +5761: NIC 121 received all packets (total of 1600)! +5762: NIC 114 received all packets (total of 1600)! +5763: NIC 149 received all packets (total of 1600)! +5766: NIC 115 received all packets (total of 1600)! +5766: NIC 150 received all packets (total of 1600)! +5767: NIC 151 received all packets (total of 1600)! +5770: NIC 155 received all packets (total of 1600)! +5771: NIC 156 received all packets (total of 1600)! +5774: NIC 122 received all packets (total of 1600)! +5775: NIC 104 received all packets (total of 1600)! +5779: NIC 125 received all packets (total of 1600)! +5782: NIC 126 received all packets (total of 1600)! +5784: NIC 110 received all packets (total of 1600)! +5788: NIC 118 received all packets (total of 1600)! +5795: NIC 105 received all packets (total of 1600)! +5798: NIC 106 received all packets (total of 1600)! +5799: NIC 108 received all packets (total of 1600)! +5802: NIC 111 received all packets (total of 1600)! +5803: NIC 116 received all packets (total of 1600)! +5806: NIC 117 received all packets (total of 1600)! +5807: NIC 123 received all packets (total of 1600)! +5809: NIC 124 received all packets (total of 1600)! +5811: NIC 127 received all packets (total of 1600)! +6003: NIC 107 received all packets (total of 1280)! +6037: NIC 97 received all packets (total of 1280)! +6041: NIC 99 received all packets (total of 1280)! +6049: NIC 105 received all packets (total of 1280)! +6055: NIC 110 received all packets (total of 1280)! +6063: NIC 113 received all packets (total of 1280)! +6069: NIC 106 received all packets (total of 1280)! +6073: NIC 109 received all packets (total of 1280)! +6077: NIC 108 received all packets (total of 1280)! +6078: NIC 118 received all packets (total of 1280)! +6083: NIC 123 received all packets (total of 1280)! +6083: NIC 124 received all packets (total of 1280)! +6085: NIC 111 received all packets (total of 1280)! +6091: NIC 122 received all packets (total of 1280)! +6101: NIC 98 received all packets (total of 1280)! +6103: NIC 96 received all packets (total of 1280)! +6107: NIC 100 received all packets (total of 1280)! +6110: NIC 101 received all packets (total of 1280)! +6115: NIC 103 received all packets (total of 1280)! +6118: NIC 102 received all packets (total of 1280)! +6123: NIC 104 received all packets (total of 1280)! +6125: NIC 114 received all packets (total of 1280)! +6137: NIC 115 received all packets (total of 1280)! +6154: NIC 112 received all packets (total of 1280)! +6155: NIC 121 received all packets (total of 1280)! +6158: NIC 116 received all packets (total of 1280)! +6161: NIC 125 received all packets (total of 1280)! +6162: NIC 117 received all packets (total of 1280)! +6167: NIC 119 received all packets (total of 1280)! +6169: NIC 78 received all packets (total of 1280)! +6171: NIC 120 received all packets (total of 1280)! +6171: NIC 126 received all packets (total of 1280)! +6173: NIC 81 received all packets (total of 1280)! +6177: NIC 127 received all packets (total of 1280)! +6199: NIC 68 received all packets (total of 1280)! +6217: NIC 74 received all packets (total of 1280)! +6223: NIC 75 received all packets (total of 1280)! +6225: NIC 84 received all packets (total of 1280)! +6233: NIC 88 received all packets (total of 1280)! +6234: NIC 70 received all packets (total of 1280)! +6235: NIC 79 received all packets (total of 1280)! +6239: NIC 16 received all packets (total of 1280)! +6239: NIC 94 received all packets (total of 1280)! +6243: NIC 80 received all packets (total of 1280)! +6245: NIC 95 received all packets (total of 1280)! +6251: NIC 71 received all packets (total of 1280)! +6254: NIC 92 received all packets (total of 1280)! +6255: NIC 93 received all packets (total of 1280)! +6261: NIC 64 received all packets (total of 1280)! +6263: NIC 65 received all packets (total of 1280)! +6263: NIC 76 received all packets (total of 1280)! +6271: NIC 66 received all packets (total of 1280)! +6275: NIC 82 received all packets (total of 1280)! +6277: NIC 67 received all packets (total of 1280)! +6281: NIC 69 received all packets (total of 1280)! +6286: NIC 85 received all packets (total of 1280)! +6287: NIC 89 received all packets (total of 1280)! +6293: NIC 72 received all packets (total of 1280)! +6301: NIC 73 received all packets (total of 1280)! +6302: NIC 90 received all packets (total of 1280)! +6305: NIC 22 received all packets (total of 1280)! +6305: NIC 91 received all packets (total of 1280)! +6307: NIC 77 received all packets (total of 1280)! +6309: NIC 0 received all packets (total of 1280)! +6310: NIC 20 received all packets (total of 1280)! +6311: NIC 83 received all packets (total of 1280)! +6313: NIC 86 received all packets (total of 1280)! +6314: NIC 23 received all packets (total of 1280)! +6315: NIC 87 received all packets (total of 1280)! +6327: NIC 11 received all packets (total of 1280)! +6327: NIC 48 received all packets (total of 1280)! +6333: NIC 5 received all packets (total of 1280)! +6337: NIC 12 received all packets (total of 1280)! +6341: NIC 31 received all packets (total of 1280)! +6345: NIC 21 received all packets (total of 1280)! +6347: NIC 13 received all packets (total of 1280)! +6349: NIC 17 received all packets (total of 1280)! +6367: NIC 25 received all packets (total of 1280)! +6387: NIC 28 received all packets (total of 1280)! +6391: NIC 4 received all packets (total of 1280)! +6398: NIC 1 received all packets (total of 1280)! +6398: NIC 10 received all packets (total of 1280)! +6403: NIC 15 received all packets (total of 1280)! +6405: NIC 2 received all packets (total of 1280)! +6407: NIC 3 received all packets (total of 1280)! +6411: NIC 24 received all packets (total of 1280)! +6413: NIC 6 received all packets (total of 1280)! +6414: NIC 26 received all packets (total of 1280)! +6415: NIC 7 received all packets (total of 1280)! +6419: NIC 27 received all packets (total of 1280)! +6421: NIC 8 received all packets (total of 1280)! +6423: NIC 9 received all packets (total of 1280)! +6425: NIC 14 received all packets (total of 1280)! +6426: NIC 18 received all packets (total of 1280)! +6429: NIC 19 received all packets (total of 1280)! +6431: NIC 29 received all packets (total of 1280)! +6434: NIC 30 received all packets (total of 1280)! +6455: NIC 46 received all packets (total of 1280)! +6459: NIC 39 received all packets (total of 1280)! +6464: NIC 59 received all packets (total of 1280)! +6467: NIC 32 received all packets (total of 1280)! +6474: NIC 45 received all packets (total of 1280)! +6478: NIC 40 received all packets (total of 1280)! +6479: NIC 35 received all packets (total of 1280)! +6482: NIC 34 received all packets (total of 1280)! +6488: NIC 36 received all packets (total of 1280)! +6490: NIC 52 received all packets (total of 1280)! +6493: NIC 37 received all packets (total of 1280)! +6506: NIC 38 received all packets (total of 1280)! +6511: NIC 57 received all packets (total of 1280)! +6518: NIC 42 received all packets (total of 1280)! +6519: NIC 58 received all packets (total of 1280)! +6535: NIC 56 received all packets (total of 1280)! +6543: NIC 49 received all packets (total of 1280)! +6547: NIC 47 received all packets (total of 1280)! +6552: NIC 50 received all packets (total of 1280)! +6559: NIC 53 received all packets (total of 1280)! +6564: NIC 54 received all packets (total of 1280)! +6579: NIC 60 received all packets (total of 1280)! +6582: NIC 61 received all packets (total of 1280)! +6585: NIC 33 received all packets (total of 1280)! +6586: NIC 41 received all packets (total of 1280)! +6589: NIC 43 received all packets (total of 1280)! +6591: NIC 44 received all packets (total of 1280)! +6594: NIC 51 received all packets (total of 1280)! +6595: NIC 55 received all packets (total of 1280)! +6599: NIC 62 received all packets (total of 1280)! +6602: NIC 63 received all packets (total of 1280)! +Nic 127 had 1032 stalled cycles. +Nic 126 had 1032 stalled cycles. +Nic 125 had 1032 stalled cycles. +Nic 124 had 1032 stalled cycles. +Nic 123 had 1032 stalled cycles. +Nic 122 had 1032 stalled cycles. +Nic 121 had 1032 stalled cycles. +Nic 120 had 1032 stalled cycles. +Nic 119 had 1032 stalled cycles. +Nic 118 had 1032 stalled cycles. +Nic 117 had 1032 stalled cycles. +Nic 116 had 1032 stalled cycles. +Nic 115 had 1032 stalled cycles. +Nic 114 had 1032 stalled cycles. +Nic 113 had 1032 stalled cycles. +Nic 112 had 1032 stalled cycles. +Nic 111 had 1032 stalled cycles. +Nic 110 had 1032 stalled cycles. +Nic 109 had 1032 stalled cycles. +Nic 108 had 1032 stalled cycles. +Nic 107 had 1032 stalled cycles. +Nic 106 had 1032 stalled cycles. +Nic 105 had 1032 stalled cycles. +Nic 104 had 1032 stalled cycles. +Nic 103 had 1032 stalled cycles. +Nic 102 had 1032 stalled cycles. +Nic 101 had 1032 stalled cycles. +Nic 100 had 1032 stalled cycles. +Nic 99 had 1032 stalled cycles. +Nic 98 had 1032 stalled cycles. +Nic 97 had 1032 stalled cycles. +Nic 96 had 1032 stalled cycles. +Nic 95 had 1032 stalled cycles. +Nic 94 had 1032 stalled cycles. +Nic 93 had 1032 stalled cycles. +Nic 92 had 1032 stalled cycles. +Nic 91 had 1032 stalled cycles. +Nic 90 had 1032 stalled cycles. +Nic 89 had 1032 stalled cycles. +Nic 88 had 1032 stalled cycles. +Nic 87 had 1032 stalled cycles. +Nic 86 had 1032 stalled cycles. +Nic 85 had 1032 stalled cycles. +Nic 84 had 1032 stalled cycles. +Nic 83 had 1032 stalled cycles. +Nic 82 had 1032 stalled cycles. +Nic 81 had 1032 stalled cycles. +Nic 80 had 1032 stalled cycles. +Nic 79 had 1032 stalled cycles. +Nic 78 had 1032 stalled cycles. +Nic 77 had 1032 stalled cycles. +Nic 76 had 1032 stalled cycles. +Nic 75 had 1032 stalled cycles. +Nic 74 had 1032 stalled cycles. +Nic 73 had 1032 stalled cycles. +Nic 72 had 1032 stalled cycles. +Nic 71 had 1032 stalled cycles. +Nic 70 had 1032 stalled cycles. +Nic 69 had 1032 stalled cycles. +Nic 68 had 1032 stalled cycles. +Nic 67 had 1032 stalled cycles. +Nic 66 had 1032 stalled cycles. +Nic 65 had 1032 stalled cycles. +Nic 64 had 1032 stalled cycles. +Nic 63 had 1032 stalled cycles. +Nic 62 had 1032 stalled cycles. +Nic 61 had 1032 stalled cycles. +Nic 60 had 1032 stalled cycles. +Nic 59 had 1032 stalled cycles. +Nic 58 had 1032 stalled cycles. +Nic 57 had 1032 stalled cycles. +Nic 56 had 1032 stalled cycles. +Nic 55 had 1032 stalled cycles. +Nic 54 had 1032 stalled cycles. +Nic 53 had 1032 stalled cycles. +Nic 52 had 1032 stalled cycles. +Nic 51 had 1032 stalled cycles. +Nic 50 had 1032 stalled cycles. +Nic 49 had 1032 stalled cycles. +Nic 48 had 1032 stalled cycles. +Nic 47 had 1032 stalled cycles. +Nic 46 had 1032 stalled cycles. +Nic 45 had 1032 stalled cycles. +Nic 44 had 1032 stalled cycles. +Nic 43 had 1032 stalled cycles. +Nic 42 had 1032 stalled cycles. +Nic 41 had 1032 stalled cycles. +Nic 40 had 1032 stalled cycles. +Nic 39 had 1032 stalled cycles. +Nic 38 had 1032 stalled cycles. +Nic 37 had 1032 stalled cycles. +Nic 36 had 1032 stalled cycles. +Nic 35 had 1032 stalled cycles. +Nic 34 had 1032 stalled cycles. +Nic 33 had 1032 stalled cycles. +Nic 32 had 1032 stalled cycles. +Nic 31 had 1032 stalled cycles. +Nic 30 had 1032 stalled cycles. +Nic 29 had 1032 stalled cycles. +Nic 28 had 1032 stalled cycles. +Nic 27 had 1032 stalled cycles. +Nic 26 had 1032 stalled cycles. +Nic 25 had 1032 stalled cycles. +Nic 24 had 1032 stalled cycles. +Nic 23 had 1032 stalled cycles. +Nic 22 had 1032 stalled cycles. +Nic 21 had 1032 stalled cycles. +Nic 20 had 1032 stalled cycles. +Nic 19 had 1032 stalled cycles. +Nic 18 had 1032 stalled cycles. +Nic 17 had 1032 stalled cycles. +Nic 16 had 1032 stalled cycles. +Nic 15 had 1032 stalled cycles. +Nic 14 had 1032 stalled cycles. +Nic 13 had 1032 stalled cycles. +Nic 12 had 1032 stalled cycles. +Nic 11 had 1032 stalled cycles. +Nic 10 had 1032 stalled cycles. +Nic 9 had 1032 stalled cycles. +Nic 8 had 1032 stalled cycles. +Nic 7 had 1032 stalled cycles. +Nic 6 had 1032 stalled cycles. +Nic 5 had 1032 stalled cycles. +Nic 4 had 1032 stalled cycles. +Nic 3 had 1032 stalled cycles. +Nic 2 had 1032 stalled cycles. +Nic 1 had 1032 stalled cycles. +Nic 0 had 1032 stalled cycles. +Nic 159 had 1352 stalled cycles. +Nic 158 had 1352 stalled cycles. +Nic 157 had 1352 stalled cycles. +Nic 156 had 1352 stalled cycles. +Nic 155 had 1352 stalled cycles. +Nic 154 had 1352 stalled cycles. +Nic 153 had 1352 stalled cycles. +Nic 152 had 1352 stalled cycles. +Nic 151 had 1352 stalled cycles. +Nic 150 had 1352 stalled cycles. +Nic 149 had 1352 stalled cycles. +Nic 148 had 1352 stalled cycles. +Nic 147 had 1352 stalled cycles. +Nic 146 had 1352 stalled cycles. +Nic 145 had 1352 stalled cycles. +Nic 144 had 1352 stalled cycles. +Nic 143 had 1352 stalled cycles. +Nic 142 had 1352 stalled cycles. +Nic 141 had 1352 stalled cycles. +Nic 140 had 1352 stalled cycles. +Nic 139 had 1352 stalled cycles. +Nic 138 had 1352 stalled cycles. +Nic 137 had 1352 stalled cycles. +Nic 136 had 1352 stalled cycles. +Nic 135 had 1352 stalled cycles. +Nic 134 had 1352 stalled cycles. +Nic 133 had 1352 stalled cycles. +Nic 132 had 1352 stalled cycles. +Nic 131 had 1352 stalled cycles. +Nic 130 had 1352 stalled cycles. +Nic 129 had 1352 stalled cycles. +Nic 128 had 1352 stalled cycles. +Nic 127 had 1352 stalled cycles. +Nic 126 had 1352 stalled cycles. +Nic 125 had 1352 stalled cycles. +Nic 124 had 1352 stalled cycles. +Nic 123 had 1352 stalled cycles. +Nic 122 had 1352 stalled cycles. +Nic 121 had 1352 stalled cycles. +Nic 120 had 1352 stalled cycles. +Nic 119 had 1352 stalled cycles. +Nic 118 had 1352 stalled cycles. +Nic 117 had 1352 stalled cycles. +Nic 116 had 1352 stalled cycles. +Nic 115 had 1352 stalled cycles. +Nic 114 had 1352 stalled cycles. +Nic 113 had 1352 stalled cycles. +Nic 112 had 1352 stalled cycles. +Nic 111 had 1352 stalled cycles. +Nic 110 had 1352 stalled cycles. +Nic 109 had 1352 stalled cycles. +Nic 108 had 1352 stalled cycles. +Nic 107 had 1352 stalled cycles. +Nic 106 had 1352 stalled cycles. +Nic 105 had 1352 stalled cycles. +Nic 104 had 1352 stalled cycles. +Nic 103 had 1352 stalled cycles. +Nic 102 had 1352 stalled cycles. +Nic 101 had 1352 stalled cycles. +Nic 100 had 1352 stalled cycles. +Nic 99 had 1352 stalled cycles. +Nic 98 had 1352 stalled cycles. +Nic 97 had 1352 stalled cycles. +Nic 96 had 1352 stalled cycles. +Nic 95 had 1352 stalled cycles. +Nic 94 had 1352 stalled cycles. +Nic 93 had 1352 stalled cycles. +Nic 92 had 1352 stalled cycles. +Nic 91 had 1352 stalled cycles. +Nic 90 had 1352 stalled cycles. +Nic 89 had 1352 stalled cycles. +Nic 88 had 1352 stalled cycles. +Nic 87 had 1352 stalled cycles. +Nic 86 had 1352 stalled cycles. +Nic 85 had 1352 stalled cycles. +Nic 84 had 1352 stalled cycles. +Nic 83 had 1352 stalled cycles. +Nic 82 had 1352 stalled cycles. +Nic 81 had 1352 stalled cycles. +Nic 80 had 1352 stalled cycles. +Nic 79 had 1352 stalled cycles. +Nic 78 had 1352 stalled cycles. +Nic 77 had 1352 stalled cycles. +Nic 76 had 1352 stalled cycles. +Nic 75 had 1352 stalled cycles. +Nic 74 had 1352 stalled cycles. +Nic 73 had 1352 stalled cycles. +Nic 72 had 1352 stalled cycles. +Nic 71 had 1352 stalled cycles. +Nic 70 had 1352 stalled cycles. +Nic 69 had 1352 stalled cycles. +Nic 68 had 1352 stalled cycles. +Nic 67 had 1352 stalled cycles. +Nic 66 had 1352 stalled cycles. +Nic 65 had 1352 stalled cycles. +Nic 64 had 1352 stalled cycles. +Nic 63 had 1352 stalled cycles. +Nic 62 had 1352 stalled cycles. +Nic 61 had 1352 stalled cycles. +Nic 60 had 1352 stalled cycles. +Nic 59 had 1352 stalled cycles. +Nic 58 had 1352 stalled cycles. +Nic 57 had 1352 stalled cycles. +Nic 56 had 1352 stalled cycles. +Nic 55 had 1352 stalled cycles. +Nic 54 had 1352 stalled cycles. +Nic 53 had 1352 stalled cycles. +Nic 52 had 1352 stalled cycles. +Nic 51 had 1352 stalled cycles. +Nic 50 had 1352 stalled cycles. +Nic 49 had 1352 stalled cycles. +Nic 48 had 1352 stalled cycles. +Nic 47 had 1352 stalled cycles. +Nic 46 had 1352 stalled cycles. +Nic 45 had 1352 stalled cycles. +Nic 44 had 1352 stalled cycles. +Nic 43 had 1352 stalled cycles. +Nic 42 had 1352 stalled cycles. +Nic 41 had 1352 stalled cycles. +Nic 40 had 1352 stalled cycles. +Nic 39 had 1352 stalled cycles. +Nic 38 had 1352 stalled cycles. +Nic 37 had 1352 stalled cycles. +Nic 36 had 1352 stalled cycles. +Nic 35 had 1352 stalled cycles. +Nic 34 had 1352 stalled cycles. +Nic 33 had 1352 stalled cycles. +Nic 32 had 1352 stalled cycles. +Nic 31 had 1352 stalled cycles. +Nic 30 had 1352 stalled cycles. +Nic 29 had 1352 stalled cycles. +Nic 28 had 1352 stalled cycles. +Nic 27 had 1352 stalled cycles. +Nic 26 had 1352 stalled cycles. +Nic 25 had 1352 stalled cycles. +Nic 24 had 1352 stalled cycles. +Nic 23 had 1352 stalled cycles. +Nic 22 had 1352 stalled cycles. +Nic 21 had 1352 stalled cycles. +Nic 20 had 1352 stalled cycles. +Nic 19 had 1352 stalled cycles. +Nic 18 had 1352 stalled cycles. +Nic 17 had 1352 stalled cycles. +Nic 16 had 1352 stalled cycles. +Nic 15 had 1352 stalled cycles. +Nic 14 had 1352 stalled cycles. +Nic 13 had 1352 stalled cycles. +Nic 12 had 1352 stalled cycles. +Nic 11 had 1352 stalled cycles. +Nic 10 had 1352 stalled cycles. +Nic 9 had 1352 stalled cycles. +Nic 8 had 1352 stalled cycles. +Nic 7 had 1352 stalled cycles. +Nic 6 had 1352 stalled cycles. +Nic 5 had 1352 stalled cycles. +Nic 4 had 1352 stalled cycles. +Nic 3 had 1352 stalled cycles. +Nic 2 had 1352 stalled cycles. +Nic 1 had 1352 stalled cycles. +Nic 0 had 1352 stalled cycles. +Simulation is complete, simulated time: 6.602 us diff --git a/src/sst/elements/merlin/tests/testsuite_default_merlin.py b/src/sst/elements/merlin/tests/testsuite_default_merlin.py index 88e6cdc2f9..8624e27f22 100644 --- a/src/sst/elements/merlin/tests/testsuite_default_merlin.py +++ b/src/sst/elements/merlin/tests/testsuite_default_merlin.py @@ -86,6 +86,9 @@ def test_merlin_dragon_128_platform_cm(self): def test_merlin_dragon_128_fl(self): self.merlin_test_template("dragon_128_test_fl") + def test_merlin_dragon_128_deferred(self): + self.merlin_test_template("dragon_128_test_deferred") + @unittest.skipIf(not(('sympy.polys.galoistools' in sys.modules) and ('sympy.polys.domains' in sys.modules)), "Polarfly construction requires sympy") def test_merlin_polarfly_455(self): diff --git a/src/sst/elements/merlin/topology/dragonfly.cc b/src/sst/elements/merlin/topology/dragonfly.cc index 4feb2b5aeb..cbe02a51f5 100644 --- a/src/sst/elements/merlin/topology/dragonfly.cc +++ b/src/sst/elements/merlin/topology/dragonfly.cc @@ -30,7 +30,7 @@ using namespace SST::Merlin; void -RouteToGroup::init_write(const std::string& basename, int group_id, global_route_mode_t route_mode, +RouteToGroup::init_write(std::string basename, int group_id, global_route_mode_t route_mode, const dgnflyParams& params, const std::vector& global_link_map, bool config_failed_links, const std::vector& failed_links_vec) { @@ -120,7 +120,7 @@ RouteToGroup::init_write(const std::string& basename, int group_id, global_route } void -RouteToGroup::init(const std::string& basename, int group_id, global_route_mode_t route_mode, +RouteToGroup::init(std::string basename, int group_id, global_route_mode_t route_mode, const dgnflyParams& params, bool config_failed_links) { data.initialize(basename+"group_to_global_port"); @@ -240,6 +240,9 @@ topo_dragonfly::topo_dragonfly(ComponentId_t cid, Params &p, int num_ports, int params.n = p.find("intergroup_links"); params.m = p.find("intragroup_links", 1); + std::string prefix = p.find("network_name","network"); + prefix += "_"; + global_start = params.p + ((params.a - 1) * params.m); group_id = rtr_id / params.a; @@ -278,11 +281,11 @@ topo_dragonfly::topo_dragonfly(ComponentId_t cid, Params &p, int num_ports, int std::vector failed_links; p.find_array("failed_links", failed_links); - group_to_global_port.init_write("network_", group_id, global_route_mode, params, global_link_map, + group_to_global_port.init_write(prefix, group_id, global_route_mode, params, global_link_map, config_failed_links, failed_links); } else { - group_to_global_port.init("network_", group_id, global_route_mode, params, config_failed_links); + group_to_global_port.init(prefix, group_id, global_route_mode, params, config_failed_links); } // Setup the routing algorithms diff --git a/src/sst/elements/merlin/topology/dragonfly.h b/src/sst/elements/merlin/topology/dragonfly.h index 1693e4c8a3..259d3b4fb4 100644 --- a/src/sst/elements/merlin/topology/dragonfly.h +++ b/src/sst/elements/merlin/topology/dragonfly.h @@ -139,12 +139,11 @@ class RouteToGroup { public: RouteToGroup() {} - // void init(SharedRegion* sr, size_t g, size_t r); - void init_write(const std::string& basename, int group_id, global_route_mode_t route_mode, + void init_write(std::string basename, int group_id, global_route_mode_t route_mode, const dgnflyParams& params, const std::vector& global_link_map, bool config_failed_links, const std::vector& failed_links); - void init(const std::string& basename, int group_id, global_route_mode_t route_mode, + void init(std::string basename, int group_id, global_route_mode_t route_mode, const dgnflyParams& params, bool config_failed_links); const RouterPortPair& getRouterPortPair(int group, int route_number) const; @@ -200,6 +199,7 @@ class topo_dragonfly: public Topology { {"dragonfly.global_link_map", "Array specifying connectivity of global links in each dragonfly group."}, {"dragonfly.global_route_mode", "Mode for intepreting global link map [absolute (default) | relative].","absolute"}, + {"network_name", "Name of the network", "network"}, {"hosts_per_router", "Number of hosts connected to each router."}, {"routers_per_group", "Number of links used to connect to routers in same group."}, {"intergroup_per_router", "Number of links per router connected to other groups."}, diff --git a/src/sst/elements/merlin/topology/pymerlin-topo-dragonfly.py b/src/sst/elements/merlin/topology/pymerlin-topo-dragonfly.py index 5a3f8798ea..36d4222720 100644 --- a/src/sst/elements/merlin/topology/pymerlin-topo-dragonfly.py +++ b/src/sst/elements/merlin/topology/pymerlin-topo-dragonfly.py @@ -58,16 +58,16 @@ def getRouterNameForId(self,rtr_id): return self.getRouterNameForLocation(rtr_id // self.routers_per_group, rtr_id % self.routers_per_group) def getRouterNameForLocation(self,group,rtr): - return "%srtr_G%dR%d"%(self._prefix,group,rtr) + return "rtr_G%dR%d"%(group,rtr) def findRouterByLocation(self,group,rtr): return sst.findComponentByName(self.getRouterNameForLocation(group,rtr)) - def build(self, endpoint): + def _build_impl(self, endpoint): if self._check_first_build(): sst.addGlobalParams("params_%s"%self._instance_name, self._getGroupParams("main")) - + sst.addGlobalParam("params_%s"%self._instance_name, "network_name", self.network_name) if self.host_link_latency is None: self.host_link_latency = self.link_latency @@ -149,8 +149,7 @@ def getGlobalLink(g, r, p): src = min(dest_grp, g) dest = max(dest_grp, g) - #getLink("link:g%dg%dr%d"%(g, src, dst)), "port%d"%port, self.params["link_lat"]) - return getLink("%sglobal_link_g%dg%dr%d"%(self._prefix,src,dest,link_num)) + return getLink("global_link_g%dg%dr%d"%(src,dest,link_num)) ######################### @@ -176,14 +175,11 @@ def getGlobalLink(g, r, p): port = 0 for p in range(self.hosts_per_router): - #(nic, port_name) = endpoint.build(nic_num, {"num_peers":num_peers}) - (nic, port_name) = endpoint.build(nic_num, {}) - if nic: - link = sst.Link("link_g%dr%dh%d"%(g, r, p)) - #network_interface.build(nic,slot,0,link,self.host_link_latency) - link.connect( (nic, port_name, self.host_link_latency), (rtr, "port%d"%port, self.host_link_latency) ) - #link.setNoCut() - #rtr.addLink(link,"port%d"%port,self.host_link_latency) + link = sst.Link("link_g%dr%dh%d"%(g, r, p), self.host_link_latency) + + Buildable._instanceBuildableBackCompat(endpoint, rtr, "port%d"%port, nic_num, {}, link) + #link.setNoCut() + #rtr.addLink(link,"port%d"%port,self.host_link_latency) nic_num = nic_num + 1 port = port + 1 diff --git a/src/sst/elements/merlin/topology/pymerlin-topo-fattree.py b/src/sst/elements/merlin/topology/pymerlin-topo-fattree.py index 64d74b4fd6..da3f617912 100644 --- a/src/sst/elements/merlin/topology/pymerlin-topo-fattree.py +++ b/src/sst/elements/merlin/topology/pymerlin-topo-fattree.py @@ -106,14 +106,14 @@ def getRouterNameForId(self,rtr_id): def getRouterNameForLocation(self,location): - return "%srtr_l%s_g%d_r%d"%(self._prefix,location[0],location[1],location[2]) + return "rtr_l%s_g%d_r%d"%(location[0],location[1],location[2]) def findRouterByLocation(self,location): return sst.findComponentByName(self.getRouterNameForLocation(location)); - def build(self, endpoint): + def _build_impl(self, endpoint): if not self.host_link_latency: self.host_link_latency = self.link_latency diff --git a/src/sst/elements/merlin/topology/pymerlin-topo-hyperx.py b/src/sst/elements/merlin/topology/pymerlin-topo-hyperx.py index 900573f2c2..1eeb7e632b 100644 --- a/src/sst/elements/merlin/topology/pymerlin-topo-hyperx.py +++ b/src/sst/elements/merlin/topology/pymerlin-topo-hyperx.py @@ -101,13 +101,13 @@ def getRouterNameForId(self,rtr_id): return self.getRouterNameForLocation(self._idToLoc(rtr_id)) def getRouterNameForLocation(self,location): - return "%srtr_%s"%(self._prefix,self._formatShape(location)) + return "rtr_%s"%(self._formatShape(location)) def findRouterByLocation(self,location): return sst.findComponentByName(self.getRouterNameForLocation(location)) - def build(self, endpoint): + def _build_impl(self, endpoint): if self.host_link_latency is None: self.host_link_latency = self.link_latency diff --git a/src/sst/elements/merlin/topology/pymerlin-topo-mesh.py b/src/sst/elements/merlin/topology/pymerlin-topo-mesh.py index cc6a1491d4..2e038d5270 100644 --- a/src/sst/elements/merlin/topology/pymerlin-topo-mesh.py +++ b/src/sst/elements/merlin/topology/pymerlin-topo-mesh.py @@ -101,12 +101,12 @@ def getRouterNameForId(self,rtr_id): return self.getRouterNameForLocation(self._idToLoc(rtr_id)) def getRouterNameForLocation(self,location): - return "%srtr_%s"%(self._prefix,self._formatShape(location)) + return "rtr_%s"%(self._formatShape(location)) def findRouterByLocation(self,location): return sst.findComponentByName(self.getRouterNameForLocation(location)) - def build(self, endpoint): + def _build_impl(self, endpoint): if self.host_link_latency is None: self.host_link_latency = self.link_latency @@ -228,9 +228,9 @@ def getNumNodes(self): return self.num_ports def getRouterNameForId(self,rtr_id): - return "%srouter"%self._prefix + return "router" - def build(self, endpoint): + def _build_impl(self, endpoint): rtr = self._instanceRouter(self.num_ports,0) topo = rtr.setSubComponent(self.router.getTopologySlotName(),"merlin.singlerouter",0) diff --git a/src/sst/elements/merlin/topology/pymerlin-topo-polarfly.py b/src/sst/elements/merlin/topology/pymerlin-topo-polarfly.py index 9c16874731..c12918ad47 100644 --- a/src/sst/elements/merlin/topology/pymerlin-topo-polarfly.py +++ b/src/sst/elements/merlin/topology/pymerlin-topo-polarfly.py @@ -419,7 +419,7 @@ def save(self, folderpath, filename): print( " ".join(str(e) for e in node) + " ", file=f) - def build(self, endpoint): + def _build_impl(self, endpoint): if self._check_first_build(): sst.addGlobalParams("params_%s"%self._instance_name, self._getGroupParams("main")) diff --git a/src/sst/elements/merlin/topology/pymerlin-topo-polarstar.py b/src/sst/elements/merlin/topology/pymerlin-topo-polarstar.py index 123f7dd2a4..7fb3f896dc 100644 --- a/src/sst/elements/merlin/topology/pymerlin-topo-polarstar.py +++ b/src/sst/elements/merlin/topology/pymerlin-topo-polarstar.py @@ -610,7 +610,7 @@ def starProd(self, pfq, snq, sn): return adj_ps - def build(self, endpoint): + def _build_impl(self, endpoint): if self._check_first_build(): sst.addGlobalParams("params_%s"%self._instance_name, self._getGroupParams("main"))