UniTO/anno2/YearI/SecondSem/SCPD/exercises
Francesco Mecca 5e286062f8 MCAD 2019
2018-11-22 13:09:11 +01:00
..
ex1 MCAD 2019 2018-11-22 13:09:11 +01:00
ex2 MCAD 2019 2018-11-22 13:09:11 +01:00
ex3 MCAD 2019 2018-11-22 13:09:11 +01:00
README.md MCAD 2019 2018-11-22 13:09:11 +01:00

Esercizi MPI

  1. Si scriva un programma MPI che stampi lo MPI rank e il nome della macchina in cui gira ogni processo MPI.

  2. Si scriva l'implementazione di una reduce O(log n) in MPI utilizzando solo comunicazioni simmetriche send/recv per gruppi di processi di size 2^n. Ad ogni turno t, ogni processo i comunica con il vicino i+2^t.

  3. Si scriva l'implementazione di una reduce O(log n) in MPI utilizzando solo comunicazioni simmetriche send/recv per gruppi di processi di ogni size. Ad ogni turno t, ogni processo i comunica con il vicino i+2^t.

  4. Si scriva l'implementazione di una reduce O(log n) in MPI utilizzando solo comunicazioni simmetriche send/recv per gruppi di processi di ogni size con pattern di comunicazione inter-allacciata. Ad ogni turno, ogni processo nella prima metà comunica con un processo nella seconda metà. Si assuma di avere un operatore associativo e commutativo.

  5. Si scriva un programma MPI che effettui in parallelo a) la somma b) il MCD di un insieme di variabili (una per processo): usando la primitiva reduce, usando solo primitive simmetriche sincrone secondo uno schema ad a) stella b) anello c) albero. In tutti i casi, si valuti analiticamente le prestazioni aspettate in termini di comunicazioni e di proceda ad una verifica sperimentale. Si abbozzi una analisi dei risultati e delle difficoltà incontrate.

  6. Si scriva il codice di una barrier a due fasi O(log n) utilizzando solo Send/Recv

  7. Si scriva un programma che realizzi un insieme di n-1 client e 1 server. Ogni client spedisce al server un certo numero di richieste (messaggi contenti un intero), ed aspetta un intervallo di tempo casuale fra una richiesta e la successiva ([0,1] secondi). Il client, dopo la richiesta aspetta una risposta dal server. Il server risponde al client con il quadrato del numero che ha ricevuto nella richiesta. Ogni client termina spontaneamente l'esecuzione dopo un numero casuale di richieste e risposte ricevute. Si discuta la terminazione del programma. Si provi ad utilizzare sia primitive sincrone, asincroni blocking e non-blocking. Si utilizzi, nel server una unica receive (con source MPI_ANY_SOURCE, si consulti il manuale in proposito).

Si utilizzi MPI su una singola macchina o un cluster come indicato a pag. 3 del MPI user guide. Alcuni esercizi sono stati discussi a lezione.