class Simulator: def __init__(self,network): self.nodes=[] self.projections=[] self.network=network self.initialize(network) if NEFGPUInterface.getUseGPU(): gpuNodes = LocalSimulator.collectNodes(self.nodes) gpuNetworkArrays = LocalSimulator.collectNetworkArraysForGPU(self.nodes) gpuProjections = LocalSimulator.collectProjections(self.nodes, self.projections) self.thread_pool=NEFGPUInterface(gpuNodes, gpuProjections, gpuNetworkArrays) elif NodeThreadPool.isMultithreading(): multithread_nodes = LocalSimulator.collectNodes(self.nodes) multithread_projs = LocalSimulator.collectProjections(self.nodes, self.projections) self.thread_pool=NodeThreadPool(multithread_nodes, multithread_projs) else: self.thread_pool=None def initialize(self,network): for p in network.projections: self.projections.append(p); for n in network.nodes: if n.__class__.__name__=='NetworkArray': self.nodes.append(n) elif isinstance(n,Network) and not n.__class__.__name__ in ['CCMModelNetwork','PyramidalNetwork']: self.initialize(n) else: self.nodes.append(n) def reset(self,randomize=False): for n in self.nodes: n.reset(randomize) def step(self,start,end): if self.thread_pool is not None: # the thread pool should take care of the projections self.thread_pool.step(start,end) else: for p in self.projections: p.termination.setValues(p.origin.getValues()) for n in self.nodes: n.run(start,end) def kill(self): if self.thread_pool is not None: self.thread_pool.kill() self.thread_pool = None
class Simulator: def __init__(self,network): self.nodes=[] self.projections=[] self.tasks=[] self.network=network self.initialize(network) if NodeThreadPool.getNumJavaThreads() > 0: NEFGPUInterface.requireAllOutputsOnCPU(True); self.thread_pool=NodeThreadPool(network,[]); else: self.thread_pool=None; def initialize(self,network): for p in network.projections: self.projections.append(p); for n in network.nodes: if isinstance(n,Network) and not n.__class__.__name__ in ['CCMModelNetwork','PyramidalNetwork']: self.initialize(n) else: self.nodes.append(n) def reset(self,randomize=False): for n in self.nodes: n.reset(randomize) # Force java garbage collection to free (hopefully) unused memory System.gc() def step(self,start,end): self.network.fireStepListeners(start) if self.thread_pool is not None: self.thread_pool.step(start,end) else: for p in self.projections: p.termination.setValues(p.origin.getValues()) for n in self.nodes: n.run(start,end) #for t in self.tasks: # t.run(start,end) def kill(self): if self.thread_pool is not None: NEFGPUInterface.requireAllOutputsOnCPU(False); self.thread_pool.kill() self.thread_pool = None
class Simulator: def __init__(self, network): self.nodes = [] self.projections = [] self.tasks = [] self.network = network self.initialize(network) if NodeThreadPool.getNumJavaThreads() > 0: NEFGPUInterface.requireAllOutputsOnCPU(True) self.thread_pool = NodeThreadPool(network, []) else: self.thread_pool = None def initialize(self, network): for p in network.projections: self.projections.append(p) for n in network.nodes: if isinstance(n, Network) and not n.__class__.__name__ in [ 'CCMModelNetwork', 'PyramidalNetwork' ]: self.initialize(n) else: self.nodes.append(n) def reset(self, randomize=False): for n in self.nodes: n.reset(randomize) # Force java garbage collection to free (hopefully) unused memory System.gc() def step(self, start, end): self.network.fireStepListeners(start) if self.thread_pool is not None: self.thread_pool.step(start, end) else: for p in self.projections: p.termination.setValues(p.origin.getValues()) for n in self.nodes: n.run(start, end) #for t in self.tasks: # t.run(start,end) def kill(self): if self.thread_pool is not None: NEFGPUInterface.requireAllOutputsOnCPU(False) self.thread_pool.kill() self.thread_pool = None