User Tools

Site Tools


neurali:nest_parallel_computing

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) .

  1. thread-parallel simulation (usando OpenMP)
    • Non richiede software aggiuntivo
  2. 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
neurali/nest_parallel_computing.txt · Last modified: 2020/06/08 22:20 (external edit)