Multithreading: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m Bot: correggo errori comuni e/o sostituzioni standard |
fix |
||
(73 versioni intermedie di 54 utenti non mostrate) | |||
Riga 1:
{{F|componenti per computer|marzo 2013}}
[[Immagine:Single-thread.png|thumb|right|Un processore single thread esegue un solo thread per volta]]▼
[[
▲[[
Il '''multithreading''' in [[informatica]] 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ù theard 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.▼
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
== Panoramica ==
Il paradigma del '''
[[Immagine:Superthreaded CPU.png|thumb|right|Un sistema superthreading schedula più thread ma ne esegue uno solo per ciclo di clock]]▼
▲Il paradigma del '''multithearding''' è 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 miglioranddo l'esecuzione di theard parappeli 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:
* Più
* Le prestazioni dei singoli thread non migliorano, ma anzi possono degradare all'aumento dei thread concorrenti.
* Il supporto hardware del
== 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>[https://cseweb.ucsd.edu/~tullsen/ipdps04.pdf Clustered Multithreaded Architectures – Pursuing Both IPC and Cycle Time]</ref>
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 ==
=== Idea di base ===
Il multithreading ''coarse-grained'' (a grana grossa) prevede che il processore esegua un singolo thread fino a quando questo non viene bloccato da un evento che normalmente ha una elevata latenza (per esempio un [[cache miss]]), in questo caso il processore provvede a eseguire un altro thread che era pronto per l'esecuzione. Il thread di rimpiazzo rimane in
Per esempio:
# Ciclo i
# Ciclo i+1
# Ciclo i+2
# Ciclo i+3
# Ciclo i+4
# Ciclo i+5
Concettualmente è una tecnica simile a quella presente nel [[multitasking]] cooperativo dei sistemi [[RTOS]], in questi sistemi operativi quando un programma deve attendere un evento volontariamente cede la priorità a un altro programma pronto all'esecuzione.
=== Terminologia ===
Oltre che ''Coarse-grained'' multithreading viene definito ''Block''
=== Costo hardware ===
Il multithreading parte dal presupposto che il passaggio tra thread avvenga in modo rapido, questa tecnica effettua il passaggio in un ciclo di clock. Al fine di ottenere questo il processore deve replicare alcune componenti per i due thread come i [[registro (informatica)|registri]] interni, il [[program counter]] e alcuni registri di stato. Anche gli adattamenti a livello software sono relativamente modesti dato che il sistema operativo deve gestire un numero modesto di thread in esecuzione contemporanea.
=== Esempi ===
Molte famiglie di [[microcontrollore|microcontrollori]] e di processori [[sistema embedded|embedded]] implementano una gestione di più banchi di registri al fine di consentire un veloce [[context switch]] per la gestione degli [[interrupt]]. Questo può essere considerato un tipo multithreading.
* [[Intel]] [[Super-threading]]
* Intel [[Itanium 2]]
== Fine-grained multithreading ==
[[
=== Idea di base ===
Una tipologia di
Per esempio:
# Ciclo i
# Ciclo i+1
# Ciclo i+2
Questa tipologia di
Concettualmente questa tecnica è simile al multitasking preemptive presente in molti sistemi operativi. Questa analogia parte dal presupposto che ogni slot di tempo dei programmi sia posto uguale a un ciclo di clock del processore.
=== Terminologia ===
Questa tecnica di multithreading inizialmente venne chiamata ''barrel processing'' ma attualmente la terminologia moderna definisce questa tecnica come ''pre-
=== Costo hardware ===
In aggiunta alle componenti indicate precedentemente questa tecnica
=== Esempi ===
* Denelcor [[Heterogeneous Element Processor]]
* [[Sun Microsystems]] [[UltraSPARC T1]]
Line 63 ⟶ 73:
* [[Raza Microelectronics Inc]] XLR
== Simultaneous Multi-Threading ==
▲[[
▲===Idea di base ===
=== Idea di base ===
▲[[Immagine:Hyper-threaded CPU.png|thumb|right|Un sistema Simultaneous Multi-Threading schedula piu 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
Per esempio:
Line 75 ⟶ 84:
=== Terminologia ===
Per distinguerlo
=== Costo hardware ===
In aggiunta all'hardware richiesto dal precedente tipo di multithreading, questa tecnica richiede che ogni stadio della pipeline tracci il thread d'appartenenza dell'istruzione e, dato che il processore ha più unità d'esecuzione, vi sono molte istruzioni da tracciare. Inoltre la cache e la TLB
=== Esempi ===
* [[DEC Alpha]] EV8 (non terminato)
* [[Intel]] [[
* [[IBM]] [[POWER5]]
* Power Processing Elements del processore [[Cell (processore)|Cell]]
Line 89 ⟶ 97:
== Ricerca ==
Attualmente la ricerca
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).
Se il multithreading replica tutti i registri visibili a livello software è possibile utilizzare il multithreading per implementare delle [[macchina virtuale|macchine virtuali]]. Ogni thread si troverebbe a gestire una propria macchina virtuale
== Note ==
<references />
== Voci correlate ==
* [[Fork (programmazione)]]
== Collegamenti esterni ==
* {{FOLDOC||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}}
[[Categoria:Microprocessore]]
[[Categoria:Calcolo parallelo]]
[[Categoria:Thread]]
▲{{Portale|Informatica}}
|