class DistributedConfiguration(object): def __init__(self, rank, number_of_processes=1, rank_address_function=lambda rank: "ipc://%s" % (5559 + rank), gid_to_rank=None): self.number_of_processes = number_of_processes self.rank_address_function = rank_address_function if gid_to_rank is None: def gid_to_rank(gid): return gid % self.number_of_processes self.gid_to_rank = gid_to_rank self.address_config_dict = {} for ii in range(number_of_processes): self.address_config_dict[ii] = self.rank_address_function(ii) self.synchronization_harness = SynchronizationHarness( rank, self.address_config_dict) def initialize(self, ti): self.synchronization_harness.initialize(ti) def update(self, ti, update_dict): self.synchronization_harness.update(ti, update_dict) def finalize(self): self.synchronization_harness.finalize() def rank(self): return self.synchronization_harness.rank
def __init__(self, rank, number_of_processes=1, rank_address_function=lambda rank: "ipc://%s" % (5559 + rank), gid_to_rank=None): self.number_of_processes = number_of_processes self.rank_address_function = rank_address_function if gid_to_rank is None: def gid_to_rank(gid): return gid % self.number_of_processes self.gid_to_rank = gid_to_rank self.address_config_dict = {} for ii in range(number_of_processes): self.address_config_dict[ii] = self.rank_address_function(ii) self.synchronization_harness = SynchronizationHarness( rank, self.address_config_dict)
def __init__(self, rank, number_of_processes = 1, rank_address_function = lambda rank:"ipc://%s" % (5559+rank), gid_to_rank = None): self.number_of_processes = number_of_processes self.rank_address_function = rank_address_function if gid_to_rank is None: def gid_to_rank(gid): return gid%self.number_of_processes self.gid_to_rank = gid_to_rank self.address_config_dict = {} for ii in range(number_of_processes): self.address_config_dict[ii] = self.rank_address_function(ii) self.synchronization_harness = SynchronizationHarness(rank, self.address_config_dict)
def run(simulation_dict, run_dict, result_dict, rank=None): t0 = run_dict['t0'] dt = run_dict['dt'] tf = run_dict['tf'] number_of_processes = run_dict.get('number_of_processes', 1) simulation = Network(**simulation_dict) if rank is None: simulation.run(dt=dt, tf=tf, t0=t0) else: address_config_dict = {} rank_address_function = lambda rank:"ipc://%s" % (5559+rank) for ii in range(number_of_processes): address_config_dict[ii] = rank_address_function(ii) simulation.run(dt=dt, tf=tf, t0=t0, synchronization_harness=SynchronizationHarness(rank, address_config_dict, number_of_processes)) result_dict[rank] = {} for p in simulation.population_list: result_dict[rank][p.gid] = p.firing_rate_record
class DistributedConfiguration(object): def __init__(self, rank, number_of_processes = 1, rank_address_function = lambda rank:"ipc://%s" % (5559+rank), gid_to_rank = None): self.number_of_processes = number_of_processes self.rank_address_function = rank_address_function if gid_to_rank is None: def gid_to_rank(gid): return gid%self.number_of_processes self.gid_to_rank = gid_to_rank self.address_config_dict = {} for ii in range(number_of_processes): self.address_config_dict[ii] = self.rank_address_function(ii) self.synchronization_harness = SynchronizationHarness(rank, self.address_config_dict) def initialize(self, ti): self.synchronization_harness.initialize(ti) def update(self, ti, update_dict): self.synchronization_harness.update(ti, update_dict) def finalize(self): self.synchronization_harness.finalize() def rank(self): return self.synchronization_harness.rank
b1_i1 = Connection(b1, i1, 1, weights=.005) b2_i2 = Connection(b2, i2, 1, weights=.005) b3_i3 = Connection(b3, i3, 1, weights=.005) b4_i4 = Connection(b4, i4, 1, weights=.005) network = Network([b1, b2, b3, b4, i1, i2, i3, i4], [b1_i1, b2_i2, b3_i3, b4_i4]) address_config_dict = {} rank_address_function = lambda rank:"ipc://%s" % (5559+rank) for ii in range(number_of_processes): address_config_dict[ii] = rank_address_function(ii) run_dict = {'t0':t0, 'dt':dt, 'tf':tf, 'synchronization_harness':SynchronizationHarness(rank, address_config_dict, number_of_processes)} t0 = time.time() network.run(**run_dict) print time.time() - t0 # profile = profile_simulation(simulation, run_dict, logging=False) # total_time = extract_value(profile, 'simulation.py', 'run') # parallel_overhead = extract_value(profile, 'distributedconfiguration.py', 'update') # parallel_win = extract_value(profile, 'internalpopulation.py', 'update') # if rank == 0: print 'total time: %s' % total_time # if rank == 0: print 'parallel_overhead: %s' % parallel_overhead # print 'parallel_win: %s' % parallel_win