Hi ,
I need clarifications regrading the spike generation in CARLSIM and GPU execution time while runing the SNN,
spike generation in CARLSIM:
1) can we provide customized spike trains instead of the PossionRate for the input layer neurons?For e.g, if I have the input spike trains in some text file, can I use it for the input neuron groups?
2) I believe while setting up the spike rates with setRates() methods, we are setting up the input spike rates. However, when I am seeing the spike rate of input layer via sim.setSpikeMonitor(gin,"DEFAULT") ( the input layer name is gin); the spike rates don't seem to have impact on the number of input neurons spiking at each time step. For an example, if I have set number of input neurons (gin) as 2048, and spike rate as 75, I can expect around 1500 neurons spiking per timestamp, though in spikemonitor I could see only 150-200 neurons are spiking. Is my understand correct about the spike rate?
GPU execution time:
My objective is to capture the GPU execution time only at the time of running the SNN network,i.e while calling runNetwork() method.
I have used the cuda timer in runNetwork() (in snn_cpu.cpp file), between different places of GPU functions in following way
CUDA_RESET_TIMER(timer);
CUDA_START_TIMER(timer);
<method to GPU>
CUDA_STOP_TIMER(timer);
and the methods are;
a) doGPUSim()
b) updateWeights_GPU()
c) updateFiringTable_GPU()
d) CopyFiringTable_GPU()
Now, I have simulated different SNNs with varying number of layers, neuron numbers in each layer and spike rate.
For example:
Network 1: 4 layers, INPUT : 784, HIDDEN1: 1200 , HIDDEN2: 1200, OUTPUT: 10 ,spike rate ~4% (all neurons are excitatory in nature)
Network 2: 5 layers INPUT : 3072, HIDDEN1: 2000 , HIDDEN2: 2000, HIDDEN3: 500, OUTPUT: 10, spike rate ~47% (all neurons are excitatory in nature)
Network 3: 4 layers INPUT : 2048, HIDDEN1: 500 , HIDDEN2: 500, OUTPUT: 5, spike rate ~75% (all neurons are excitatory in nature)
Also,
a) I am using COBA method ;
sim.setConductances(true);
b) I have used the basic parameters in the methods like,
sim.setNeuronParameters(gout, 0.02f, 0.2f, -65.0f, 8.0f);
sim.connect(gin, gout, "full", RangeWeight(0.05), 1.0f, RangeDelay(1)); //all adjacent layers are connected with the respective group names with same configuration
sim.setIntegrationMethod(FORWARD_EULER, 2);
c) I am running each network for 35 milliseconds;
for (int i=0; i<35; i++) {
sim.runNetwork(0,1);
//1ms each
}
When I got the execution time in GPU from the above mentioned 4 methods, first three methods' execution time by GPU are not changing significantly for different network configurations; while only the final method 's(CopyFiringTable_GPU()) execution time is changing.
That's something I am not able to figure out. I was expecting some differences in other methods as well, since I am changing the network configuration.
1) So, is my way of evaluation correct?
2) What does this method CopyFiringTable_GPU() actually do?
PN: I am new to this simulator, I apologize if my questions are naive.
Regards,
Arnab