Domanda

Ho lavorato con alcuni amici per convertire un algoritmo genetico Matlab per C ++ e funziona in un ordine sequenziale attualmente. Matlab non è più una parte del nostro codice corrente.

Stiamo cercando di utilizzarlo su un cluster, ma siamo stati un po 'asciutta sulle risorse. Abbiamo un cluster a disposizione presso l'Università ed è dotato di Rocce e OpenMPI, ma io non sono davvero sicuro dove cominciare a lavorare con esso.

Al momento disponiamo di configurazione 2D e 3D le matrici con i dati in loro e quando il sistema sta facendo di crossover o lo scambio tra i modelli che cerca solo scambiando parti della matrice 2D e 3D. Quali sono alcuni buoni modi per separare queste strutture attraverso più nodi?

È stato utile?

Soluzione

Se stai facendo i calcoli di matrice, quindi se c'è anche un buon modo di isolare i calcoli è fortemente dipendente dal calcolo stesso.

Mi raccomando il libro Golub e Van Loan, "Matrix calcoli, 3rd Ed.". In esso v'è un intero capitolo dedicato a parallelo calcoli (Ch. 6).

OpenMPI è un bel middleware da utilizzare per questo problema. Dal momento che si sta facendo questo in C ++, si potrebbe anche dare un'occhiata a zeromq. I due hanno semantica diversa, e si potrebbe favorire il vostro spazio o il vostro problema di qualifiche più dell'altro.

Inoltre, si dovrebbe sapere che i calcoli di matrice paralleli (tipicamente elaborazione del segnale, ma ci sono un sacco di altre applicazioni) è una zona molto, molto attiva di ricerca.

Altri suggerimenti

Fitness calcolo:

In genere solo bisogno di sapere su un individuo per calcolare la sua forma fisica, in modo da poter lavorare solo attraverso la popolazione distribuendo individui di ogni core. Quando si forma fisica di un individuo è stato calcolato, a mano che il nucleo di un nuovo individuo.

Crossover:

A divide e conquista approccio potrebbe essere adatto a questo problema. Rompere gli array in blocchi che vengono elaborati da ogni core CPU, quindi eventualmente aggiungere una fase di attraversamento globale (accoppiamento un sottoinsieme di coppie) per assicurarsi di avere la capacità di muoversi attraverso lo spazio multidimensionale appropriato.

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