Come migliorare le prestazioni di un codice di dinamica molecolare.

Slides:



Advertisements
Presentazioni simili
Misure ed Errori Prof Valerio CURCIO.
Advertisements

DEDICATO AGLI AMMINISTRATORI DI SISTEMA
Quinta Lezione Espansione in momenti di dipolo, Metodo delle immagini, definizione e calcolo capacità.
Calcolo di valori approssimati delle radici
Il moto rettilineo uniformemente accelerato
Corso di Chimica Fisica II 2011 Marina Brustolon
Densita’ degli stati di una particella in una buca di potenziale tridimensionale a pareti rigide l’energia di una particella confinata in una buca di potenziale.
Dinamica del manipolatore
Il campo elettrico - Lo chiamiamo campo elettrico,
Fisica 2 18° lezione.
Meccanica 8 31 marzo 2011 Teorema del momento angolare. 2° eq. Cardinale Conservazione del momento angolare Sistema del centro di massa. Teoremi di Koenig.
Istituzioni di Fisica Subnucleare A
Istituzioni di Fisica Subnucleare A
Iterazione enumerativa (for)
Elementi di Matematica
A. Martini Un altro aspetto nuovo, incredibile e di enorme importanza è il collegamento tra MASSA ed ENERGIA.
A. Martini Arrivati a questo punto, sono in grado di spiegarti il motivo per cui due fili paralleli, percorsi da corrente, interagiscono con una forza.
Metodi numerici per equazioni lineari iperboliche Gabriella Puppo.
LA LEGGE DI COULOMB La legge di Coulomb descrive la forza che si esercita tra due cariche elettriche puntiformi, ovvero di dimensioni trascurabili rispetto.
Le forze conservative g P2 P1 U= energia potenziale
Velocità media Abbiamo definito la velocità vettoriale media.
I conduttori in un campo elettrostatico
Uso dei cicli y t =c+ty t-1 +e Un uso dei cicli può essere quello di creare una serie storica per cui y t =c+ty t-1 +e dove poniamo c e t scalari ed e~N(0,1).
TERZE OBIEZIONI Hobbes
Ricerca della Legge di Controllo
Dinamica Molecolare.
Dinamica dei sistemi di punti
Le cause del moto: la situazione prima di Galilei e di Newton
Il prodotto vettoriale
Lezione 7 Dinamica dei sistemi di punti materiali
Studente Claudia Puzzo
QuickSort Quick-Sort(A,s,d) IF s < d THEN q = Partiziona(A,s,d) Quick-Sort(A,s,q-1) Quick-Sort(A,q + 1,d)
Analisi delle corrispondenze
OPERAZIONI CON TRINOMI DI II° GRADO
memoria gestita staticamente:
Limiti al trasferimento di informazione u Il tempo necessario per trasmettere dellinformazione dipende da: –la velocita di segnalazione (cioe quanto velocemente.
Restituzione questionario
Il Cerca – costellazioni
Punto nave con rilevamento polare 45° e Traverso
a b c d 1 - CHIAMIAMO SIMILI: due figure che si assomigliano
Quando entra a far parte della vita reale
Unita’ Naturali.
del corpo rigido definizione
Programma esame Fondamenti di Elettrotecnica (PRIMA PARTE) Prof : Antonio Luchetta.
Vertici, spigoli e facce di cubi a più dimensioni
Basta poco per torturare un uomo...
Valutare la difficoltà dei problemi
OPERAZIONI CON TRINOMI DI II° GRADO
Misure ed Errori.
MUSICA PITAGORICA.
Rappresentazioni a lunghezza fissa: problemi
Bit singolo e burst u un canale che trasmette voce tollera bene gli errori distribuiti uniformemente –perche’ errori singoli hanno effetti simili al rumore.
Rappresentazione dell'informazione
Conversione binario-ottale/esadecimale
Spiegazione di alcuni concetti
Flusso di Costo Minimo Applicazione di algoritmi: Cammini Minimi Successivi (SSP) Esercizio 1 Sia data la seguente rete di flusso, in cui i valori riportati.
Moltiplicazioni a più cifre
Algoritmi e Strutture Dati
Potenziale elettrico e differenza di potenziale
DENOMIBUS Progetto Denomibus O TIT TRIMARIO. Il CODICE è il Falso Dubbio Vero in forma 2, 0, 1 è anche inteso Acceso, Spento o Difettoso con 2 0.
Le immagini (e non solo) sono state da:
Forma normale delle equazioni di 2° grado Definizione. Un'equazione di secondo grado è in forma normale se si presenta nella forma Dove sono numeri.
Un sistema di equazioni di primo grado (lineari) ammette soluzioni (una o infinite) se e solo se il rango (caratteristica) della matrice completa è uguale.
DIPENDENZA STATISTICA TRA DUE CARATTERI Per una stessa collettività può essere interessante studiare più caratteri presenti contemporaneamente in ogni.
Definizione di Flusso Il flusso è la misura di quanto materiale o campo passa attraverso una superficie nel tempo. Se si parla di campo elettrico basterà.
Se A e B sono variabili random statisticamente indipendenti P (2) (B,A)=P(B)P(A) P(A)=probabilità che la variabile stocastica A assuma un certo valore.
Consideriamo un cristallo di Ag (fcc; a=4.09Å), descritto da un qualche potenziale semiempirico (negli esempi sarà EAM, ma non importa). Vogliamo studiarne.
Lezione n. Parole chiave: Corso di Laurea: Insegnamento: Docente: A.A Salvatore Cuomo La ricorsione 15 Approccio ricorsivo, esercizi sulla.
Transcript della presentazione:

Come migliorare le prestazioni di un codice di dinamica molecolare

Ogni volta che facciamo la lista dei vicini …. do i=1,N do j=1,N ….. end do CICLO DOPPIO SUL NUMERO DI ATOMI. SCALA CON N 2 (anche se lo implemento come do i=1,N do j=i+1,N …. end do end do)

I cicli per calcolare forze/energia potenziale sono del tipo … do i=1,N do j=1,nvicini(i) ….. end do ovvero scalano in modo lineare con N. Pensarci: parto da una cella di N atomi. Diciamo che ogni atomo ha M vicini, allora il ciclo porta a NxM operazioni. Ora raddoppio la cella. Il numero di vicini è sempre lo stesso, quindi le operazioni sono 2NxM -> scaling lineare. Ma lo scaling complessivo del codice è determinato dalla chiamata ai vicini che, se raddoppio la cella, richiede 2Nx2N operazioni, e quindi scala col quadrato. DOMANDA: MA PERCHE’ ALLORA MI COMPLICO LA VITA FACENDO I VICINI QUANDO A PARITA’ DI SCALING POTREI FARE ….

Calcolo energia potenziale (stesso per le forze) senza passare per i vicini … do i=1,N do j=1,N calcolo distanza tra i e j, se è minore di rc, allora E=E+… end do il codice continuerebbe a scalare con il quadrato degli atomi ed eviterei i problemi connessi a costruire nvicini(i), e ivicini(i,j). Il punto chiave è che nessun codice di dinamica molecolare veramente utile (ovvero tale da permettere simulazioni con oltre 1 milione di atomi) scala con N 2. L’utilizzo del concetto di “vicino” (possibile solo se posso introdurre un raggio di cutoff per il potenziale) permette di implementare dei trucchi piuttosto semplici che pur lasciando del tutto invariata la dinamica migliorano le prestazioni del codice.

Le gabbie di Verlet Fissiamo l’attenzione su un atomo (blu) del nostro sistema: sappiamo che solo gli atomi con distanza minore di rc da lui sono rilevanti (in rosso). Gli altri (verdi) non influenzano la sua energetica/dinamica. rc

Le gabbie di Verlet Durante la dinamica l’atomo di riferimento si sposta portandosi appresso la sua sfera, e parimenti si spostano gli altri atomi. Per semplicità mettiamoci in un sistema di riferimento solidale con l’atomo di riferimento. Immaginiamo di essere al passo zero, di calcolare la lista dei vicini e poi di evolvere il sistema senza aggiornarla più. rc

Le gabbie di Verlet Se le distanze cambiano, nelle routines delle forze e dell’energia potenziale me ne accorgo perché le ricalcolo ogni volta. Finche’ la lista dei vicini è invariata la dinamica è esatta, e il costo computazionale è inferiore. rc

Le gabbie di Verlet Se le distanze cambiano, nelle routines delle forze e dell’energia potenziale me ne accorgo perché le ricalcolo ogni volta. Finche’ la lista dei vicini è invariata la dinamica è esatta, e il costo computazionale è inferiore. rc

Le gabbie di Verlet Se un atomo esce dalla sfera non è un problema dato che nel calcolo delle forze/dell’energia mi accorgo che la sua distanza è superiore a rc e pongo uguale a zero il suo contributo rc

Le gabbie di Verlet Se un atomo entra nella sfera è invece un disastro dato che se non aggiorno la lista dei vicini non mi accorgo della sua presenza. rc

Le gabbie di Verlet Posso limitare il numero delle chiamate ai vicini senza commettere un simile errore? Vediamo lo schema seguente. Introduco un secondo raggio, fittizo, rv>rc e calcolo la lista dei vicini nella sfera grande. Gli atomi tra le due sfere sono vicini ma non contribuiscono a forza/energia. rc

Le gabbie di Verlet Se un atomo passa dalla crosta sferica alla vera sfera di cutoff, non c’e’ alcun problema. Dato che è in lista, mi accorgo che la sua distanza è diventata inferiore a rc, e calcolo il suo contributo. rc

Le gabbie di Verlet Se un atomo passa dalla crosta sferica alla regione esterna non c’e’ alcun problema. Il suo contributo a forza/energia nullo era e nullo rimane. rc

Le gabbie di Verlet Se un atomo passa dalla sfera interna alla crosta sferica, non c’e’ alcun problema. Mi accorgo che la sua distanza è ora maggiore di rc e non calcolo il suo contributo. rc

Le gabbie di Verlet Se un atomo passa dalla sfera interna alla regione esterna non c’e’ alcun problema. Mi accorgo che la sua distanza è ora maggiore di rc e non calcolo il suo contributo. rc

Le gabbie di Verlet Se un atomo passa dalla regione esterna alla sfera interna allora ho problemi: non mi accorgo di avere un nuovo vicino. Come evitarlo? rc

Le gabbie di Verlet Al passo zero, quando calcolo la lista dei vicini per la prima volta, salvo le posizioni. Ad ogni passo successivo calcolo la distanza massima di cui si è mosso un atomo dalla configurazione salvata. Dato che sono preoccupato che un atomo possa passare dalla regione esterna alla sfera interna, controllo che rc (il fattore ½ tiene conto del fatto che anche l’atomo di cui sto calcolando i vicini si può muovere) Se la diseguaglianza è soddisfatta vado avanti con la dinamica, se no riaggiorno la lista dei vicini, e aggiorno la configurazione da usare come riferimento.

Implementazione call vicini(rv,….) do i=1,natoms xsave(i)=x(i)!stesso per y e z end do dmax=0.d0 do imd=1,nmd!passi di dinamica molecolare do i=1,natoms x(i)=x(i)+… algoritmo di Verlet ddx=x(i)-xsave(i) + aggiungi PBC e ripeti su y e z dd=sqrt(ddx*ddx+ddy*ddy+ddz*ddz) if(dd.ge.dmax)dmax=dd end do if(dd.ge.0.4*(rv-rc))then!uso 0.4 per essere tranquillo, basterebbe 0.5 … call vicini(rv,…) ncall=ncall+1!voglio sapere quante volte chiama i vicini..,. dmax=0.d0 do i=1,natoms xsave(i)=x(i)… end do end do!chiude la dinamica molecolare

Scelte infelici: rv=rc + epsilon (epsilon -> 0) -  ricalcolo sempre i vicini rv molto grande (non ricalcolo mai i vicini ma calcolo forza ed energia sull’intero sistema). Consiglio: rv=rc+( ) Angstrom dovrebbe abbattere i costi computazionali di un fattore in tipici range di temperatura. P.S. Il metodo delle gabbie di Verlet puo’ ovviamente essere implementato anche nello steepest descent. Aspettatevi pochissime chiamate ai vicini!!!

OK, il nostro codice ora va molto piu’ veloce. Posso usarlo per studiare atomi? NO!!! Purtroppo la lista dei vicini la devo pur sempre calcolare almeno una volta. La sua determinazione per 10 8 atomi è semplicemente impossibile nei nostri computers! E allora? Si combinano le gabbie di Verlet con un secondo trucco  LINKED CELLS. Non lo facciamo. Solo l’idea …

Linked cells (sketch). 1) Considera l’intera cella di simulazione

Linked cells (sketch). 2) Dividi la cella di simulazione in sottocelle di lato superiore al raggio di cutoff …

Linked cells (sketch). 3) Assegna ad ogni atomo la propria cella

Linked cells (sketch). 4) Cerca i sui vicini solo all’interno della sua cella e nelle celle vicine. Gabbie di Verlet + Linked cells = codice che scala linearmente con N

Attenzione! I trucchi per “linearizzare” la dipendenza di un codice da N richiedono sempre un certo “overhead”. Risultato: N Velocità del codice Se uno è solo interessato a sistemi molto piccoli può essere addirittura svantaggioso introdurre tecniche per cambiare lo scaling col numero di atomi! Lo scaling lineare è invece del tutto essenziale per studiare sistemi con oltre un milione di particelle.