MPI non è un linguaggio di programmazione. MPI definisce un insieme di routine di libreria che possono essere richiamate dai programmi C e Fortran. I programmi MPI utilizzano in genere un approccio a programma singolo e più dati. Più istanze, o ranghi MPI, dello stesso programma vengono eseguiti contemporaneamente. Ciascun rango calcola una parte diversa del problema più ampio e utilizza MPI per comunicare i dati tra i ranghi. Dal punto di vista di un programmatore MPI, i ranghi possono essere eseguiti sullo stesso nodo o su nodi diversi; il percorso di comunicazione può essere diverso, ma è trasparente al programma MPI.
I meccanismi di avvio delle applicazioni MPI non fanno parte dello Standard. Dimostriamo come gestire i programmi Intel MPI su Linux, ma la maggior parte delle altre distribuzioni ha una semantica simile e caratteristiche simili. Il modo base per eseguire un programma Intel MPI è (con
$ mpirun –n < N > ./prg.x
Ciò sarà sufficiente per un nodo di memoria condivisa o un cluster con un sistema di gestione batch standard. Se riscontri l'errore seguente:
mpirun.openmpi: command not found
puoi provare a installare il pacchetto sottostante secondo la tua scelta di distribuzione.
Distribuzione | Comando |
---|---|
Debian | apt-get install openmpi-bin |
Ubuntu | apt-get install openmpi-bin |
Kali Linux | apt-get install openmpi-bin |
Raspbian | apt-get install openmpi-bin |
Riepilogo
Il modello di programmazione MPI si adatta perfettamente ai cluster contenenti coprocessori Intel Xeon Phi. Il programmatore può accelerare i singoli ranghi MPI scaricando i kernel di calcolo chiave sul coprocessore. Tuttavia, è necessario prestare attenzione per evitare conflitti di risorse e ammortizzare la maggiore quantità di comunicazione. In alternativa, il coprocessore ha le caratteristiche di un altro nodo del cluster, sebbene con capacità di calcolo diverse rispetto all'host, e i ranghi MPI possono essere eseguiti in modo nativo sul coprocessore. Entrambi gli approcci introducono nuovi gradi di eterogeneità e la probabilità di squilibrio del carico come collo di bottiglia delle prestazioni.