Multithreading: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
mNessun oggetto della modifica
Riga 1:
[[Immagine:Single-thread.png|thumb|right|Un processore single thread esegue un solo thread per volta]]
[[Immagine:Single-thread SMP.png|thumb|right|Un sistema multiprocessore classico esegue un solo thread per unità di calcolo]]
[[Immagine:Superthreaded CPU.png|thumb|right|Un sistema superthreadingCoarse-grained multithreading schedula più thread ma ne esegue uno solo per ciclo di clock]]
[[Immagine:Hyper-threaded CPU.png|thumb|right|Un sistema Simultaneous MultiFine-Threadinggrained multithreading schedula più thread e ne esegue in contemporaneo le istruzioni al fine di occupare al meglio le unità d'elaborazione]]
In [[informatica]] il '''multithreading''' indica il supporto [[hardware]] da parte di un [[processore]] di eseguire più [[thread]]. Questa tecnica si distingue da quella alla base dei sistemi [[Multi core|multiprocessore]] per il fatto che i singoli thread condividono lo stesso spazio d'indirizzamento, la stessa cache e lo stesso [[translation lookaside buffer]]. 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.
 
== Panoramica ==
[[Immagine:Superthreaded CPU.png|thumb|right|Un sistema superthreading schedula più thread ma ne esegue uno solo per ciclo di clock]]
Il paradigma del '''multithreading''' è diventato molto popolare verso la fine degli [[anni 1990|anni novanta]] quando le ricerche sull'incremento dell'[[instruction level parallelism]] si sono bloccate. Allora si è spostata l'attenzione dall'eseguire un singolo programma alla massima velocità all'occupare 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.
 
Line 65 ⟶ 66:
==Simultaneous Multi-Threading==
===Idea di base ===
[[Immagine:Hyper-threaded CPU.png|thumb|right|Un sistema Simultaneous Multi-Threading schedula più thread e ne esegue in contemporaneo le istruzioni al fine di occupare al meglio le unità d'elaborazione]]
I moderni processori hanno più unità di calcolo che vengono utilizzate eseguendo le istruzioni dei singoli thread in parallelo. Gli attuali processori sono in grado di eseguire solamente poche istruzioni in parallelo di un singolo thread per via del ridotto parallelismo a livello di istruzioni che normalmente i thread possiedono. Quindi spesso alcune unità di elaborazione rimangono inutilizzate durante le elaborazioni. Per evitare questo il Simultaneous Multi-threading (SMT) esegue più thread in contemporanea e utilizza le istruzioni dei singoli thread per mantenere le unità di elaborazione sempre operative.