Parallel computation - N Body Problem

Embed Size (px)

Citation preview

  • 7/25/2019 Parallel computation - N Body Problem

    1/16

    Programmazione concorrente e parallela

    Stefano Ricchiuti

    [email protected] 2014

    N-body problem

    Calcolo Parallelo

    Analisi soluzione proposta

  • 7/25/2019 Parallel computation - N Body Problem

    2/16

    Outline

    Codice sorgente

    Modalit di test

    Risultati

  • 7/25/2019 Parallel computation - N Body Problem

    3/16

    Codice sorgente

    driver.c

    Main, interfaccia,

    MPI

    NBody.c

    Funzioni, back-end

    NBody.h

    Include, define,strutture dati

    view view view

    http://1drv.ms/1g7EShfhttp://1drv.ms/1g7EMWGhttp://1drv.ms/1g7EJdB
  • 7/25/2019 Parallel computation - N Body Problem

    4/16

    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

    - Sync

    Scambio delle informazioni tra i processi

    dowhile:

    steps>

  • 7/25/2019 Parallel computation - N Body Problem

    5/16

    Codice sorgente

    MPI Init

    DOF = degrees of freedom

    per 3 dimensioni, DOF = 6

    (posizione e velocit)

    Datatype Body :

    6 * MPI_DOUBLE

  • 7/25/2019 Parallel computation - N Body Problem

    6/16

    Codice sorgente

    N-Body init

  • 7/25/2019 Parallel computation - N Body Problem

    7/16

    Codice sorgente

    Responsabilit processi

    0 1 2

    x

    y

    Esempio

    N=7, m=3, q=2, r=1

    3 4 5 6

    z

    proc.

    #0

    proc.

    #1

    proc.

    #2

    vettorivelocit

    (posizione)

    intfirst = {0,3,4}

    intoffset = {3,2,2}

    Per il processo i

    se i < r

    first : i (q+1)

    offset : q + 1

    altrimenti

    first : i q + r

    offset : q

  • 7/25/2019 Parallel computation - N Body Problem

    8/16

    Codice sorgente

    N-Body

  • 7/25/2019 Parallel computation - N Body Problem

    9/16

    Codice sorgente

    N-Body - Sincronizzazione

    Send / Receive

    Global comm - Gather

  • 7/25/2019 Parallel computation - N Body Problem

    10/16

    Codice sorgente

    N-Body - Sincronizzazione

    Start address

    esempio per N = 7 m = 3

    0 1 2 3 4 5 6

    bodies data struct

    doubleposVel [N*6]

    #0 #1 #2 // proc. resp.

    intfirst = {0,3,4}

    intoffset = {3,2,2}

    vel zpos x pos y pos z vel x vel y6 * double

    Per il processo # 1 :

    send_start_addr = &posVel[first[ 1 ] * 6]

  • 7/25/2019 Parallel computation - N Body Problem

    11/16

    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

  • 7/25/2019 Parallel computation - N Body Problem

    12/16

    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 aritmeticadei tempi di esecuzionedei 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

    Modalit di test

    risultati

    http://1drv.ms/1g8i80A
  • 7/25/2019 Parallel computation - N Body Problem

    13/16

    Test

    pi processi meno operazioni per processo pi messaggi

    maggior overhead di comunicazione

  • 7/25/2019 Parallel computation - N Body Problem

    14/16

    2

    49.74%

    Test

    4

    49.39%

    16

    46.88%

    8

    47.63%

    Speed-up

    progressivo:

  • 7/25/2019 Parallel computation - N Body Problem

    15/16

    Test

  • 7/25/2019 Parallel computation - N Body Problem

    16/16

    (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