proc spikeout() {local i, rank localobj f // Write out a spike raster (cell, spike time) pc.barrier() // Wait for all ranks to get to this point sprint(cmd,"./results/%s/spikeraster.dat", RunName) f = new File(cmd) if (pc.id == 0) { // Write header to file 1 time only f.wopen() f.close() } for rank = 0, pc.nhost-1 { // For each processor, allow processor to append to file the spike times of its cells if (rank == pc.id) { // Ensure that each processor runs once f.aopen() // Open for appending to file for i=0, pnm.idvec.size-1 { f.printf("%.3f %d\n", pnm.spikevec.x[i], pnm.idvec.x[i]) // Print the spike time and spiking cell gid } f.close() } pc.barrier() } } proc spikeoutfast() {local i localobj f // Write out a spike raster quickly in parallel (cell, spike time) sprint(cmd,"./results/%s/spikeraster_%g.dat", RunName, pc.id) f = new File(cmd) f.wopen() for i=0, pnm.idvec.size-1 { f.printf("%.3f %d\n", pnm.spikevec.x[i], pnm.idvec.x[i]) // Print the spike time and spiking cell gid } f.close() g=1 if (CatFlag==1) { pc.barrier() while (pc.nhost>g) { g=g*2 if ((pc.id/g - int(pc.id/g))==0.5) { sprint(dircmd,"cat ./results/%s/spikeraster_%g.dat >> ./results/%s/spikeraster_%g.dat", RunName, pc.id, RunName, int(pc.id-g/2)) {system(dircmd, direx)} sprint(dircmd,"rm ./results/%s/spikeraster_%g.dat", RunName, pc.id) {system(dircmd, direx)} } pc.barrier() } } pc.barrier() if (pc.id==0) { if (CatFlag==1) { sprint(dircmd,"cat ./results/%s/spikeraster_0.dat >> ./results/%s/spikeraster.dat", RunName, RunName) {system(dircmd, direx)} sprint(dircmd,"rm ./results/%s/spikeraster_%g.dat", RunName, pc.id) {system(dircmd, direx)} } } } proc sumnumout() {local alltime, allct, allspk localobj f allct = pc.allreduce(nclist.count,1) allspk = pc.allreduce(pnm.idvec.size,1) comptime = pc.step_time avgcomp = pc.allreduce(comptime, 1)/pc.nhost maxcomp = pc.allreduce(comptime, 2) loadbal=1 exchtime=0 if (maxcomp>0) { loadbal=avgcomp/maxcomp exchtime= $1 - maxcomp } if (pc.id == 0) { // Write header to file 1 time only alltime = startsw() - loadstart sprint(cmd,"./results/%s/sumnumout.txt", RunName) f = new File(cmd) f.wopen() f.printf("NumCells = %g;\nNumSpikes = %g;\nNumConnections = %g;\nRunTime = %g;\nNumCellTypes = %g;\nLoadBalResult = %g;\nExchangeResult = %g;\n", ncell, allspk, allct, alltime, numCellTypes, loadbal, exchtime) // Print the spike time and spiking cell gid f.close() } } proc timeout() {local i, rank, gid, srcid localobj tgt, f, cell// Write out runtimes for each processor pc.barrier() // Wait for all ranks to get to this point sprint(cmd,"./results/%s/runtimes.dat", RunName) f = new File(cmd) if (pc.id == 0) { // Write header to file 1 time only f.wopen() f.printf("host\tset up\tcreated cells\tconnected cells\tran simulation\t\n") f.close() } for rank = 0, pc.nhost-1 { // For each processor, allow processor to append its runtimes to file if (rank == pc.id) { // Ensure that each processor runs once f.aopen() // Open for appending to file f.printf("%g\t%g\t%g\t%g\t%g\n", pc.id, loadtime, createtime, connecttime, runtime) f.close() } pc.barrier() } } proc highIndexout() {local i, ij, gid localobj cell pc.barrier() // Wait for all ranks to get to this point sprint(cmd,"./results/%s/MaxHighIndex.txt", RunName) f = new File(cmd) perRankmax=0 for j = 0, numCellTypes-1 { if (cellType[j].LastHighIndex>perRankmax) { perRankmax=cellType[j].LastHighIndex } } maxconn = pc.allreduce(perRankmax, 2) perRankmax=0 for pcitr(&i, &ij, &gid, 0, ncell) { if (pc.gid_exists(gid)) { cell = pc.gid2cell(gid) if (ransynlist.object(cell.randi).seq()>perRankmax) { perRankmax=ransynlist.object(cell.randi).seq() } } } maxsyn = pc.allreduce(perRankmax, 2) perRankmax=0 for pcitr(&i, &ij, &gid, 0, ncell) { if (pc.gid_exists(gid)) { cell = pc.gid2cell(gid) if (ransynlist.object(cell.randi).seq()>perRankmax) { perRankmax=ranstimlist.object(cell.randi).seq() } } } maxstim = pc.allreduce(perRankmax, 2) if (pc.id == 0) { // Write header to file 1 time only f.wopen() f.printf("connection_highIndex=%f;\nsynapse_highIndex=%f;\nstimulation_highIndex=%f;\n",maxconn,maxsyn,maxstim) f.close() } } objref spkhist, f4 strdef cmd proc setupSpikeHistogram() { spkhist = new Vector(pc.nhost) if (pc.id==0) { pc.max_histogram(spkhist) } } proc printSpikeHistogram() { sprint(cmd,"./results/%s/spkhist.dat", RunName) f4 = new File(cmd) f4.wopen() // Open for appending to file for i=0, pc.nhost-1 { f4.printf("%d\t%d\n", i, spkhist.x[i]) // Print the spike time and spiking cell gid } f4.close() }