Come parallelizzare un algoritmo sequenziale?

7

Quale processo di pensiero dovrebbe seguire per convertire un algoritmo sequenziale in uno parallelo? Ci sono schemi di codice specifici che possono essere parallelizzati. Alcuni pattern che uso normalmente sono:

  • Ricerca di loop che possono essere parallelizzati.
  • Cerca di interrompere l'operazione in qualche forma di ridimensionamento della mappa.
  • Ricerca del modello produttore-consumatore.
posta Saurabh Saxena 07.12.2011 - 19:53
fonte

2 risposte

7

Ian Foster descrive quattro passaggi fondamentali nel suo libro "Progettare e costruire programmi paralleli":

  1. Partizionamento - trova i possibili modi per dividere i dati tra i lavoratori il più a lungo possibile.
  2. Comunicazione: identifica i modelli di comunicazione.
  3. Agglomerazione: riduci le partizioni iniziali a quelle a grana grossa in base alle risorse disponibili.
  4. Mappatura - mappare le attività sulle unità di elaborazione.

Il libro è gratuito online, puoi trovarlo qui: link

    
risposta data 07.12.2011 - 20:59
fonte
1

Per un po 'di formalizzare ciò che hai già detto sulla ricerca di loop che possono essere parallelizzati, il concetto chiave che viene sfruttato è il parallelismo dei dati piatto. La maggior parte delle librerie parallele (che io conosca) sembrano esibire questo (ad es. Microsoft Task Parallel library per .NET, Microsoft Parallel Patterns Library per C ++)

Il parallelismo dei dati piatto avviene quando si dispone di una porzione di dati (piatti) (ad esempio un array) su cui si desidera eseguire il lavoro, quindi si suddividono i dati in blocchi di quanti processori si hanno, funziona in modo indipendente in parallelo per ognuno di questi pezzi, e infine potenzialmente aggregare / combinare il risultato di ogni pezzo per ottenere il risultato finale.

Un esempio di questo articolo: link

    
risposta data 07.12.2011 - 20:22
fonte

Leggi altre domande sui tag