02 lezione introdcluster - mpi intro300915
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
(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