def cx(env): rank = int(env.pc.id()) lb = h.LoadBalance() if os.path.isfile("mcomplex.dat"): lb.read_mcomplex() cxvec = h.Vector(len(env.gidlist)) for i, gid in enumerate(env.gidlist): cxvec.x[i] = lb.cell_complexity(env.pc.gid2cell(gid)) env.cxvec = cxvec return cxvec
def cx(env): """ Estimates cell complexity. Uses the LoadBalance class. :param env: an instance of the `dentate.Env` class. """ rank = int(env.pc.id()) lb = h.LoadBalance() if os.path.isfile("mcomplex.dat"): lb.read_mcomplex() cxvec = np.zeros((len(env.gidset), )) for i, gid in enumerate(env.gidset): cxvec[i] = lb.cell_complexity(env.pc.gid2cell(gid)) env.cxvec = cxvec return cxvec
def lpt_bal(env): rank = int(env.pc.id()) nhosts = int(env.pc.nhost()) cxvec = env.cxvec gidvec = env.gidlist # gather gidvec, cxvec to rank 0 src = [None] * nhosts src[0] = zip(cxvec.to_python(), gidvec) dest = env.pc.py_alltoall(src) del src if rank == 0: lb = h.LoadBalance() allpairs = sum(dest, []) del dest parts = lpt.lpt(allpairs, nhosts) lpt.statistics(parts) part_rank = 0 with open('parts.%d' % nhosts, 'w') as fp: for part in parts: for x in part[1]: fp.write('%d %d\n' % (x[1], part_rank)) part_rank = part_rank + 1
from neuron import h h.load_file("loadbal.hoc") try: lb = h.LoadBalance() except AttributeError: pass
def get_cell(env, gid, population): """ :param env: :param gid: :param population: :return: """ h.load_file("nrngui.hoc") h.load_file("loadbal.hoc") h('objref fi_status, fi_checksimtime, pc, nclist, nc, nil') h('strdef datasetPath') h('numCells = 0') h('totalNumCells = 0') h('max_walltime_hrs = 0') h('mkcellstime = 0') h('mkstimtime = 0') h('connectcellstime = 0') h('connectgjstime = 0') h('results_write_time = 0') h.nclist = h.List() datasetPath = os.path.join(env.datasetPrefix, env.datasetName) h.datasetPath = datasetPath ## new ParallelContext object # h.pc = h.ParallelContext() # env.pc = h.pc rank = int(env.pc.id()) nhosts = int(env.pc.nhost()) ## polymorphic value template h.load_file("./templates/Value.hoc") ## randomstream template h.load_file("./templates/ranstream.hoc") ## stimulus cell template h.load_file("./templates/StimCell.hoc") h.xopen("./lib.hoc") h.dt = env.dt h.tstop = env.tstop if env.optldbal or env.optlptbal: lb = h.LoadBalance() if not os.path.isfile("mcomplex.dat"): lb.ExperimentalMechComplex() if (env.pc.id() == 0): mkspikeout(env, env.spikeoutPath) env.pc.barrier() h.startsw() mkcells(env) env.mkcellstime = h.stopsw() env.pc.barrier() if (env.pc.id() == 0): print "*** Cells created in %g seconds" % env.mkcellstime print "*** Rank %i created %i cells" % (env.pc.id(), len(env.cells)) h.startsw() mkstim(env) env.mkstimtime = h.stopsw() if (env.pc.id() == 0): print "*** Stimuli created in %g seconds" % env.mkstimtime env.pc.barrier() h.startsw() connectcells(env) env.connectcellstime = h.stopsw() env.pc.barrier() if (env.pc.id() == 0): print "*** Connections created in %g seconds" % env.connectcellstime print "*** Rank %i created %i connections" % (env.pc.id(), int(h.nclist.count())) h.startsw() # connectgjs(env) env.connectgjstime = h.stopsw() if (env.pc.id() == 0): print "*** Gap junctions created in %g seconds" % env.connectgjstime env.pc.setup_transfer() env.pc.set_maxstep(10.0) h.max_walltime_hrs = env.max_walltime_hrs h.mkcellstime = env.mkcellstime h.mkstimtime = env.mkstimtime h.connectcellstime = env.connectcellstime h.connectgjstime = env.connectgjstime h.results_write_time = env.results_write_time h.fi_checksimtime = h.FInitializeHandler("checksimtime(pc)") if (env.pc.id() == 0): print "dt = %g" % h.dt print "tstop = %g" % h.tstop h.fi_status = h.FInitializeHandler("simstatus()") h.v_init = env.v_init h.stdinit() h.finitialize(env.v_init) env.pc.barrier() if env.optldbal or env.optlptbal: cx(env) ld_bal(env) if env.optlptbal: lpt_bal(env)