Multithreading: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
fix
 
(16 versioni intermedie di 13 utenti non mostrate)
Riga 1:
{{F|componenti per computer|marzo 2013}}
[[File:Single-thread.png|thumb|right|Un processore single thread esegue un solo thread per voltaprocesso]]
[[File:Single-thread SMP.png|thumb|right|Un sistema multiprocessore classico esegue un solo thread per unità di calcolo]]
 
In [[informatica]] il '''multithreading''' indica il supporto [[hardware]] da parte di un [[processore]] di [[esecuzione (informatica)|eseguire]] più [[Thread (informatica)|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 [[memoria cache|cache]] e lo stesso [[translation lookaside buffer]].
 
Il ''multithreading'' migliora le prestazioni dei [[programma (informatica)|programmi]] solamente quando questi sono stati sviluppati suddividendo il carico di lavoro su più thread che possono essere eseguiti in apparenza in [[calcolo parallelo|parallelo]]. Mentre i sistemi multiprocessore sono dotati di più unità di calcolo indipendenti per le quali l'[[esecuzione (informatica)|esecuzione]] è effettivamente parallela, 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 due tecniche sono complementari: a volte i sistemi multiprocessore implementano anche il multithreading per migliorare le prestazioni complessive del sistema.
[[File:Single-thread.png|thumb|right|Un processore single thread esegue un solo thread per volta]]
[[File:Single-thread SMP.png|thumb|right|Un sistema multiprocessore classico esegue un solo thread per unità di calcolo]]
 
== Panoramica ==
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ù threadflussi 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.
 
Questo filone di ricerca ha portato anche delle critiche, le principali sono:
Line 15 ⟶ 16:
 
== Clustered Multi-Thread ==
Il ''Clustered Multi-Thread'' è una tecnica che consente la progettazione di processori superscalari senza sacrificare tempo di ciclo, ma a costo di latenze di comunicazione maggiori.<ref>[httphttps://cseweb.ucsd.edu/~tullsen/ipdps04.pdf Clustered Multithreaded Architectures – Pursuing Both IPC and Cycle Time]</ref>
 
=== Esempi ===
Uno dei maggiori esponenti di questa architettura sono i processori Bulldozer di AMD<ref>[{{Cita web |url=http://www.tomshw.it/news/amd-vuole-mettere-paura-a-intel-e-nvidia-i-piani-per-il-futuro-66025 |titolo=AMD vuole mettere paura a Intel e Nvidia: i piani per il futuro] |accesso=6 maggio 2015 |dataarchivio=9 maggio 2015 |urlarchivio=https://web.archive.org/web/20150509004827/http://www.tomshw.it/news/amd-vuole-mettere-paura-a-intel-e-nvidia-i-piani-per-il-futuro-66025 |urlmorto=sì }}</ref>
 
== Coarse-grained multithreading ==
Line 46 ⟶ 47:
 
== Fine-grained multithreading ==
[[File:Hyper-threaded CPU.png|thumb|right|Un sistema Fine-grained multithreading schedula più thread e ne esegue in contemporaneo le istruzioni al fine di occupare al meglio le unità d'elaborazione]]
=== Idea di base ===
Una tipologia di multithreading molto spinto prevede che il processore scambi il thread in esecuzione a ogni ciclo di clock.
Line 60 ⟶ 61:
 
=== Terminologia ===
Questa tecnica di multithreading inizialmente venne chiamata ''barrel processing'' ma attualmente la terminologia moderna definisce questa tecnica come ''pre-emptive'' o ''interlavedinterleaved'' o ''time-sliced'' o ''fine-grained'' multithreading.
 
=== Costo hardware ===
Line 73 ⟶ 74:
 
== Simultaneous Multi-Threading ==
[[File:Superthreaded CPU.png|thumb|right|Un sistema Simultaneous Multi-Threading schedula più thread ma ne esegue uno solo per ciclo di clock]]
=== Idea di base ===
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.
Line 96 ⟶ 97:
 
== Ricerca ==
Attualmente la ricerca di settore si concentra su tecniche che permettano di scegliere rapidamente il thread da mandare in esecuzione in caso di stallo del thread in esecuzione. Un importante filone di ricerca è lo [[scheduler]] dei thread, che può essere gestito a livello hardware, a livello software o con un approccio misto.
 
Un'altra area di ricerca riguarda la tipologia di eventi che devono provocare uno scambio dei thread in esecuzione (cache miss, DMA, comunicazione inter thread, etc).
Line 105 ⟶ 106:
<references />
 
== Voci correlate ==
* [[Fork (programmazione)]]
 
== Collegamenti esterni ==
* {{FOLDOC||multithreading}}
* {{cita web|http://www.di.unito.it/~gunetti/DIDATTICA/architettureII/06-multithreading-3.pdf|Lucidi sul multithreading}}
* {{cita web|url = http://www.di.unito.it/~gunetti/DIDATTICA/architettureII/06-multithreading-3.pdf| titolo = Lucidi sul multithreading | formato = pdf |urlarchivio = https://web.archive.org/web/20060609173356/http://www.di.unito.it/~gunetti/DIDATTICA/architettureII/06-multithreading-3.pdf | urlmorto = no}}
* {{cita web | url = http://www.federica.unina.it/ingegneria/programmazione-2/programmazione-multi-thread/ | titolo = Programmazione multi-thread | sito = Università di Napoli | lingua = it | urlarchivio = https://web.archive.org/web/20120423065229/http://www.federica.unina.it/ingegneria/programmazione-2/programmazione-multi-thread/ | urlmorto = no}}
 
{{Portale|informatica}}
 
[[Categoria:Microprocessore]]
[[Categoria:Calcolo parallelo]]
[[Categoria:Thread]]