NeuronetExperimenter
supports the parallel execution of simulations. The way it works is
that a fraction of the network of neurons is integrated on each
processor and synchronized during each timestep. This results in output
data that is EXACTLY the same as if it were run on a single processor
-- only it was usually generated faster. Since there is a certain
amount of overhead in synchronizing the processes during the timesteps
(especially in clusters), you generally want to maximize the number of
neurons integrated on each processor as well as maximize the number of
equations in each neuron to see big speed increases. This means you
will not likely see significant speed increases in small networks
(<~100) unless each neuron is highly complex.
NOTE:
For the fastest program execution, only use these parallel features if
you actually have a multi-processor machine or cluster. For
single-processor machines, the standalone NeuronetExperimenter command will work faster.
For
example, on a dual-core iMac (with OS 10.4) running a 400-neuron
network, where each neuron had 7 differential equations, we got the
following time for a 5 second simulation to execute:
> time NeuronetExperimenter rhmd_m.setup time 2 m 0 s
On the same machine and using the same network, running NeuronetExperimenter on the two cores results in the following execution time:
> time pNeuronetExperimenter rhmd_m.setup 2 time 1 m 15 s
Or a 40% decrease in the execution time, where a 50% decrease is the maximum we could ever hope for. Notice that we used the special script pNeuronetExperimenter to
run the parallel simulations. This takes the .setup file as the first
argument and the number of processors to run as the second argument.
The time command we used is a
separate built-in program that simply measures the amount of time
another program takes to run (in this case pNeuronetExperimenter).
For dual-processor machines, the abbreviated command, dNeuronetExperimenter, can be used to start the parallel execution of rhm_m.setup as follows ('d' is for dual):
> dNeuronetExperimenter rhmd_m.setup
For four-processor machines, the abbreviated command, qNeuronetExperimenter, can be used to start the parallel execution of rhm_m.setup as follows ('q' is for quad):
> qNeuronetExperimenter rhmd_m.setup
On
multi-process clusters, the details of program execution will be highly
specific to how your cluster is arranged. Likewise, the types of
networks that will work optimally on your cluster will be dependent on
how it is arranged (JAH: more on this later).