Domanda

Voglio scrivere un convertitore di codice che prende un programma parallelo basato OpenMP e lo esegue in un cluster.

Come faccio ad andare su questo problema? Quello che le biblioteche si usa? Come faccio a impostare un piccolo gruppo per questo?

sto trovando estremamente difficile trovare un buon materiale su cluster di calcolo su Internet.

EDIT: Se è impossibile, allora come fa Intel fa? Il compilatore Intel sembra fare esattamente quello che voglio. Non ho alcuna applicazione specifica che vorrei correre. Voglio scrivere il "convertitore / compilatore", non l'applicazione. Mi sembra di capire che la memoria condivisa è diversa dalla memoria distribuita, ma ci deve essere un modo per sincronizzare la memoria, se non per tutti i casi, poi per alcuni casi specifici, anche se ciò significa che l'applicazione è scritto con costrutti personalizzati.

È stato utile?

Soluzione

Mi pare che questa non è una buona idea.

L'idea alla base OpenMP è l'esecuzione parallela di dati condivisa. Funziona bene, quando si accede a dati condivisi ti costa nulla. Ogni thread può accedere a una variabile nella cache o RAM condivisa.

I calcoli a grappolo sfruttano message-passing, perché i computer a grappolo hanno distribuito memoria. Quando un processo ha bisogno di dati da un altro allora si dovrebbe gestire i dati che passano attraverso la rete. Si tratta di un'operazione che richiede tempo.

Quindi, se si vuole scrivere come compilatore, è necessario implementare i dati operazioni di radiodiffusione (ad esempio MPI_Bcast dal MPI) per ogni accesso ai dati in OpenMP. Questo ucciderà prestazioni in parallelo a tutti.

Altri suggerimenti

Intel ha un'implementazione di OpenMP che funziona con il C ++ e Fortran per x86 cluster a 64-bit. È possibile ottenere una versione di 30 giorni eval di questi compilatori gratuitamente. Oltre a questo, Zifre è per lo più a destra. Se siete interessati con la scalabilità, stringere i denti e scrivere il programma parallelo in un altro modello di programmazione (MPI, CUDA, Cilk, ...), che è stato progettato con sistemi distribuiti in mente. Se si fornisce un po 'di più informazioni sulla tua applicazione, potremmo essere in grado di fornire una guida più utile su questo fronte.

Questo non è semplicemente possibile. Bisogna strutturare il codice in un modo completamente diverso per farlo funzionare su un cluster (la programmazione di più macchine è molto diverso da programmare una macchina).

Non c'è polvere di fata magica per farlo.

D'altra parte, se si scrive il programma con i cluster in mente, è possibile eseguirlo su una singola macchina (anche se sarà ovviamente più lenta).

SCORE / SCASH e Omni OpenMP compilatore

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