Sei sulla pagina 1di 16

Programmazione concorrente e parallela

N-body problem
Calcolo Parallelo
Analisi soluzione proposta

Stefano Ricchiuti
stefano_ricchiuti@hotmail.com

Aprile 2014

Outline

Codice sorgente
Modalit di test
Risultati

Codice sorgente

driver.c
view

Main, interfaccia,
MPI

NBody.c
view

Funzioni, back-end

NBody.h
view

Include, define,
strutture dati

Codice sorgente

Struttura principale
- MPI Init
Inizializzazione parametri MPI (rank processo, n. processi), datatype aggiuntivi

- N-Body Init
Caricamento da file, allocazione statica strutture dati, assegnazione
responsabilit processi

- N-Body
Calcolo dellinterazione gravitazionale e dellenergia complessiva,
aggiornamento velocit e posizione
hile:
w
o
d
- Sync
>
s
p
ste
Scambio delle informazioni tra i processi

Codice sorgente

MPI Init

DOF = degrees of freedom


per 3 dimensioni, DOF = 6
(posizione e velocit)
Datatype Body :
6 * MPI_DOUBLE

Codice sorgente

N-Body init

Codice sorgente

Responsabilit processi
Esempio
N=7, m=3, q=2, r=1

vettori velocit
(posizione)

x
y

Per il processo i
se i < r
first : i (q+1)
offset : q + 1
altrimenti
first : i q + r
offset : q

int first

= {0,3,4}

int offset = {3,2,2}


proc.
#0

proc.
#1

proc.
#2

Codice sorgente

N-Body

Codice sorgente

N-Body - Sincronizzazione
Send / Receive

Global comm - Gather

Codice sorgente

N-Body - Sincronizzazione
Start address
esempio per N = 7 m = 3
#0

#1

#2

// proc. resp.

bodies data struct


0

double posVel [N*6]

6 * double

pos x

pos y

pos z

vel x

Per il processo # 1 :
send_start_addr = &posVel[first[ 1 ] * 6]

int first = {0,3,4}


int offset = {3,2,2}

vel y

vel z

Codice sorgente

Verifica correttezza
Conservazione dellenergia
- Per ogni corpo, la somma tra energia potenziale gravitazionale ed energia cinetica deve
essere costante
- Errore legato allapprossimazione introdotta dal moto rettilineo uniformemente
accelerato e dalla risoluzione temporale

Verifica funzionale
- Riproduzione di un sistema solare e
verifica del comportamento dei corpi

Test

Modalit di test
- File di input
Sistema pseudo-solare collision-free, generato da script

- Misura delle prestazioni


Confronto prestazionale tra esecuzione a singolo processo ed esecuzione
parallela con pi processi.
Risultato: media aritmetica dei tempi di esecuzione dei processi
1) 100 oggetti - 100 steps (x10)
Singolo processo VS send/receive VS comunicazione globale
2) 1000 oggetti - 10 steps (x10)
Singolo processo VS comunicazione globale
3) 10000 oggetti - 2 steps (x10)
Singolo processo VS comunicazione globale

risultati

Test

pi processi

meno operazioni per processo

maggior overhead di comunicazione

pi messaggi

Test

Speed-up
progressivo:
2

16

49.74%

49.39%

47.63%

46.88%

Test

(ovvie) Conclusioni

Send/Receive
- comunicazione point-to-point
- numero di messaggi per end-point limitato
- NBody: necessit di strategie o protocollo

Global comm.
- routine ottimizzate per traffico elevato
- meno codice -> minor probabilit di errore
- gestione strutture dati complesse

Potrebbero piacerti anche