Domanda

Devo implementare il sistema MPI in un cluster. Se qualcuno qui ha qualche esperienza con MPI (MPICH / OpenMPI), mi piacerebbe sapere quale è meglio e come migliorare le prestazioni su un cluster di scatole x86_64.

È stato utile?

Soluzione

MPICH è in circolazione da molto più tempo. È estremamente portatile e troverai anni di consigli e trucchi online. È una scommessa sicura ed è probabilmente compatibile con più programmi MPI disponibili.

OpenMPI è più recente. Sebbene non sia altrettanto portatile, supporta davvero le piattaforme più comuni. Molte persone sembrano pensare che sia molto meglio sotto molti aspetti, specialmente per quanto riguarda la tolleranza agli errori, ma per trarne vantaggio potrebbe essere necessario utilizzare alcune delle sue funzioni speciali che non fanno parte dello standard MPI.

Per quanto riguarda le prestazioni, dipende molto dall'applicazione; è difficile dare consigli generali. È necessario pubblicare una domanda specifica sul tipo di calcolo che si desidera eseguire, il numero di nodi e il tipo di hardware, incluso il tipo di hardware di rete che si sta utilizzando.

Altri suggerimenti

Ho scritto alcune applicazioni parallele per cluster Windows e Linux, e posso consigliarvi che al momento MPICH2 è probabilmente la scelta più sicura. È, come menziona l'altro rispondente, una biblioteca molto matura. Inoltre, è disponibile un ampio supporto per la trasmissione (tramite MPI_Bcast ) ora, e in effetti, MPICH2 ha alcune funzionalità davvero interessanti come scatter-e-riunire .

Tuttavia OpenMPI sta guadagnando terreno. Il Penguin Computing (sono un grande fornitore di cluster e a loro piace Linux) ha in realtà alcuni benchmark davvero forti in cui OpenMPI batte MPICH2 in alcune circostanze.

Per quanto riguarda il tuo commento su "aumentare le prestazioni", il miglior consiglio che posso dare è di non inviare mai più dati di quanto sia assolutamente necessario se sei legato all'I / O e mai fare più lavoro del necessario se sei CPU associata. Sono caduto nella trappola dell'ottimizzazione del codice errato più di una volta :) Spero che non seguirai le mie orme!

Dai un'occhiata ai forum MPI: hanno molte informazioni utili sulle routine MPI e Il Beowulf ha risposto a molte domande interessanti.

"Migliore" è difficile da definire ... È possibile rispondere a "Più veloce" confrontandolo con il codice e l'hardware. Cose come collettivo & amp; l'ottimizzazione dell'offload dipenderà dal tuo hardware esatto ed è anche abbastanza variabile rispetto alle versioni dello stack dei driver, Google dovrebbe essere in grado di trovarti combinazioni funzionanti.

Per quanto riguarda l'ottimizzazione, ciò dipende in parte dal codice e in parte dall'hardware.

L'I / O del codice è associato alla memoria? In tal caso, un'indagine su qualcosa di meglio di NFS potrebbe essere di grande aiuto o utilizzare l'I / O MPI anziché l'I / O parallelo ingenuo

Se sei legato alla rete, può essere utile osservare la località di comunicazione e la sovrapposizione di comunicazioni / calcolo. La maggior parte delle varie implementazioni MPI hanno opzioni di ottimizzazione per l'utilizzo della memoria locale condivisa piuttosto che della rete per le comunicazioni intranode, che per alcuni codici può ridurre significativamente il carico della rete.

La segregazione del traffico I / O e MPI può fare una grande differenza su alcuni cluster, in particolare per i cluster ethernet gigabit.

Abbiamo usato mpich semplicemente perché sembrava più disponibile e meglio documentato, non abbiamo fatto molti sforzi per testare le alternative. MPICH ha strumenti ragionevoli per la distribuzione su Windows.
Il principale problema di prestazioni che abbiamo avuto è stato che dovevamo spedire gli stessi dati di base a tutti i nodi e MPICH non supporta (o non supporta) la trasmissione, quindi la distribuzione dei dati iniziali è stata O (n)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top