예제 #1
0
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
예제 #2
0
    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)
예제 #3
0
    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)
예제 #4
0
    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
예제 #5
0
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

            
            
                    
예제 #6
0
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