Caratteristiche e Differenza tra Multiprocessing e Multithreading

Caratteristiche e Differenza tra Multiprocessing e Multithreading

Multiprocessing

Con multiprocessing (o multi-elaborazione) si definisce l’utilizzo di due o più CPU all’interno di un computer. Il termine si riferisce anche alla capacità del sistema di supportare due o più processori e/o la capacità di allocare compiti tra essi. Ci sono molte variazioni di questo aspetto e la definizione di multiprocessing può variare con il contesto principalmente in funzione di come sono definite le CPU. Si parla allora di core multipli sullo stesso die (inteso come la piastra di silicio su cui è realizzata la cpu), di die multipli nello stesso package, di package multipli nella stessa unità di sistema etc. In un sistema multiprocessore tutte le cpu possono essere uguali o alcune possono essere riservate per compiti particolari. La progettazione dell’hardware e del software determinano la simmetria o meno del sistema multiprocessore.

Per esempio possiamo impiegare sempre la stesso processore per rispondere agli interrupt hardware oppure utilizzare un unico processore per l’esecuzione di tutto il codice in kernel mode laddove il codice in user mode può essere eseguito da tutti gli altri processori. Sistemi dove tutti i processori sono utilizzati allo stesso livello sono detti SMP (symmetric multiprocessing). Sistemi dove le cpu non sono utilizzate allo stesso modo e le risorse di sistema sono divise tra le varie cpu si identificano in ASMP (asymmetric multi processing), NUMA (non-uniform memory access) e clustered multi processing.

Caratteristiche e Differenza tra Multiprocessing e Multithreading

Multithreading

Il multithreading indica il supporto hardware da parte di un processore di eseguire più thread (sequenze di istruzioni). Questa tecnica si distingue da quella alla base dei sistemi multiprocessore per il fatto che i singoli thread condividono lo stesso spazio d’indirizzamento, la stessa cache e lo stesso TLB (translation lookaside buffer) (buffer utilizzato dalla MMU per velocizzare la traduzione degli indirizzi virtuali). Il multithreading migliora le prestazioni dei programmi solamente quando questi sono stati sviluppati suddividendo il carico di lavoro su più thread che possono essere eseguiti in parallelo. I sistemi multiprocessore sono dotati di più unità di calcolo indipendenti, un sistema multithread invece è dotato di una singola unità di calcolo che si cerca di utilizzare al meglio eseguendo più thread nella stessa unità di calcolo. Le tecniche sono complementari, a volte i sistemi multiprocessore implementano anche il multithreading per migliorare le prestazioni complessive del sistema.
La necessità del multithreading si è evidenziata quando ci si è posti il problema di utilizzare con la massima efficienza possibile le unità di calcolo. Si è appurato che molti programmi erano composti da più thread paralleli o potevano essere scomposti in più thread paralleli con lievi modifiche al codice sorgente. Quindi migliorando l’esecuzione di thread paralleli si poteva migliorare l’esecuzione complessiva dei programmi. Questo ha spinto lo sviluppo dei sistemi multithreading e dei sistemi multiprocessore.

Le principali critiche al multithreading sono:

  1. Più thread condividono le stesse risorse come cache o translation lookaside buffer e quindi possono interferire a vicenda rallentandosi.
  2. Le prestazioni dei singoli thread non migliorano, ma anzi possono degradare all’aumento dei thread concorrenti.
  3. Il supporto hardware del multithreading e dei sistemi multiprocessori richiede anche un contributo del software, i programmi e i sistemi operativi devono essere adattati per gestire questa nuova possibilità.

Pubblicato da Vito Lavecchia

Lavecchia Vito Ingegnere Informatico (Politecnico di Bari) Email: [email protected] Sito Web: https://vitolavecchia.altervista.org

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *