Corso di Laurea Specialistica Ingegneria Informatica Laboratorio di

Transcript

Corso di Laurea Specialistica Ingegneria Informatica Laboratorio di
Corso di Laurea Specialistica Ingegneria Informatica
Laboratorio di Calcolo Parallelo
Prof. Alessandra d’Alessio
GUIDA AL LABORATORIO DI CALCOLO PARALLELO
Il progetto SCoPE (www.scope.unina.it) ha messo ha disposizione della Facoltà di
Ingegneria per il corso di Calcolo Parallelo un cluster composto complessivamente da 8
nodi per un totale di 64 core, completamente dedicati con dotazione software adeguata.
Ogni nodo è un server Dell PowerEdge M600 ciascuno dotato di:
 due processori quad core Intel Xeon [email protected] (Architettura a 64 bit)
 8 Gb di RAM
 dischi SATA da 80GB in configurazione RAID1
 due schede Gigabit Ethernet configurate in bonding
 scheda Infiniband (Mellanox Technologies MT25418 ConnectX IB DDR) per la
connettività ad alta banda e bassa latenza o scheda Fibre Channel.
Il software a disposizione è:
 Sistema operativo: Scientific Linux 5.3
 Driver e software per connettività Infiniband
 Resource Manager e Job Scheduler: TORQUE RM e Maui JS
 Grid Middleware: Glite 3.2 configurato per il ruolo di Working Node (WN)
 Librerie e software:
 Compilatori: GNU e Intel C, C++, F77 e F90
 MVAPICH 1.2.0: implementazione dello standard MPI1 over Infiniband
 OPENMPI 1.4: implementazione dello standard MPI2 over Infiniband
 librerie di base Intel MKL v.11
 Scope Toolkit v2.0:
o blacs-1.1.0
o blas-3.2.2
o espresso-4.0.5
o fftw-3.2.1
o gromacs-4.5.2
o gsl-1.13.3
o lapack-3.2.2
o metis-4.0.0
o neuron-7.1.0
o octave-2.9.15
o petsc-3.1.p7
o scalapack-1.8.0
o starccm-6.02.007
PROCEDURA PER UTILIZZARE IL CLUSTER SCOPE DAL TERMINALE
L’accesso al cluster avviene tramite client SSH con l’emulatore di terminale Putty
scaricabile gratuitamente all'URL http://tartarus.org/~simon/putty-snapshots/x86/putty.exe).
All’avvio si apre la finestra di connessione:
1
Bisogna inserire :
 host name (ui-studenti.scope.unina.it)
 port : 22
 connection type :SSH
Premendo il tasto open si apre il terminale ed ogni utente digita la propria login e
password:
2
A questo punto si può accedere alle proprie directory ed ai propri file .
Se si vuole trasferire un file da una macchina windows al cluster si può usare il software
WinSCP (http://winscp.net/download/winscp427setup.exe), che consente di collegarsi e
trasferire file:
Si digita login e password e si clicca su accedi. Si apre la finestra di collegamento:
3
Ci si mette nella cartella in cui c’è il file da spostare e semplicemente si trascina col mouse
nella cartella di arrivo.
Esecuzione di un programma parallelo
La scrittura di un programma parallelo va effettuata utilizzando il protocollo di
comunicazione Message Passing Interface (MPI) , in particolare il compilatore utilizzato è
OPENMPI, integrato in un codice sorgente scritto in C.
Si crea una directory che conterrà il progetto (file sorgente,eseguibile,..). Il file sorgente va
scritto con un editor Linux(vi,nano,..).
Se si edita in ambiente Windows bisogna utilizzare editor che non formattano(es.notepad).
Una volta copiati in laboratorio (con WINSCP) vanno processati con il comando dos2unix:
dos2unix nomefileW.c .
Le applicazioni parallele sono eseguite sui nodi computazionali esclusivamente in batch
tramite il sistema PBS (Portable Batch System).
Per comprendere la procedura con cui compilare ed eseguire un programma in MPI
tramite un job PBS, consideriamo il semplice esempio di un programma in cui ogni
processo scrive un messaggio ed il suo rank.
Il codice è memorizzato nel file hello.c e si trova nella directory HELLO.
File hello.c:
#include "mpi.h"
#include <stdio.h>
int main( int argc, char *argv[] )
{
int myid, numprocs;
int namelen;
char processor_name[MPI_MAX_PROCESSOR_NAME];
MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
MPI_Comm_rank(MPI_COMM_WORLD,&myid);
MPI_Get_processor_name(processor_name,&namelen);
fprintf(stderr,"Ciao sono il processo %d e mi chiamo %s\n", myid, processor_name);
MPI_Finalize();
return 0;
}
Di norma la sottomissione dei job a PBS avviene tramite il comando:
qsub nomefile.pbs
4
dove nomefile.pbs è un job-script che contiene un elenco di direttive per qsub seguito
dalle direttive necessarie alla compilazione ed esecuzione del programma.
In seguito c’è un esempio di job-script PBS utilizzato per compilare ed eseguire il file
hello.c, memorizzato nel file hello.pbs.
In tale script bisogna solo modificare il numero di nodi che si vuole utilizzare, il nome della
directory contenente il progetto ed il nome del file sorgente.
La prima riga dello script, prima di ogni altra direttiva, deve essere
#!/bin/bash
Le righe che iniziano con # sono commenti, quelle che iniziano con #PBS sono direttive.
#!/bin/bash
##########################
#
#
# The PBS directives #
#
#
##########################
#PBS -q studenti
#PBS -l nodes=20 numero nodi
#PBS -N hello nome job(stesso del file pbs)
#PBS -o hello.out nome file che contiene l’output
#PBS -e hello.err nome file che contiene l’output
##########################################
#
#
# Output some useful job information. #
#
#
##########################################
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
PBS_O_WORKDIR=$PBS_O_HOME/HELLO
echo -----------------------------------------------------echo PBS: qsub is running on $PBS_O_HOST
echo PBS: originating queue is $PBS_O_QUEUE
echo PBS: executing queue is $PBS_QUEUE
echo PBS: working directory is $PBS_O_WORKDIR
echo PBS: execution mode is $PBS_ENVIRONMENT
echo PBS: job identifier is $PBS_JOBID
echo PBS: job name is $PBS_JOBNAME
echo PBS: node file is $PBS_NODEFILE
echo PBS: current home directory is $PBS_O_HOME
echo PBS: PATH = $PBS_O_PATH
echo -----------------------------------------------------5
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_NODEFILE-np$NCPU
$PBS_O_WORKDIR/hello"
/usr/lib64/openmpi/1.4-gcc/bin/mpiexec -machinefile $PBS_NODEFILE -np $NCPU $PBS_O_WORKDIR/hello
Per eseguire il programma:
qsub hello.pbs
Per visualizzare l’output:
cat nomefile.err
cat nomefile.out
Per visualizzare lo stato del job:
qstat
il comando ritornerà una lista del tipo:
JobId
Name
User
Time Use
S
Queue
------------------------- ---------------- --------------- -------- - ------------------------------ ---------------- -------------198321.torque02
hello.pbs
<matricola studente>
00:01:04
R
studenti
dove, JobId è l’id del job, name è il nome dello script pbs, User è la login dell’utente che ha
sottomesso il job, Time Use è il tempo di esecuzione del job, S è lo stato del job (E=eseguito,R=in
esecuzione, Q= è stato accodato), Queue è la coda su cui il job è stato sottomesso.
Per eliminare il proprio job utente è sufficiente eseguire:
qdel JobId
In caso di problemi, inviare una email a: [email protected] specificando:
il proprio nome e cognome, il corso di cui si fa parte ed una breve descrizione del problema.
6