proc want_all_spikes() { local i, gid
for pcitr(&i, &gid) {
pnm.spike_record(gid)
}
}
objref mxhist_
proc mkhist() {
if (pnm.myid == 0) {
mxhist_ = new Vector($1)
pc.max_histogram(mxhist_)
}
}
proc prhist() {local i, j
if (pnm.myid == 0 && object_id(mxhist_)) {
printf("histogram of #spikes vs #exchanges\n")
j = 0
for i=0, mxhist_.size-1 {
if (mxhist_.x[i] != 0) { j = i }
}
for i = 0, j {
printf("%d\t %d\n", i, mxhist_.x[i])
}
printf("end of histogram\n")
}
}
objref tdat_
tdat_ = new Vector(3)
proc prun() {
pnm.set_maxstep(10)
runtime=startsw()
tdat_.x[0] = pnm.pc.wait_time
stdinit()
pnm.psolve(tstop)
tdat_.x[0] = pnm.pc.wait_time - tdat_.x[0]
runtime = startsw() - runtime
tdat_.x[1] = pnm.pc.step_time
tdat_.x[2] = pnm.pc.send_time
// printf("%d wtime %g\n", pnm.myid, waittime)
}
proc poststat() {
pnm.pc.post("poststat", pnm.myid, tdat_)
}
objref spstat_
proc postspstat() {
spstat_ = new Vector()
cvode.spike_stat(spstat_)
pnm.pc.post("postspstat", pnm.myid, spstat_)
}
objref tavg_stat, tmin_stat, tmax_stat, idmin_stat, idmax_stat
proc getstat() {local i, j, id localobj tdat
tdat = tdat_.c tavg_stat = tdat_.c tmin_stat = tdat_.c tmax_stat = tdat_.c
idmin_stat = tdat_.c.fill(0) idmax_stat = tdat_.c.fill(0)
if (pnm.nwork > 1) {
pnm.pc.context("poststat()\n")
for i=0, pnm.nwork-2 {
pnm.pc.take("poststat", &id, tdat)
tavg_stat.add(tdat)
for j = 0, tdat_.size-1 {
if (tdat.x[j] > tmax_stat.x[j]) {
idmax_stat.x[j] = id
tmax_stat.x[j] = tdat.x[j]
}
if (tdat.x[j] < tmin_stat.x[j]) {
idmin_stat.x[j] = id
tmin_stat.x[j] = tdat.x[j]
}
}
}
}
tavg_stat.div(pnm.nhost)
}
proc print_spike_stat_info() {local i, j, id localobj spstat, sum, min, max, idmin, idmax, label
spstat = new Vector()
spstat_ = new Vector()
cvode.spike_stat(spstat_)
sum = spstat_.c
min = spstat_.c
max = spstat_.c
idmin = spstat_.c.fill(0)
idmax = spstat_.c.fill(0)
if (pnm.nwork > 1) {
pnm.pc.context("postspstat()\n")
for i=0, pnm.nwork-2 {
pnm.pc.take("postspstat", &id, spstat)
sum.add(spstat)
for j=0, spstat.size-1 {
if (spstat.x[j] > max.x[j]) {
idmax.x[j] = id
max.x[j] = spstat.x[j]
}
if (spstat.x[j] < min.x[j]) {
idmin.x[j] = id
min.x[j] = spstat.x[j]
}
}
}
}
label = new List()
label.append(new String("eqn"))
label.append(new String("NetCon"))
label.append(new String("deliver"))
label.append(new String("NC deliv"))
label.append(new String("PS send"))
label.append(new String("S deliv"))
label.append(new String("S send"))
label.append(new String("S move"))
label.append(new String("Q insert"))
label.append(new String("Q move"))
label.append(new String("Q remove"))
printf("%10s %13s %10s %10s %5s %5s\n",\
"", "total", "min", "max", "idmin", "idmax")
for i=0, spstat_.size-1 {
printf("%-10s %13.0lf %10d %10d %5d %5d\n",\
label.object(i).s, sum.x[i], min.x[i], max.x[i], idmin.x[i], idmax.x[i])
}
}
proc perf2file() { local i localobj perf
perf = new File()
perf.aopen("perf.dat")
perf.printf("%d %d %g %g ",pnm.nhost, pnm.ncell, setuptime, runtime)
for i=0, tdat_.size-1 { perf.printf(" %g", tavg_stat.x[i]) }
perf.printf(" ")
for i=0, tdat_.size-1 { perf.printf(" %d %g ", idmin_stat.x[i], tmin_stat.x[i]) }
perf.printf(" ")
for i=0, tdat_.size-1 { perf.printf(" %d %g ", idmax_stat.x[i], tmax_stat.x[i]) }
perf.printf("\n")
perf.close
}
proc spike2file() { localobj outf
outf = new File()
outf.wopen("out.dat")
for i=0, pnm.idvec.size-1 {
outf.printf("%g\t%d\n", pnm.spikevec.x[i], pnm.idvec.x[i])
}
outf.close
}