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:
- impostazione di un array di numeri interi tutti zero (scala perfettamente).
- sommando una matrice di numeri interi (più thread usi, più sovraccarico).
- 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.