Note introduttive sulla parallelizzazione, in particolare schemi di problemi e algoritmi


10

Sto cercando appunti di lezioni disponibili online o altre risorse che forniscano una buona introduzione alla programmazione parallela, proprio come l'analogo parallelo delle lezioni di base di informatica.

Il mio focus è il seguente: mentre sono in grado di parlare di divide & conquistare, algoritmi avidi, programmazione dinamica e simili, cioè schemi di base di algoritmi (e problemi) sequenziali, e non ho il linguaggio appropriato per classificare gli approcci in algoritmi paralleli.

Ad esempio, vorrei acquisire i termini appropriati per esprimere il fatto che gli ovvi approcci paralleli a ciascuno dei seguenti problemi hanno un comportamento qualitativo diverso:

  1. impostazione di un array di numeri interi tutti zero (scala perfettamente).
  2. sommando una matrice di numeri interi (più thread usi, più sovraccarico).
  3. Dato un array, elenca i prodotti di ciascuna voce con un'altra voce (se parallelizziamo il doppio canonico per-loop, il tempo di esecuzione si ridimensionerà al sqrt dei processori numerici).

Un ambiente di memoria condivisa è sufficiente e la comunicazione tra processi non è così rilevante per me (in effetti, sono interessato agli algoritmi che lo evitano del tutto). Inoltre, gli aspetti tecnici sono trascurabili per me.


Puoi riformulare questa frase: "Ad esempio, vorrei avere una lingua per cui l'ovvio approccio parallelo ai seguenti problemi ha un comportamento qualitativo diverso"
Gopi,

Fatto. Spero che questo sia più preciso.
shuhalo,

Risposte:


6

Per un libro introduttivo per la programmazione parallela (non conosco il materiale online), l'ho imparato con Parallel Algorithms di Casanova, Legrand e Robert, che è molto utile per iniziare in teoria parallela algoritmica.

Inoltre, in SPAA'11 è stata discussa cosa dovrebbero sapere un algoritmo parallelo e uno studente di informatica distribuito e cosa dovrebbe insegnare. Questa iniziativa di curriculum sul calcolo parallelo e distribuito ti aiuterà a trovare non un corso, ma l'elenco di diversi argomenti che dovrebbero essere trattati durante un corso di laurea. Quindi suppongo che sia più facile trovare la documentazione su ogni argomento specifico.


1
Il termine "linguaggio" si riferiva al linguaggio naturale, non al linguaggio di programmazione o simile. Proprio come la matematica è un linguaggio, e ad esempio la teoria delle categorie o la teoria dei gruppi si dice che fornisca un "linguaggio" per certe strutture, relazioni e fatti. Ma grazie comunque.
shuhalo,

anzi, mio ​​cattivo :). Quindi, per le tre domande che ho posto, consiglio vivamente il libro che ho collegato che è molto teorico. Studiano tutti i tipi di algoritmi e tecniche parallele su diversi tipi di architettura parallela. Quindi la parte che potrebbe rispondere alle tue tre domande sarebbe la parte su Uniform Loops .
Gopi,


+1 per l'iniziativa sul curriculum NSF / IEEE-TCPP, ma suggerisco di rimuovere OpenMP e MPI, poiché qui non sono realmente rilevanti.
Jukka Suomela,

In effetti, ho dimenticato di rimuoverlo dopo il commento di @Martin. Grazie.
Gopi,

7

Se non vuoi approfondire i dettagli cruenti, un'ottima introduzione ai modelli di progettazione di parallelizzazione è fornita dal libro Patterns for Parallel Programming di Mattson, Sanders e Massingill.

Troverai soluzioni generali e ampiamente applicabili alla parallelizzazione e anche una breve introduzione sia a OpenMP che a MPI. Il libro inizia introducendo modelli di progettazione e concorrenza. Quindi, gli autori procedono a illustrare come sfruttare la concorrenza, come strutturare l'algoritmo e come implementare effettivamente l'algoritmo tenendo conto della sincronizzazione e della comunicazione.

Ancora una volta, questo non è un libro di testo su algoritmi paralleli. Fa un ottimo lavoro nel presentare materiali strettamente correlati all'ingegneria del software parallelo, con un focus sia pratico che teorico. Pertanto, dovrebbe adattarsi perfettamente alle tue esigenze.


1

MPI_RUBY ... devo trovare la mia ultima build stabile. Suggerirei di aggiungere il prefisso parallelo (scansione) all'elenco. Insegnerei semplicemente il prefisso parallelo e mostrerei loro come usare una curva di riempimento dello spazio per ottenere una migliore efficienza della cache sul problema di tutte le coppie.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.