02 lezione introdcluster - mpi intro300915

Upload: angelo-borrelli

Post on 08-Jul-2018

214 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    1/72

    Primo utilizzo

    dell’architettura parallelamessa a disposizione dal

    Progetto SCoPE  

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    2/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    In Laboratorio 

    PC

    Cluster SCoPE

    Internet

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    3/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    In Laboratorio 

    Cluster SCoPE

    Ogni nodo è un server Dell PowerEdge M600 ciascuna dotato di:

    due processori quad core Intel Xeon [email protected] (Architettura a 64 bit)

    8 Gb di RAM

    2 dischi SATA da 80GB in configurazione RAID1

    due schede Gigabit Ethernet configurate in bonding

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    4/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    Come accedere al cluster

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    5/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    Dai PC nel laboratorio di Matematica

    Effettuare l’accesso dalla schermata iniziale con le credenziali

    fornite in aula

    Account : XXXX

    Password: XXXX

    Aprire un terminale ed eseguire il comando

    ssh labdma0

    Da qui si può proseguire con l’accesso al cluster attraverso un

    ulteriore comando ssh

    ssh [email protected] 

    (la password all’inizio è uguale alla login, ma al primo accesso

    verrà chiesto di cambiarla)

     Accesso tramite renato.dma.unina.it 

    mailto:[email protected]:[email protected]:[email protected]:[email protected]

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    6/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    E’ necessario un client SSH. 

     Accesso al cluster 

    Se siete su una piattaforma

    Windows, va sicuramente benel’emulatore di terminale PuTTY,

    scaricabile gratuitamente dahttp://www.putty.org/ 

    host name ui-studenti.scope.unina.itport  22connection type SSHlogin  personale, fornita a lezione

    http://www.putty.org/http://www.putty.org/

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    7/72G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    E’ necessario un client SSH. 

     Accesso al cluster 

    Se siete su una piattaforma Windows, vasicuramente bene il programma WinSCP,

    scaricabile gratuitamente dahttp://winscp.net/download/winscp429setup.exe 

    host name ui-studenti.scope.unina.itport  22connection type SSHlogin  personale, fornita a lezione

    Per spostare i file da e verso

    il cluster, può essere utile un

    client SFTP/FTP/SCP.

    http://www.putty.org/http://www.putty.org/

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    8/72G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    E’ necessario un client SSH. 

     Accesso al cluster 

    Se siete su una piattaforma Windows, vasicuramente bene il programma WinSCP,

    scaricabile gratuitamente dahttp://winscp.net/download/winscp429setup.exe 

    host name ui-studenti.scope.unina.itport  22connection type SSHlogin  personale, fornita a lezione

    Per spostare i file da e verso

    il cluster, può essere utile un

    client SFTP/FTP/SCP.

    http://www.putty.org/http://www.putty.org/

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    9/72G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    E’ necessario un client SSH. 

     Accesso al cluster 

    Se siete su una piattaforma Windows, vasicuramente bene il programma WinSCP,

    scaricabile gratuitamente dahttp://winscp.net/download/winscp429setup.exe 

    host name ui-studenti.scope.unina.itport  22connection type SSHlogin  personale, fornita a lezione

    Per spostare i file da e verso

    il cluster, può essere utile un

    client SFTP/FTP/SCP.

    Preferenze

    http://www.putty.org/http://www.putty.org/

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    10/72G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    E’ necessario un client SSH. 

     Accesso al cluster 

    Se siete su una piattaforma Windows, vasicuramente bene il programma WinSCP,

    scaricabile gratuitamente dahttp://winscp.net/download/winscp429setup.exe 

    host name ui-studenti.scope.unina.itport  22connection type SSHlogin  personale, fornita a lezione

    Per spostare i file da e verso

    il cluster, può essere utile un

    client SFTP/FTP/SCP.

    http://www.putty.org/http://www.putty.org/

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    11/72G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    E’ necessario un client SSH. 

     Accesso al cluster 

    Se siete su una piattaforma Windows, vasicuramente bene il programma WinSCP,

    scaricabile gratuitamente dahttp://winscp.net/download/winscp429setup.exe 

    host name ui-studenti.scope.unina.itport  22connection type SSHlogin  personale, fornita a lezione

    Per spostare i file da e verso

    il cluster, può essere utile un

    client SFTP/FTP/SCP.

    Sessione PuTTY

    http://www.putty.org/http://www.putty.org/

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    12/72G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    E’ necessario un client SSH. 

     Accesso al cluster 

    Se siete su una piattaforma Windows, vasicuramente bene il programma WinSCP,

    scaricabile gratuitamente dahttp://winscp.net/download/winscp429setup.exe 

    host name ui-studenti.scope.unina.itport  22connection type SSHlogin  personale, fornita a lezione

    Per spostare i file da e verso

    il cluster, può essere utile un

    client SFTP/FTP/SCP.

    Sessione PuTTY

    http://www.putty.org/http://www.putty.org/

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    13/72G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

     Accesso al cluster 

    ATTENZIONE!!!!

    Al primo accesso vi verrà chiesto di

    cambiare la password!

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    14/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    Message Passing InterfaceMPI

    MPI :

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    15/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    Message Passing InterfaceMPI

    MPI :

    Implementazioni di MPI

    • MPICH• Argonne National Laboratory (ANL) and• Mississippi State University (MSU)

    • OpenMPI• … 

    Linguaggi ospiti:Fortran,C,C++,Matlab

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    16/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    MPI : dove trovarlo

    www-unix.mcs.anl.gov/mpi/

    P di d l

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    17/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    Paradigma del message passing

     Network

    CPU

    memory

    Processore 0

    CPU

    memory

    Processore 1

    CPU

    memory

    Processore N

    …… 

    Sistema a memoria distribuita

    Ogni processore ha una propria memoria locale alla quale accededirettamente.

    Ogni processore può conoscere i dati in memoria di un altro processore

    o far conoscere i propri, attraverso il trasferimento di dati.

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    18/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    Definizione: message passing

    Message Passing  :modello per la progettazione

    di software inambiente di Calcolo Parallelo.

    … ogni processore può conoscere i dati nella memoria di un

    altro processore o far conoscere i propri, attraverso il trasferimento di dati.

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    19/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    Lo standard

    La necessità di  rendere portabileil modello Message Passingha condotto alla definizione

    e all’implementazione di un ambiente standard.

    Message Passing InterfaceMPI

    P i i

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    20/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    Componente 3Componente 2Componente 1

    Per cominciare… 

    In ambiente MPI un programma

    è visto come un insieme di componenti (o processi) concorrenti

    … int main() 

    … sum=0;for i= 0 to 14 dosum=sum+a[i];

    endfor… return 0; 

    … main(){… 

    sum=0;for i=0 to 4 dosum=sum+a[i];endfor

    … return 0;}

    … main(){… 

    sum=0;for i=5 to 9 dosum=sum+a[i];endfor

    … return 0;}

    … main(){… 

    sum=0;for i=10 to 14dosum=sum+a[i];endfor

    … return 0;}

    I MPI i i ti i

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    21/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    In MPI i processori sono raggruppati in ….:  

    Communicator

    Gruppo

    Il MPI

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    22/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    Il gruppo MPI … : 

    Alunni

    0

    1

    2

    0

    1

    1

    0

    2

    Attività

    Gruppi

    Alunno  Processore 

    Attività Componente 

    Il MPI

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    23/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    Il gruppo MPI … : 

    Alunni

    Attività

    Gruppi

    0

    1

    2

    3

    0

    1

    2

    1

    0

    Al i tti di b GRUPPO

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    24/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    Alcuni concetti di base: GRUPPO… 

    • Ogni componente concorrente del programma viene affidata adun  gruppo di   processori .

    …… Componente 1 Componente 2 Componente n

    P0 P1 P2P0 P1P0

    • In ciascun gruppo ad ogni processore è associato un identificativo .

    • L’identificativo  è un intero, compreso tra 0 ed il numero totale diprocessori appartenenti ad un gruppo decrementato di una unità.

    • Processori appartenenti a uno o più gruppi possono avereidentificativi diversi, ciascuno relativo ad uno specifico gruppo

    Il CONTESTO MPI :

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    25/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    Il CONTESTO MPI : 

    0

    1 2

    GRUPPI

    2

    01

    0

    1

     Aula A  Aula B  Aula C

    CONTESTI

    Alcuni c ncetti di base: CONTESTO

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    26/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    Alcuni concetti di base: CONTESTO 

    • Se la spedizione di un messaggio avviene in un contesto, laricezione deve avvenire nello stesso contesto.

    …… Componente 1 Componente 2 Componente n

    P0 P1 P2P0 P1P0

    Contesto 1 Contesto 2 Contesto n

    • A ciascun gruppo di processori viene attribuito un identificativodetto contesto .

    • Il contesto  definisce l’ambito in cui avvengono le comunicazionitra processori di uno stesso gruppo.

    Il Communicator MPI :

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    27/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    Il Communicator MPI : 

    0

    1 2

     Aula A

    0

    1

     Aula B

    2

    01

     Aula C

    CONTESTI

    …  … 

    … 

    … … 

    … 

    Linea 1 Linea 2 Linea 3+ + +

    COMMUNICATOR_A1=

    COMMUNICATOR_C3

    =

    COMMUNICATOR_B2=

        

        

        

    1

    2

    3

    Alcuni concetti di base: COMMUNICATOR

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    28/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    • Ad un gruppo di processori appartenenti ad uno stesso contesto

    viene assegnato un ulteriore identificativo: il communicator .

    Communicator_1 Communicator_2 Communicator_n

    Alcuni concetti di base: COMMUNICATOR… 

    …… 

    P0  P1  P0  P0 P1  P2 

    Contesto 1 Contesto 2 Contesto n

    Componente 1 Componente 2 Componente n

    • Il communicator   racchiude tutte le caratteristiche dell’ambientedi comunicazione: topologia, quali contesti coinvolge, ecc… 

    Alcuni concetti di base: COMMUNICATOR

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    29/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    • Esistono due tipi principali di communicator .

    …Alcuni concetti di base: COMMUNICATOR… 

    Communicator_mCommunicator_1 Communicator_2

    …… Componente 1 Componente 2 Componente n

    P0  P1  P0  P0 P1  P2 

    • L’intra-communicator  in cui le comunicazioni avvengono all’interno diun gruppo di processori.

    Alcuni concetti di base: COMMUNICATOR

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    30/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    • Esistono due tipi principali di communicator .

    …Alcuni concetti di base: COMMUNICATOR… 

    Communicator_2Communicator_1

    …… Componente 1 Componente 2 Componente n

    P0  P1  P0  P0 P1  P2 

    • L’inter-communicator  in cui le comunicazioni avvengono tra gruppidi processori.

    • L’intra-communicator  in cui le comunicazioni avvengono all’interno diun gruppo di processori.

    Alcuni concetti di base: COMMUNICATOR

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    31/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    …Alcuni concetti di base: COMMUNICATOR 

    Communicator_1 Communicator_2 Communicator_m

    …… Componente 1 Componente 2 Componente n

    P0  P1  P0  P0 P1  P2 

    Contesto 1 Contesto 2 Contesto m

    •Tutti i processori fanno parte per default di un unico

    communicator detto MPI_COMM_WORLD.

    MPI_COMM_WORLD

    L f i i di MPI

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    32/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    Le funzioni di MPI 

    MPI è una libreriache comprende:

    • Funzioni per definire l’ambiente

    • Funzioni per comunicazioni uno a uno

    • Funzioni per comunicazioni collettive• Funzioni per operazioni collettive

    MPI

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    33/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    Le funzioni dell’ambiente. 

    MPI : 

    Un semplice programma :

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    34/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    Un semplice programma : 

    #include #include “mpi.h” 

    int main(int argc, char *argv[]){

    int menum, nproc;MPI_Init(&argc,&argv);

    MPI_Comm_rank(MPI_COMM_WORLD,&menum);MPI_Comm_size(MPI_COMM_WORLD,&nproc);

    printf(“Sono %d di %d\n”,menum,nproc); 

    MPI_Finalize();

    return 0;}

    Tutti i processori di MPI_COMM_WORLD stampano a video il proprio

    identificativo menum ed il numero di processori nproc.

    #include #include “mpi.h” 

    int main(int argc, char *argv[]){

    int menum, nproc;MPI_Init(&argc,&argv);

    MPI_Comm_rank(MPI_COMM_WORLD,&menum);MPI_Comm_size(MPI_COMM_WORLD,&nproc);

    printf(“Sono %d di %d\n”,menum,nproc); 

    MPI_Finalize();

    return 0;}

    Nel programma :

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    35/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    Nel programma … : 

    #include “mpi.h” 

    mpi.h : Header File

    Il file contiene alcune direttive necessarie

    al preprocessore per l’utilizzo dell’MPI 

    Nel programma :

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    36/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    Nel programma … : 

    Tutti i processori di MPI_COMM_WORLD stampano a video il proprio

    identificativo menum ed il numero di processori nproc.

    #include #include “mpi.h” 

    int main(int argc, char *argv[]){

    int menum, nproc;MPI_Init(&argc,&argv);

    MPI_Comm_rank(MPI_COMM_WORLD,&menum);MPI_Comm_size(MPI_COMM_WORLD,&nproc);

    printf(“Sono %d di %d\n”,menum,nproc); 

    MPI_Finalize();

    return 0;}

    Nel programma :

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    37/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    Nel programma … : 

    MPI_Init(&argc,&argv);

    • Inizializza il communicator MPI_COMMON_WORLD

    • I due dati di input: argc ed argv sono gli

    argomenti del main

    • Inizializza l’ambiente di esecuzione MPI

    In generale :

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    38/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    In generale … : 

    MPI_Init(int *argc, char ***argv);

    • Questa routine inizializza l’ambiente diesecuzione di MPI. Deve essere chiamata una sola volta, prima di ogni altra routine MPI.

    • Definisce l’insieme dei processori attivati(communicator).

    Input: argc, **argv;

    Nel programma :

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    39/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    Nel programma … : 

    Tutti i processori di MPI_COMM_WORLD stamperanno sul video il proprio

    identificativo menum ed il numero di processori nproc.

    #include #include “mpi.h” 

    int main(int argc, char *argv[]){

    int menum, nproc;MPI_Init(&argc,&argv);

    MPI_Comm_rank(MPI_COMM_WORLD,&menum);MPI_Comm_size(MPI_COMM_WORLD,&nproc);

    printf (“Sono %d di %d\n”,menum,nproc);

    MPI_Finalize();

    return 0;}

    Nel programma :

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    40/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    Nel programma … : 

    MPI_Finalize();

    • Questa routine determina la finedel programma MPI.

    • Dopo questa routine non è possibile

    richiamare nessun’altra routine di MPI. 

    Nel programma … :

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    41/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    Nel programma … : 

    Tutti i processori di MPI_COMM_WORLD stamperanno sul video il proprio

    identificativo menum ed il numero di processori nproc.

    #include #include “mpi.h” 

    int main(int argc, char *argv[]){

    int menum, nproc;MPI_Init(&argc,&argv);

    MPI_Comm_rank(MPI_COMM_WORLD,&menum);MPI_Comm_size(MPI_COMM_WORLD,&nproc);

    printf(“Sono %d di %d\n”,menum,nproc); 

    MPI_Finalize();return 0;

    }

    Nel programma :

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    42/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    Nel programma … : 

    MPI_Comm_rank(MPI_COMM_WORLD,&menum);

    • Questa routine permette al processore

    chiamante, appartenente al communicator

    MPI_COMM_WORLD, di memorizzare il

    proprio identificativo nella variabile menum.

    In generale :

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    43/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    In generale … : 

    MPI_Comm_rank(MPI_Comm comm, int *menum);

    • Fornisce ad ogni processore del communicator

    comm l’identificativo menum.

    Input: comm ;

    Output: menum.

    Nel programma … : 

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    44/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    N programma …

    Tutti i processori di MPI_COMM_WORLD stamperanno sul video il proprio

    identificativo menum ed il numero di processori nproc.

    #include #include “mpi.h” 

    int main(int argc, char *argv[]){

    int menum, nproc;MPI_Init(&argc,&argv);

    MPI_Comm_rank(MPI_COMM_WORLD,&menum);

    MPI_Comm_size(MPI_COMM_WORLD,&nproc);

    printf(“Sono %d di %d\n”,menum,nproc); 

    MPI_Finalize();return 0;

    }

    Nel programma :

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    45/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    Nel programma … : 

    MPI_Comm_size(MPI_COMM_WORLD,&nproc);

    • Questa routine permette al processorechiamante di memorizzare nella variabile

    nproc il numero totale dei processori

    concorrenti appartenenti al communicator

    MPI_COMM_WORLD.

    In generale … :

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    46/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    In generale … : 

    MPI_Comm_size(MPI_Comm comm, int *nproc);

    • Ad ogni processore del communicator comm ,restituisce in nproc, il numero totale di processori che

    costituiscono comm.

    • Permette di conoscere quanti processori concorrentipossono essere utilizzati per una determinata

    operazione.

    Input: comm ;

    Output: nproc.

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    47/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    Come lavorare sul cluster 

    Scrivere un programma

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    48/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    Scrivere un programma 

    Nella propria home directory, lo studente crea una cartella per il progetto che sta

    realizzando, per contenere file sorgente,eseguibile,… 

    Scrivere un programma 

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    49/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    Sc e e u p og a a

    Quindi, deve scrivere il file sorgente: File C, che si serva della libreria MPI.

    Utilizzeremo il compilatore dell’implementazione OPENMPI. 

    Il file sorgente deve essere scritto con un editor Linux (vi, nano,…) oppure con uneditor in ambiente Windows che non formatti il testo (es. notepad).

    Se è stato scritto in Windows, una volta portato il file sul cluster, va eseguito il

    comandodos2unix NomeFileScrittoSuWindosw.c

    Scrivere un programma 

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    50/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    p g

    Quindi, deve scrivere il file sorgente: File C, che si serva della libreria MPI.

    Utilizzeremo il compilatore dell’implementazione OPENMPI. 

    Il file sorgente deve essere scritto con un editor Linux (vi, nano,…) oppure con uneditor in ambiente Windows che non formatti il testo (es. notepad).

    Se è stato scritto in Windows, una volta portato il file sul cluster, va eseguito il

    comandodos2unix NomeFileScrittoSuWindosw.c

    Scrivere un programma 

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    51/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    p g

    Quindi, deve scrivere il file sorgente: File C, che si serva della libreria MPI.

    Utilizzeremo il compilatore dell’implementazione OPENMPI. 

    Il file sorgente deve essere scritto con un editor Linux (vi, nano,…) oppure con uneditor in ambiente Windows che non formatti il testo (es. notepad).

    Se è stato scritto in Windows, una volta portato il file sul cluster, va eseguito il

    comandodos2unix NomeFileScrittoSuWindosw.c

    Scrivere un programma 

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    52/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    p g

    Quindi, deve scrivere il file sorgente: File C, che si serva della libreria MPI.

    Utilizzeremo il compilatore dell’implementazione OPENMPI. 

    Il file sorgente deve essere scritto con un editor Linux (vi, nano,…) oppure con uneditor in ambiente Windows che non formatti il testo (es. notepad).

    Se è stato scritto in Windows, una volta portato il file sul cluster, va eseguito il

    comandodos2unix NomeFileScrittoSuWindosw.c

    Scrivere un programma 

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    53/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    p g

    Quindi, deve scrivere il file sorgente: File C, che si serva della libreria MPI.

    Utilizzeremo il compilatore dell’implementazione OPENMPI. 

    Il file sorgente deve essere scritto con un editor Linux (vi, nano,…) oppure con uneditor in ambiente Windows che non formatti il testo (es. notepad).

    Se è stato scritto in Windows, una volta portato il file sul cluster, va eseguito il

    comandodos2unix NomeFileScrittoSuWindosw.c

    Scrivere un programma 

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    54/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    p g

    Quindi, deve scrivere il file sorgente: File C, che si serva della libreria MPI.

    Utilizzeremo il compilatore dell’implementazione OPENMPI. 

    Il file sorgente deve essere scritto con un editor Linux (vi, nano,…) oppure con uneditor in ambiente Windows che non formatti il testo (es. notepad).

    Se è stato scritto in Windows, una volta portato il file sul cluster, va eseguito il

    comandodos2unix NomeFileScrittoSuWindosw.c

    Le applicazioni parallele saranno eseguite sui nodi computazionaliesclusivamente in modalità batch tramite il sistema PBS (Portable Batch System).

    Per compilare ed eseguire il nostro file .c (sottomettere un job) sulle macchine delcluster, si deve creare un file .pbs, cioè un job-script che contiene un elenco didirettive.

    Scrivere un programma 

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    55/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    p g

    Quindi, deve scrivere il file sorgente: File C, che si serva della libreria MPI.

    Utilizzeremo il compilatore dell’implementazione OPENMPI. 

    Il file sorgente deve essere scritto con un editor Linux (vi, nano,…) oppure con uneditor in ambiente Windows che non formatti il testo (es. notepad).

    Se è stato scritto in Windows, una volta portato il file sul cluster, va eseguito il

    comandodos2unix NomeFileScrittoSuWindosw.c

    Le applicazioni parallele saranno eseguite sui nodi computazionaliesclusivamente in modalità batch tramite il sistema PBS (Portable Batch System).

    Per compilare ed eseguire il nostro file .c (sottomettere un job) sulle macchine delcluster, si deve creare un file .pbs, cioè un job-script che contiene un elenco didirettive.

    Eseguire un programma: esempio di job-script 

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    56/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    g p g p j p#!/bin/bash

    ########################### ## The PBS directives #

    # ############################PBS -q studenti#PBS -l nodes=8#PBS -N hello#PBS -o hello.out#PBS -e hello.err########################################### -q coda su cui va eseguito il job #

    # -l numero di nodi richiesti ## -N nome job(stesso del file pbs) ## -o, -e nome files contenente l’output # ########################################### ## qualche informazione sul job ## ###########################################

    NCPU=`wc -l < $PBS_NODEFILE`echo ------------------------------------------------------echo ' This job is allocated on '${NCPU}' cpu(s)'echo 'Job is running on node(s): 'cat $PBS_NODEFILE

    Job-script che compilaed esegue Hello.c

    Eseguire un programma: esempio di job-script 

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    57/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    g p g p j p#!/bin/bash

    ########################### ## The PBS directives #

    # ############################PBS -q studenti#PBS -l nodes=8 #PBS –N Hello #PBS -o Hello.out #PBS -e Hello.err  ########################################### -q coda su cui va eseguito il job #

    # -l numero di nodi richiesti ## -N nome job(stesso del file pbs) ## -o, -e nome files contenente l’output # ########################################### ## qualche informazione sul job ## ###########################################

    NCPU=`wc -l < $PBS_NODEFILE`echo ------------------------------------------------------echo ' This job is allocated on '${NCPU}' cpu(s)'echo 'Job is running on node(s): 'cat $PBS_NODEFILE

    La prima riga deveessere sempre questa

    Le righe che iniziano con # sono commenti.

    Le righe che iniziano con#PBS sono direttive.

    In rosso le informazionitipiche di questa

    particolare sottomissione

    Eseguire un programma: esempio di job-script 

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    58/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    PBS_O_WORKDIR=$PBS_O_HOME/ProgettoHelloecho ------------------------------------------------------echo PBS: qsub is running on $PBS_O_HOSTecho PBS: originating queue is $PBS_O_QUEUE

    echo PBS: executing queue is $PBS_QUEUEecho PBS: working directory is $PBS_O_WORKDIRecho PBS: execution mode is $PBS_ENVIRONMENTecho PBS: job identifier is $PBS_JOBIDecho PBS: job name is $PBS_JOBNAMEecho PBS: node file is $PBS_NODEFILEecho PBS: current home directory is $PBS_O_HOMEecho PBS: PATH = $PBS_O_PATHecho ------------------------------------------------------

    echo "Eseguo/usr/lib64/openmpi/1.4-gcc/bin/mpicc -o $PBS_O_WORKDIR/Hello $PBS_O_WORKDIR/Hello.c"/usr/lib64/openmpi/1.4-gcc/bin/mpicc -o $PBS_O_WORKDIR/Hello $PBS_O_WORKDIR/Hello.c

    echo "Eseguo:/usr/lib64/openmpi/1.4-gcc/bin/-machinefile $PBS_NODEFIL E -np $NCPU $PBS_O_WORKDIR/Hello"/usr/lib64/openmpi/1.4-gcc/bin/mpiexec -machinefile $PBS_NODEFILE  –np $NCPU $PBS_O_WORKDIR/Hello

    Stampa informazioni

    Eseguire un programma: esempio di job-script 

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    59/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    PBS_O_WORKDIR=$PBS_O_HOME/ProgettoHelloecho ------------------------------------------------------echo PBS: qsub is running on $PBS_O_HOSTecho PBS: originating queue is $PBS_O_QUEUE

    echo PBS: executing queue is $PBS_QUEUEecho PBS: working directory is $PBS_O_WORKDIRecho PBS: execution mode is $PBS_ENVIRONMENTecho PBS: job identifier is $PBS_JOBIDecho PBS: job name is $PBS_JOBNAMEecho PBS: node file is $PBS_NODEFILEecho PBS: current home directory is $PBS_O_HOMEecho PBS: PATH = $PBS_O_PATHecho ------------------------------------------------------

    echo "Eseguo/usr/lib64/openmpi/1.4-gcc/bin/mpicc -o $PBS_O_WORKDIR/Hello $PBS_O_WORKDIR/Hello.c"/usr/lib64/openmpi/1.4-gcc/bin/mpicc -o $PBS_O_WORKDIR/Hello $PBS_O_WORKDIR/Hello.c

    echo "Eseguo/usr/lib64/openmpi/1.4-gcc/bin/mpiexec -machinefile $PBS_NODEFIL E -np $NCPU$PBS_O_WORKDIR/Hello"/usr/lib64/openmpi/1.4-gcc/bin/mpiexec -machinefile $PBS_NODEFILE  –np $NCPU $PBS_O_WORKDIR/Hello

    Stampa informazioni

    Eseguire un programma: esempio di job-script 

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    60/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    /usr/lib64/openmpi/1.4-gcc/bin/mpicc -o $PBS_O_WORKDIR/Hello $PBS_O_WORKDIR/Hello.c

    Path assoluto del comando di compilazione (mpicc) e di esecuzione (mpiexec)

    /usr/lib64/openmpi/1.4-gcc/bin/mpiexec -machinefile $PBS_NODEFILE  –np $NCPU $PBS_O_WORKDIR/Hello

    Vediamo nel dettaglio la compilazione e l’esecuzione… 

    Eseguire un programma: esempio di job-script 

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    61/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    /usr/lib64/openmpi/1.4-gcc/bin/mpicc -o $PBS_O_WORKDIR/Hello $PBS_O_WORKDIR/Hello.c

    Opzione –o, ben nota!

    /usr/lib64/openmpi/1.4-gcc/bin/mpiexec -machinefile $PBS_NODEFILE  –np $NCPU $PBS_O_WORKDIR/Hello

    Vediamo nel dettaglio la compilazione e l’esecuzione… 

    Eseguire un programma: esempio di job-script 

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    62/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    /usr/lib64/openmpi/1.4-gcc/bin/mpicc -o $PBS_O_WORKDIR/Hello $PBS_O_WORKDIR/Hello.c

    Nome dell’eseguibile che si vuole creare (path assoluto)

    /usr/lib64/openmpi/1.4-gcc/bin/mpiexec -machinefile $PBS_NODEFILE  –np $NCPU $PBS_O_WORKDIR/Hello

    Vediamo nel dettaglio la compilazione e l’esecuzione… 

    Eseguire un programma: esempio di job-script 

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    63/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    /usr/lib64/openmpi/1.4-gcc/bin/mpicc -o $PBS_O_WORKDIR/Hello $PBS_O_WORKDIR/Hello.c

    Nome del sorgente che si vuole compilare (path assoluto)

    /usr/lib64/openmpi/1.4-gcc/bin/mpiexec -machinefile $PBS_NODEFILE  –np $NCPU $PBS_O_WORKDIR/Hello

    Vediamo nel dettaglio la compilazione e l’esecuzione… 

    Eseguire un programma: esempio di job-script 

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    64/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    /usr/lib64/openmpi/1.4-gcc/bin/mpicc -o $PBS_O_WORKDIR/Hello $PBS_O_WORKDIR/Hello.c

    Elenco delle macchine utilizzabili

    /usr/lib64/openmpi/1.4-gcc/bin/mpiexec -machinefile $PBS_NODEFILE  –np $NCPU $PBS_O_WORKDIR/Hello

    Vediamo nel dettaglio la compilazione e l’esecuzione… 

    Eseguire un programma: esempio di job-script 

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    65/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    /usr/lib64/openmpi/1.4-gcc/bin/mpicc -o $PBS_O_WORKDIR/Hello $PBS_O_WORKDIR/Hello.c

    Numero di processi che si devono lanciare

    /usr/lib64/openmpi/1.4-gcc/bin/mpiexec -machinefile $PBS_NODEFILE  –np $NCPU $PBS_O_WORKDIR/Hello

    Vediamo nel dettaglio la compilazione e l’esecuzione… 

    Eseguire un programma: esempio di job-script 

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    66/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    /usr/lib64/openmpi/1.4-gcc/bin/mpicc -o $PBS_O_WORKDIR/Hello $PBS_O_WORKDIR/Hello.c

    Eseguibile da lanciare

    /usr/lib64/openmpi/1.4-gcc/bin/mpiexec -machinefile $PBS_NODEFILE  –np $NCPU $PBS_O_WORKDIR/Hello

    Vediamo nel dettaglio la compilazione e l’esecuzione… 

    Eseguire un programma 

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    67/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    Una volta che si è scritto il file PBS

    Eseguire un programma 

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    68/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    Una volta che si è scritto il file PBS, e si è quindi preparata l’esecuzione parallela,

    si lancia con il comando

    qsub Hello.pbs

    qsub è in grado di interpretare le direttive contenute nel PBS

    Eseguire un programma 

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    69/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    Una volta che si è scritto il file PBS, e si è quindi preparata l’esecuzione parallela,

    si lancia con il comando

    qsub Hello.pbs

    qsub è in grado di interpretare le direttive contenute nel PBS

    bisognerà aspettare che il job venga gestito dal sistema (è in coda con altri job) eche termini la sua esecuzione.

     A questo punto sarà possibile visualizzare l’output e l'error con i comandi:cat Hello.errcat Hello.out

    Eseguire un programma 

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    70/72

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    Per visualizzare i job:qstat

    Per visualizzare la coda ed il loro stato(E=eseguito,R=in esecuzione, Q= è stato accodato):qstat -q

    Per eliminare un job dalla coda:qdel jobid

    Esercizi

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    71/72

    EserciziScrivere, compilare ed eseguire sul cluster attraverso il PBS i seguenti esercizi.Inviare il codice, il PBS e uno o più esempi di output a [email protected]

    1. N processi. Ognuno stampa il proprio identificativo nelcommunicator globale

    2. N processi. In input: intero M>200.Ogni processo con identificativo >0 divide M per ilproprio identificativo. Il processo 0 divide M per ilnumero di processi N.

    Ogni processo stampa il risultato ottenuto.

    G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16

    Entro la prossima

    lezione!!

  • 8/19/2019 02 Lezione IntrodCluster - MPI Intro300915

    72/72

    FINE LEZIONE