Corsi tenuti da Giuseppe Levi
  • Home
  • Informatica per Fisici
    • Lezioni Video
    • Riferimenti Utili
    • Esempi discussi nel corso
    • Blog Lezioni
    • Trasparenze
    • Esami
  • Linguaggi Visuali
    • Blog Lezioni Fisica e LabView
  • CORSO HPC
    • Risorse utili
    • Blog Lezioni
    • Game of Life
    • Insieme Mandelbrot
    • Come lanciare un job sul cluster
  • Servizi Web Utili
  • Contatti
  • Appunti di Matematica Vedica Elementare

Lezione di Martedì 8 Marzo 2011

8/3/2011

0 Comments

 
In questa lezione abbiamo dato un esempio di come si possa parallelizzare un algoritmo sia come  "Task Parallelism" che come "Data Parallelism". L'algoritmo parallelizzato era appropriato all'ora prima di pranzo: la ricetta dei tortellini in brodo. La funzione riempimento_e_chiusura(&pasta); ha permesso di illustrare come sia possibile fare una data division o una pipeline.
Abbiamo inoltre mostrato il primo esempio di programma MPI con un semplice scambio di messaggi sincrono fra due processi.
Il codice presentato è stato:

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

int i, my_id, numprocs,length;
int sendb,receiveb,tag;
char name[BUFSIZ];
MPI_Comm com;
MPI_Status status;
com=MPI_COMM_WORLD;
MPI_Init(&argc, &argv) ;                    // Chiamata obbligatoria di inizializzazione
MPI_Comm_rank(MPI_COMM_WORLD, &my_id) ;     // Ottiene l'identificativo del processo
MPI_Comm_size(MPI_COMM_WORLD, &numprocs) ;  // Ottiene quanti processi sono attivi
MPI_Get_processor_name(name, &length);      // Il nome del nodo dove il processo è in esecuzione
sendb=my_id;
tag=0;
switch (my_id)  {
case 0:

MPI_Send(&sendb,1,MPI_INT,1,tag,MPI_COMM_WORLD);
MPI_Recv(&receiveb,1,MPI_INT,1,tag,com,&status);

break;
case 1:

MPI_Recv(&receiveb,1,MPI_INT,0,tag,com,&status);
MPI_Send(&sendb,1,MPI_INT,0,tag,MPI_COMM_WORLD);
break;
}

cout << "Sono il Processo "<< my_id << " e ho ricevuto " << receiveb << " da : " << status.MPI_SOURCE << endl;
MPI_Finalize();                             // Chiusura di MPI.
/*
Esercizio:
Modificate il programma in modo da farlo eseguire da un numero PARI di processi. 
I processi pari comunicano con quelli dispari e viceversa (0 <--> 1; 2 <--> 3.... ecc.)

*/

return 0;
}

0 Comments



Leave a Reply.

    Author

    Giuseppe Levi
    Blog delle lezioni del corso di PPSD 2012.

    Archives

    January 2015
    May 2012
    April 2012
    March 2012
    May 2011
    April 2011
    March 2011

    Categories

    All
    Cluster
    Mpi
    Openmp

    RSS Feed

Powered by Create your own unique website with customizable templates.