Programma in C con MPI
Qualcuno sa dirmi dove posso trovare qualche esempio di programma in C, parallelizzato con MPI e che utilizza il message passing?
Finora ho trovato programmi piuttosto lunghi, con tante variabili e tanti passaggi. Me ne servirebbe uno proprio basilare, per capire come si scrivono i codici.
Ad esempio:
Dato un vettore che contiene in ordine in numeri interi da 0 a 99, farlo evolvere tenendo fissati gli estremi e che le celle in tutte le altre posizioni vengano sostituite dalla somma delle celle adiacenti. Così:
0, 1, 2, 3, 4, 5,..., 99
0, 2, 4, 6, 8, 10, ..., 99
0, 4, 8, 12, ..., 99
...
Grazie.
Finora ho trovato programmi piuttosto lunghi, con tante variabili e tanti passaggi. Me ne servirebbe uno proprio basilare, per capire come si scrivono i codici.
Ad esempio:
Dato un vettore che contiene in ordine in numeri interi da 0 a 99, farlo evolvere tenendo fissati gli estremi e che le celle in tutte le altre posizioni vengano sostituite dalla somma delle celle adiacenti. Così:
0, 1, 2, 3, 4, 5,..., 99
0, 2, 4, 6, 8, 10, ..., 99
0, 4, 8, 12, ..., 99
...
Grazie.
Risposte
"robbstark":
Qualcuno sa dirmi dove posso trovare qualche esempio di programma in C, parallelizzato con MPI e che utilizza il message passing?
Finora ho trovato programmi piuttosto lunghi, con tante variabili e tanti passaggi. Me ne servirebbe uno proprio basilare, per capire come si scrivono i codici.
Hai provato a dare un'occhiata a questi?
http://www.mcs.anl.gov/research/project ... s/main.htm
http://www.lam-mpi.org/tutorials/
Grazie a entrambi, mi sono stati utili. Comunque ho creato un programma (che risolve l'equazione delle onde unidimensionale a partire da una condizione iniziale data) e ne ho testato l'efficienza al variare del numero dei processori. La cosa strana è che in alcuni casi ho trovato efficienza maggiore di 1. In particolare il tempo di esecuzione con 2 processori è risultato meno della metà del tempo impiegato con un processore. Come è possibile?
Escludo che sia dovuto a fluttuazioni, avendo misurato i tempi diverse volte.
Escludo che sia dovuto a fluttuazioni, avendo misurato i tempi diverse volte.
Penso che l'unica spiegazione sia che il compilatore abbia avuto problemi a ottimizzare la versione con un processore. Prova a scriverne una versione a un processore sequenziale senza MPI.