Table of Contents
Calcolo parallelo con NEST
A partire dalla versione 2.0 NEST può eseguire simulazioni su processori multicore o su macchine con più processori, oppure su cluster di computer, usando due tipi di simulazioni in parallelo, elaborando reti di milioni di neuroni 1) .
- thread-parallel simulation (usando OpenMP)
- Non richiede software aggiuntivo
- distributed simulation (usando MPI)
- Permette di distribuire il carico dei programmi su diverse macchine, condividendo risorse hardware e riducendo tempi di simulazione. Aggiunge un sovraccarico per la gestione della sincronizzazione delle diverse macchine????
Termini utilizzati
- N: n. di neuroni/nodes
- K: n. di sinapsi per ogni neurone
- M: n. di compute nodes????????
- T: n. di thread all'interno di ogni processo
- VP: (virtual process) è sempre un Thread (locale o remoto) all'interno di un processo MPI
- M*T: n. totale thread
Un VP è un thread (locale oppure remoto) in un processo MPI (locale oppure remoto) All'interno di un VP vi possono essere più Nodes
Per questo motivo ogni Node possiede uno “Status Dictionary” con:
- Global id: identificatore
- local: true/false
- thread: identificatore thread
- idvp: identificatore VP
- to_file: label-gid-idvp.dat/.gdf
- children_on_same_vp: true/false
L'ultimo valore si può impostare quando il Node è di tipo subnet
Simulazione multithread
Il comportamento predefinito per NEST è usare un solo Thread (T=1). Si possono impostare valori pari al numero dei core del processore o multiplo. Esempio: Quad-core (T=4, T=8).
nest.SetKernelStatus({"local_num_threads":T})
Simluazione distribuita (cluster)
Si può usare una libreria come: OpenMPI/MPICH/ScaliMPI
- Compilazione
configure --with-mpi
- Esecuzione su 128 processi (python non funziona con MPICH/ScaliMPI)
mpirun -np 128 python script.py
Comandi utilizzabili
Restituisce idprocesso
- Rank
Restituisce numero processi
- NumProcess
Restituisce nome della macchina
- MPIProcessorName
Per ottenere gli stessi risultati bisogna mantenere costante il numero VP.
Approfondimento: Random numbers in NEST
nest.SetKernelStatus({"total_num_virtual_procs":4})
Quando un evento spike viene inviato da un neurone (source) ai neuroni destinatari (target), ogni macchina in rete deve avere le informazioni che determinano se ci sono neuroni interessati allo spike su quella macchina. NEST memorizza le sinapsi in uscita in una lista.
Le connessioni di tipo eccitatorie-eccitatorie usano sinpasi STDP, mentre le altre connessioni usano sinapsi statiche.
Esempio set 1
- V.. potenziale di membrana iniziale?
- V.. potenziale di membrana medio?
- J.. pesi sinaptici iniziali (Je: eccitatori,Ji: inibitori)
- K: 11250 (80% sono eccitatorie)
- Je: 45.611 pA
- Ji: -5*Je
- Vth: 20 mV
- Tm: 10 ms
- Cm: 250 pF
- Tsyn: 0.3258 ms
- Tdelay: 1.5 ms?
- step campionamento = 0.1 ms