Domanda

Comprendo le differenze tra un programma multithread e un programma basato sulla comunicazione tra macchine. Il mio problema è che ho un bel programma multithread scritto in 'C' che funziona e funziona davvero bene su una macchina a 8 core. Ora è possibile trasferire questo programma su un cluster per ottenere l'accesso a più core. Vale la pena fare uno sforzo per strappare il materiale pthread e retrofit MPI (che non ho mai usato) o è meglio ricodificare l'intero (o la maggior parte) da zero? Supponiamo che siamo "bloccati" con C, quindi un cambio di lingua all'ingrosso non è un'opzione.

È stato utile?

Soluzione

A seconda di come è scritto il tuo software, potrebbero esserci o meno dei vantaggi nel passare a MPI rispetto al mantenimento dell'implementazione di pthread.

Sfortunatamente (o per fortuna), il passaggio di messaggi è una bestia molto diversa da quella di pthreading - il presupposto di base è abbastanza diverso. Adoro questa citazione di Joshua Phillips del team Maestro : " La differenza tra comunicazione di messaggi e stato condiviso è equivalente alla differenza tra l'invio di un'e-mail a un collega che le richiede di completare un'attività e l'apertura il suo organizzatore per annotare l'attività direttamente nella sua lista di cose da fare. Oltre ad essere scortese, è probabile che quest'ultima la confonda: potrebbe cancellarla, non accorgersene o dare la priorità accidentale a una posizione errata. & Quot;

Sfortunatamente, il modo in cui condividi i dati è molto diverso. Non esiste un accesso diretto ai dati in altri thread (poiché può essere su altre macchine), quindi può essere un'attività scoraggiante migrare da pthreads a MPI. D'altra parte, se il codice è scritto in modo che ogni thread sia isolato, può essere un compito facile e sicuramente utile.

Per determinare quanto sarà utile, dovrai capire il codice e cosa speri di ottenere cambiando. Può essere utile come esperienza di apprendimento (impari MOLTO sulla sincronizzazione e il threading lavorando in MPI), ma potrebbe non essere pratico se i guadagni saranno minori.

Altri suggerimenti

Re. il tuo commento a Reed: suona come una conversione semplice e poco costosa in MPI. Fai solo attenzione: non tutte le API MPI supportano la creazione dinamica di processi, vale a dire che avvii il tuo programma con N processi (specificati all'avvio) e rimani bloccato con N processi per tutta la durata del programma.

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