User Tools

Site Tools


neurali:nest_parallel_computing

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
neurali:nest_parallel_computing [2015/07/04 11:53]
profpro [Calcolo parallelo con NEST]
neurali:nest_parallel_computing [2020/06/08 22:20] (current)
Line 1: Line 1:
 +======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 ((NEST: http://journal.frontiersin.org/article/10.3389/fninf.2014.00078/full)) .
 +
 +  - 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
 +    * <code>configure --with-mpi</code>
 +  * Esecuzione su 128 processi (python non funziona con MPICH/ScaliMPI)
 +    * <code>mpirun -np 128 python script.py</code>
 +
 +
 +===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
 +
  
neurali/nest_parallel_computing.txt · Last modified: 2020/06/08 22:20 (external edit)