-
Notifications
You must be signed in to change notification settings - Fork 261
Open
Description
My use case is writing and reading of hundreds of spike trains with order 10k spikes each. I observe an increasing time it takes for reading and writing of NixIO/hdf5 files as function of the number of spike trains (see below). Is there anything I can tune? The CPU is an Intel(R) Xeon(R) CPU E5-2643 v2 @ 3.50GHz.
$ for n in 10 25 50 100 150 200 ; do ./test_spiketrain.py $n 10; done
writing/reading 10 spike train(s) with 10 spike(s) each took 0.47s/ 0.35s ( 0.05s/ 0.04s per train)
writing/reading 25 spike train(s) with 10 spike(s) each took 1.42s/ 1.32s ( 0.06s/ 0.05s per train)
writing/reading 50 spike train(s) with 10 spike(s) each took 4.36s/ 4.52s ( 0.09s/ 0.09s per train)
writing/reading 100 spike train(s) with 10 spike(s) each took 15.00s/16.57s ( 0.15s/ 0.17s per train)
writing/reading 150 spike train(s) with 10 spike(s) each took 31.42s/36.65s ( 0.21s/ 0.24s per train)
writing/reading 200 spike train(s) with 10 spike(s) each took 53.90s/61.84s ( 0.27s/ 0.31s per train)
#!/usr/bin/env python
import neo
import time
import argparse
import numpy as np
from quantities import ms, mV
parser = argparse.ArgumentParser()
parser.add_argument('number_of_trains', type=int)
parser.add_argument('number_of_spikes_per_train', type=int)
args, argv = parser.parse_known_args()
blk = neo.Block()
seg = neo.Segment()
blk.segments.append(seg)
for _ in xrange(args.number_of_trains):
train = neo.SpikeTrain(times=np.arange(args.number_of_spikes_per_train)*ms,
t_stop=args.number_of_spikes_per_train*ms)
seg.spiketrains.append(train)
start_write = time.time()
neo.NixIO(filename="blk.h5", mode='ow').write(blk)
done_write = time.time()
write_duration = done_write - start_write
start_read = time.time()
neo.NixIO(filename="blk.h5").read_block()
done_read = time.time()
read_duration = done_read - start_read
print "writing/reading {:3d} spike train(s) with {:2d} spike(s) each " \
"took {:5.2f}s/{:5.2f}s ({:5.2f}s/{:5.2f}s per train)".format(args.number_of_trains,
args.number_of_spikes_per_train,
write_duration,
read_duration,
write_duration/args.number_of_trains,
read_duration/args.number_of_trains)