Quando si tratta di comprendere l'elaborazione parallela (ho intenzione di usare questo termine come termine generico), è meglio iniziare con le basi. Prendilo in modo lento e semplice all'inizio.
Sono a conoscenza del fatto che thread e processi sono più o meno gli stessi, ma i thread sono un sistema di lavoro leggero mentre i processi sono pesanti. Questi sono i termini utilizzati per indicare la quantità di lavoro del sistema che deve essere generato per supportare questi accordi di lavoro. Questa è una questione importante perché l'elaborazione parallela causa al computer un po 'di lavoro extra. Se un'attività genera un numero elevato di thread, questo è più efficiente rispetto a quando deve generare un numero uguale di processi per fare lo stesso lavoro.
Cerca di capire l'I / O nel senso più ampio possibile. Non si tratta solo di input dell'utente, o I / O su dispositivi di archiviazione di massa (disco). Dal punto di vista della CPU, una lettura dalla memoria principale è I / O. Una lettura cache è anch'essa di I / O, anche la più veloce cache di livello 1. L'elaborazione parallela consente di continuare il lavoro produttivo anche se un thread (o processo) è in attesa di I / O, poiché altri thread non bloccati possono continuare ad essere eseguiti.
E non rimanere mai bloccato pensando di conoscere o controllare l'ordine di esecuzione dei thread che si generano! Mentre è possibile forzare la sincronizzazione delle attività parallele, farlo solo se la logica del problema lo richiede. La sincronizzazione rallenta il ritmo di esecuzione del programma e non è buona se non strettamente necessario.
La maggior parte delle CPU moderne sono animali complessi internamente e abbattere persino le istruzioni di linguaggio Assembly in micro-istruzioni.
Tutti i discorsi su CPU multiple rispetto a core che utilizzano CPU sono solo elementi di implementazione hardware. Anche una singola CPU, non basata su core, può spesso fare un uso molto efficace del software parallelo. Richiede solo il supporto del sistema operativo e delle applicazioni.
La rozza gerarchia della potenza del processore (in ordine crescente di potenza di esecuzione delle istruzioni) è:
- CPU singola, no multi-core
- CPU multipla, no multi-core
- CPU singola, multi-core
- CPU multipla, multi-core
Perché? Le CPU multi-core possono indirizzare le attività intorno ai core interni molto più rapidamente di quanto impieghi per inviare un'attività a una CPU diversa. Inoltre, le CPU multi-core condividono abitualmente i livelli di cache, più delle CPU single-core. Ciò consente anche una più rapida condivisione dei dati.
Le metriche rozze che ho visto dicono che l'invio di un compito da un core ad un altro, all'interno di una singola CPU è approssimativamente 10 volte più veloce di dover inviare quell'attività da off-chip a un'altra CPU.
Si noti anche che le architetture a zero condiviso, come i supercomputer di routine, lo rendono ancora più astratto. Poi hai più interi computer che lavorano insieme come un'unità coordinata. La potenza di elaborazione delle istruzioni aumenta, così come il sovraccarico delle comunicazioni tra processi (IPC). Questo è direttamente analogo all'aumento di potenza con overhead IPC attendant rilevato tra più CPU single-core e una CPU multi-core. Tutto trovato all'interno di un singolo computer con un singolo sistema operativo.
Ecco alcune linee guida generali per la programmazione dell'elaborazione parallela:
- implementa tutte le attività parallele possibili, come consentito dalla logica;
- stai lontano dal tentativo di coordinare il numero di sottoattività che devi generare in correlazione con il tuo attuale design della CPU;
- evita di indovinare le capacità di elaborazione delle istruzioni della CPU;
- evita la sincronizzazione dei processi, ove possibile;
In effetti è un buon modello di design non progettare il tuo hardware attuale, il più possibile. Il software può avere una durata molto lunga mentre l'hardware ha una durata di vita relativamente breve e fissa. Quindi scommetti su (spendendo più tempo) sul software più che sull'hardware. L'hardware cambierà, puoi contare su di esso.