Skip to main content

Examples

Esempi per l'uso del cluster di calcolo

Uso di Eclipse

Eclipse è in IDE (Integrated Development Environment) cioè un software destinato a fornire al programmatore tutto quello che può essere necessario per programmare in modo efficace. È un software liberamente disponibile e dispone di module (detti plugin) che lo rendono adatto alla programmazione di quasi ogni linguaggio di programmazione, in particolari sono presenti i plugin per i linguaggi destinati all'uso scientifico come il Fortran, il C, il Python, eccetera.

Le slide a disposizione (in inglese) danno le istruzioni di base per l'uso di Eclipse per la programmazione/esecuzione remota di un programma. Il linguaggio usato negli esempi è X10 che è un linguaggio avanzato per la programmazione parallela, ma le operazioni di base si possono facilmente adattare a qualsiasi linguaggio. Le slide sono disponibili qui .

Esempi PBS/Torque

Quelli che seguono sono una serie di esempi che illustrano le tecniche e le possibilità di base nell'utilizzo di un cluster di calcolo.
Ognuno di questi esempi è accompagnato da un archivio ZIP. Estraendo l'archivio nella propria home-directory di labsrv0 (l'host di accesso al cluster di calcolo) viene creata una directory Examples/XX-Name dove

  • XX indica il numero di esempio
  • Name indica il nome dell'esempio

Negli esempi che richiedono compilazione (C/Java/...) esiste un Makefile. Per compilare occorre spostarsi nella directory dell'esempio e dare il comando make. Il file di definizione del JOB per il sistema di calcolo è poi predisposto per funzionare dalla directory di compilazione con il comando qsub.

Esempio

Una volta connessi a labsrv0 dare i seguenti comandi per scompattare/compilare/eseguire il codice di un esempio (il primo):

 [labsrv0]:~$ unzip 01-Sieve.zip 
 Archive:  Examples/Archives/01-Sieve.zip
    creating: Examples/01-Sieve/
   inflating: Examples/01-Sieve/Makefile  
   inflating: Examples/01-Sieve/sieve.c  
   inflating: Examples/01-Sieve/sieve.job  
 [labsrv0]:~$ cd Examples/01-Sieve
 [labsrv0]:~/Examples/01-Sieve$ make
 cc -Wall -g -c sieve.c
 gcc -o sieve sieve.o 
 [labsrv0]:~/Examples/01-Sieve$ qsub sieve.job 
 178694.grid0.math.unipd.it

Programma di base (C/C++/Fortran)

Archivio: Esempio-01-Sieve
Esecuzione: un processo su un nodo cluster_maths
Linguaggio: C
Descrizione: In questo esempio l'esecuzione riguarda una sola istanza di un programma C. Il programma è un semplice crivello di Eratostene per la stampa dei numeri primi inferiori ad un parametro fornito in input. Il JOB file disponibile nell'archivio effettua la ricerca di tutti i numeri primi inferiori a 100 milioni.

Programma precompilato (Magma)

Archivio: Esempio-02-Magma
Esecuzione: un processo su labsrv0 (workstation_intel)
Linguaggio: Magma Algebra System Language
Descrizione: Il questo esempio l'esecuzione riguarda un'istanza del programma Magma. Il programma è disponibile solo su labsrv0 quindi il JOB file comanda l'esecuzione sulla coda otto_short. Non essendo prevista compilazione non è fornito il Makefile

Programma Java

Archivio: Esempio-03-Java
Esecuzione: un processo su un nodo cluster_maths
Linguaggio: Java
Descrizione: Questo esempio illustra l'uso del linguaggio Java. Il JOB viene allocato sui nodi marcati cluster_maths (i nodi acquistati dai Dipartimenti di Matematica). Il Makefile fornito illustra il semplice comando di compilazione;

Programma OpenMPI/Infiniband

Archivio: Esempio-04-MPIPrimes
Esecuzione: 4 processi su 4 nodi generici cluster
Linguaggio: C
Descrizione: Questo esempio illustra l'uso della libreria OpenMPI. Il programma fornito calcola la somma di tutti i numeri primi inferiori ad un argomento dato. La comunicazione tra le varie istanza avviene attraverso l'hardware Infiniband di cui il cluster è fornito.

Programma Octave - OpenMPI/Infiniband

Archivio: Esempio-05-MPIOctave
Esecuzione: 4 processi a due a due distribuiti su due nodi cluster_psyco
Linguaggio: Octave
Descrizione: Questo esempio illustra l'uso della libreria MPI ToolBox (MPITB) per il calcolo parallelo su Octave/Matlab usando la libreria OpenMPI (e Infiniband). Non essendo necessaria compilazione non viene fornito un Makefile

Programma Octave - OpenMPI/Infiniband

Archivio: Esempio-06-MPIOctave
Esecuzione: 4 processi a due a due distribuiti su due nodi cluster_psyco
Linguaggio: Octave
Descrizione: Questo esempio, come il precedente, illustra l'uso della libreria MPI ToolBox (MPITB) per il calcolo parallelo su Octave/Matlab usando la libreria OpenMPI (e Infiniband). Non essendo necessaria compilazione non viene fornito un Makefile. L'esempio ha al suo interno la possibilità di cambiare modalità di parallelizzazione e permette di esplorare le varie possibilità.

Programma X10 - OpenMPI/Infiniband

Archivio: Esempio-14-Fibonacci-X10
Esecuzione: 4 processi distribuiti su 4 nodi generici cluster
Linguaggio: X10
Descrizione: Questo esempio illustra l'uso del linguaggio X10 per il calcolo dell'n-esimo numero di Fibonacci. Le comunicazioni tra i vari processi avvengono via MPI su Infiniband.

Programma CUDA

Archivio: Esempio-16-CUDA-Hello
Esecuzione: Un processo su un nodo con GPU
Linguaggio: C con estensioni CUDA
Descrizione: Questo esempio illustra l'uso dell'ambiente CUDA nel cluster. Puè eseguito su labsrv0 e labsrv8

Programma PyCUDA

Archivio: Esempio-18-PyCUDA
Esecuzione: Un processo su un nodo con GPU
Linguaggio: Python con estensioni a CUDA, vedi PyCuda
Descrizione: Questo esempio illustra l'uso dell'ambiente CUDA nel cluster. Puè eseguito su labsrv0 e labsrv8. Python è un linguaggio interpretato e non serve compilazione, basta la sottomissione del job.