Thanks. User support is an important part of the NEURON project.
Examining the code used by Sikora et al., I see two things that prevent the use of multithreaded simulation of models that use their synaptic mechanism.
First, several of the mechanisms used by their model are not threadsafe. In some cases this is because they contain GLOBAL variables. The files and the variables are
caconc.mod: GLOBAL caconc
modulate.mod: GLOBAL mod
ribbon_tiger.mod: GLOBAL total_count
ribbon_tiger.mod: GLOBAL vmin, vmax
rib_ufp.mod: GLOBAL total_count, Orate
rib_ufp.mod: GLOBAL vmin, vmax
At least a few of these variables appear on the left hand side of assignment statements. This is probably fixable, but judgement and effort will be required, including testing to make sure the revised mechanisms still work properly.
There are also VERBATIM blocks in
caconc.mod
cagf.mod
modulate.mod
spike.mod
tsbp.mod
vclmp.mod (3 separate VERBATIM blocks)
Unfortunately, some of these VERBATIM blocks perform nontrivial tasks, e.g. in
caconc.mod
modulate.mod
vclmp.mod (3 separate VERBATIM blocks)
Fixing these may be possible but it will not be trivial--judgement, effort, and time will be required.
nancyShu wrote:Next, I would build a network composed by many cells and synapses with some predefined connections.
In this situation, I have to consider how to assign these models on a cluster for speedup.
Not the way to go. First build a model designed for serial execution on a single processor. It is much easier to verify correct implementation and operation of such a model. A serial implementation is particularly important if this is your first foray into modeling with NEURON. Even if you are already an experienced NEURON user, a serial implementation is essential because it provides "standard model output" and "baseline performance measures" against which you can check your parallelization attempts. How else are you going to know that the parallelized model is working properly, and that it is indeed faster than the serial implementation?
Thus, I have to try transferring Calcium concentrations from the cell to the synapse.
Your parallelized implementation will involve "multisplitting" of model cells. Where to split, and the nature of the analog variable that must be communicated from the presynaptic cell to the synapses that are attached to postsynaptic targets, depends on the answers to these questions about the synapses that a presynaptic cell makes onto its targets.
1. Does each synapse see the same presynaptic calcium concentration (all are anatomically very close to each other), or must every synapse keep track of its own local calcium concentration?
2. Does each synapse see the same presynaptic membrane potential (all are electrically close to each other), or might they see significantly different membrane potentials (perhaps because they are located at very different places in the presynaptic cell)?