Domanda

Se ho avuto un singolo server e ho avuto due tipi di processo A (Molti processi molti thread) e B (un processo di n-discussioni con n-CPU), e ho voluto inviare una quantità GRANDE di messaggi unidirezionali da a a B. MPI è una migliore implementazione per questo che un'implementazione personalizzata utilizzando:

  1. Unix Domain Socket
  2. Tubi Windows denominato
  3. Shared Memory

Stavo pensando di scrivere la mia libreria sulla base di 1 e 2, e sto anche chiedendo se 3 è meglio dal momento che la memoria condivisa richiederebbe di blocco.

Un processo fornisce servizi esterni così l'utilizzo delle risorse di B e il messaggio che passa in generale deve consumare il meno risorse possibili, e A potrebbe essere implementato sia in blocco o non blocco quando si invia messaggi. utilizzo delle risorse di B e il messaggio che passa necessità di scalare linearmente con l'utilizzo di una.

Alla fine ho bisogno di capacità di trasmissione tra le macchine pure. Probabilmente per il processo B.

La mia domanda è addio: è MPI (openmpi in particolare) una buona biblioteca per questo, e lo fa usa le primitive del kernel più ottimali su vari sistemi operativi

.
È stato utile?

Soluzione

MPI sarà molto probabilmente il lavoro bene per questo, a condizione che si è disposti a rielaborare la propria architettura per adattarsi è il messaggio che passa infrastrutture.

In teoria, almeno quando ospitato su un singolo server, si può essere in grado di fare qualcosa di più veloce se si avvolge la vostra libreria, proprio perché non hanno a che fare il passaggio dentro e fuori le strutture di messaggi MPI. Detto questo, MPI è molto efficiente (esp. MPI-2, che supporta Open MPI ), e molto, molto robusto. Avresti un momento difficile ottenere la stessa flessibilità, configurabilità, e la robustezza di una propria libreria.

Se avete intenzione di essere radiodiffusione tra più macchine, MPI è probabilmente un approccio migliore che cercare di rotolare il proprio metodo.

Inoltre, MPI supporta un bel paio di modalità di comunicazione. Esso supporta memoria condivisa , comunicazione singola macchina molto veloce, così come TCP per la comunicazione inter-macchina (più alcune opzioni, più veloci commerciali).

Altri suggerimenti

MPI è abbastanza efficiente, è stata costruita per applicazioni ad alte prestazioni.
Si può anche utilizzare per le comunicazioni tra le CPU sullo stesso mboard molto bene.

Non sono sicuro circa le trasmissioni, il sistema che ho usato anni fa non hanno fatto, ma non mi ricordo se fosse una limitazione della nostra interconnessione o di MPICH.

ps. Abbiamo usato MPICH perché al momento ha funzionato meglio su Windows e abbiamo bisogno che la flessibilità, non ho usato MPICH2 o OpenMPI.

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