Professional Documents
Culture Documents
dellarchitettura parallela
messa a disposizione dal
Progetto SCoPE
In Laboratorio
Cluster SCoPE
PC
Internet
In Laboratorio
Cluster SCoPE
Accesso al cluster
E necessario un client SSH.
Accesso al cluster
E necessario un client SSH.
Se siete su una piattaforma Windows, va
sicuramente bene il programma WinSCP,
scaricabile gratuitamente da
http://winscp.net/download/winscp429setup.exe
Accesso al cluster
E necessario un client SSH.
Se siete su una piattaforma Windows, va
sicuramente bene il programma WinSCP,
scaricabile gratuitamente da
http://winscp.net/download/winscp429setup.exe
Accesso al cluster
Preferenze
Accesso al cluster
E necessario un client SSH.
Se siete su una piattaforma Windows, va
sicuramente bene il programma WinSCP,
scaricabile gratuitamente da
http://winscp.net/download/winscp429setup.exe
Accesso al cluster
Sessione PuTTY
Accesso al cluster
Sessione PuTTY
Accesso al cluster
ATTENZIONE!!!!
Al primo accesso vi verr chiesto di
cambiare la password!
MPI :
MPI :
MPICH
Argonne National Laboratory (ANL) and
Mississippi State University (MSU)
OpenMPI
Linguaggi ospiti:Fortran,C,C++,Matlab
G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16
www-unix.mcs.anl.gov/mpi/
G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16
Processore 1
Processore N
memory
memory
memory
CPU
CPU
CPU
Network
Sistema a memoria distribuita
Ogni processore ha una propria memoria locale alla quale accede
direttamente.
Message Passing :
Lo standard
La necessit di rendere portabile
il modello Message Passing
ha condotto alla definizione
e allimplementazione
di un ambiente standard.
Per cominciare
int main()
sum=0;
for i= 0 to 14 do
sum=sum+a[i];
endfor
return 0;
main()
{
Componente
sum=0;
for i=0 to 4 do
sum=sum+a[i];
endfor
return 0;
}
main()
{
Componente
sum=0;
for i=5 to 9 do
sum=sum+a[i];
endfor
return 0;
}
main()
{
Componente
sum=0;
for i=10 to 14do
sum=sum+a[i];
endfor
return 0;
}
Gruppo
Communicator
Il gruppo MPI :
Alunni
0
Attivit
Gruppi
Alunno
Processore
Attivit
Componente
Il gruppo MPI :
Alunni
0
0
3
1
2
Attivit
Gruppi
Componente 1
P0
P1
Componente 2
P0
Componente n
P0
P1
P2
un gruppo di processori.
In ciascun gruppo ad ogni processore associato un identificativo.
Il CONTESTO MPI :
0
Aula A
Aula B
CONTESTI
GRUPPI
G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16
Aula C
Componente 1
P0
P1
Contesto 1
Componente 2
P0
Componente n
P0
Contesto 2
P1
P2
Contesto n
Il Communicator MPI :
Aula A
+
Linea 1
=
Aula B
+
Linea 2
=
COMMUNICATOR_A1
COMMUNICATOR_B2
CONTESTI
Aula C
+
Linea 3
=
COMMUNICATOR_C3
Componente 1
P0
P1
Contesto 1
Communicator_1
Componente 2
P0
Componente n
P0
Contesto 2
Communicator_2
P1
P2
Contesto n
Communicator_n
Componente 1
P0
Componente 2
P1
P0
Communicator_1 Communicator_2
Componente n
P0
P1
P2
Communicator_m
Componente 1
P0
P1
Componente 2
P0
Communicator_1
Componente n
P0
P1
P2
Communicator_2
Componente 1
P0
P1
Contesto 1
Communicator_1
Componente 2
P0
Componente n
P0
Contesto 2
Communicator_2
P1
P2
Contesto m
Communicator_m
MPI_COMM_WORLD
Tutti i processori fanno parte per default di un unico
communicator detto MPI_COMM_WORLD.
G. Laccetti - Calcolo Parallelo e Distribuito mod A - a.a. 2015/16
Le funzioni di MPI
Funzioni
Funzioni
Funzioni
Funzioni
per
per
per
per
definire lambiente
MPI :
Le funzioni dellambiente.
Un semplice programma :
#include <stdio.h>
#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 :
#include mpi.h
Nel programma :
#include <stdio.h>
#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 :
MPI_Init(&argc,&argv);
Inizializza lambiente di esecuzione MPI
Inizializza il communicator MPI_COMMON_WORLD
I due dati di input: argc ed argv sono gli
argomenti del main
In generale :
MPI_Init(int *argc, char ***argv);
Nel programma :
#include <stdio.h>
#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 :
MPI_Finalize();
Questa routine determina la fine
del programma MPI.
Dopo questa routine non possibile
richiamare nessunaltra routine di MPI.
Nel programma :
#include <stdio.h>
#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 :
MPI_Comm_rank(MPI_COMM_WORLD,&menum);
In generale :
Input: comm ;
Output: menum.
Fornisce ad ogni processore del communicator
comm lidentificativo menum.
Nel programma :
#include <stdio.h>
#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 :
MPI_Comm_size(MPI_COMM_WORLD,&nproc);
Questa routine permette al processore
chiamante di memorizzare nella variabile
nproc il numero totale dei processori
concorrenti appartenenti al communicator
MPI_COMM_WORLD.
In generale :
MPI_Comm_size(MPI_Comm comm, int *nproc);
Input: comm ;
Output: nproc.
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
Quindi, deve scrivere il file sorgente: File C, che si serva della libreria MPI.
Utilizzeremo il compilatore dellimplementazione OPENMPI.
Il file sorgente deve essere scritto con un editor Linux (vi, nano,) oppure con un
editor 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
comando
dos2unix NomeFileScrittoSuWindosw.c
Scrivere un programma
Quindi, deve scrivere il file sorgente: File C, che si serva della libreria MPI.
Utilizzeremo il compilatore dellimplementazione OPENMPI.
Il file sorgente deve essere scritto con un editor Linux (vi, nano,) oppure con un
editor 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
comando
dos2unix NomeFileScrittoSuWindosw.c
Scrivere un programma
Quindi, deve scrivere il file sorgente: File C, che si serva della libreria MPI.
Utilizzeremo il compilatore dellimplementazione OPENMPI.
Il file sorgente deve essere scritto con un editor Linux (vi, nano,) oppure con un
editor 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
comando
dos2unix NomeFileScrittoSuWindosw.c
Scrivere un programma
Quindi, deve scrivere il file sorgente: File C, che si serva della libreria MPI.
Utilizzeremo il compilatore dellimplementazione OPENMPI.
Il file sorgente deve essere scritto con un editor Linux (vi, nano,) oppure con un
editor 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
comando
dos2unix NomeFileScrittoSuWindosw.c
Scrivere un programma
Quindi, deve scrivere il file sorgente: File C, che si serva della libreria MPI.
Utilizzeremo il compilatore dellimplementazione OPENMPI.
Il file sorgente deve essere scritto con un editor Linux (vi, nano,) oppure con un
editor 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
comando
dos2unix NomeFileScrittoSuWindosw.c
Scrivere un programma
Quindi, deve scrivere il file sorgente: File C, che si serva della libreria MPI.
Utilizzeremo il compilatore dellimplementazione OPENMPI.
Il file sorgente deve essere scritto con un editor Linux (vi, nano,) oppure con un
editor 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
comando
dos2unix NomeFileScrittoSuWindosw.c
Le applicazioni parallele saranno eseguite sui nodi computazionali
esclusivamente in modalit batch tramite il sistema PBS (Portable Batch System).
Per compilare ed eseguire il nostro file .c (sottomettere un job) sulle macchine del
cluster, si deve creare un file .pbs, cio un job-script che contiene un elenco di
direttive.
Scrivere un programma
Quindi, deve scrivere il file sorgente: File C, che si serva della libreria MPI.
Utilizzeremo il compilatore dellimplementazione OPENMPI.
Il file sorgente deve essere scritto con un editor Linux (vi, nano,) oppure con un
editor 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
comando
dos2unix NomeFileScrittoSuWindosw.c
Le applicazioni parallele saranno eseguite sui nodi computazionali
esclusivamente in modalit batch tramite il sistema PBS (Portable Batch System).
Per compilare ed eseguire il nostro file .c (sottomettere un job) sulle macchine del
cluster, si deve creare un file .pbs, cio un job-script che contiene un elenco di
direttive.
In rosso le informazioni
tipiche di questa
particolare sottomissione
Eseguibile da lanciare
Eseguire un programma
Una volta che si scritto il file PBS
Eseguire un programma
Una volta che si scritto il file PBS, e si quindi preparata lesecuzione parallela,
si lancia con il comando
qsub Hello.pbs
qsub in grado di interpretare le direttive contenute nel PBS
Eseguire un programma
Una volta che si scritto il file PBS, e si quindi preparata lesecuzione 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) e
che termini la sua esecuzione.
A questo punto sar possibile visualizzare loutput e l'error con i comandi:
cat Hello.err
cat Hello.out
Eseguire un programma
Per visualizzare i job:
qstat
Per visualizzare la coda ed il loro stato
(E=eseguito,R=in esecuzione, Q= stato accodato):
qstat -q
Esercizi
Scrivere, compilare ed eseguire sul cluster attraverso il PBS i seguenti esercizi.
Inviare il codice, il PBS e uno o pi esempi di output a valeria.mele@unina.it
FINE LEZIONE