Multithreading: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
MahdiBot (discussione | contributi)
m r2.7.1) (Bot: Modifico fa:چندریسمانی
Nessun oggetto della modifica
Riga 3:
[[Immagine:Superthreaded CPU.png|thumb|right|Un sistema Simultaneous Multi-Threading schedula più thread ma ne esegue uno solo per ciclo di clock]]
[[Immagine: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]]
In [[informatica]] il '''multithreading''' indica il supporto [[hardware]] da parte di un [[processore]] di [[esecuzione (informatica)|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 [[programma (informatica)|programmi]] solamente quando questi sono stati sviluppati suddividendo il carico di lavoro su più thread che possono essere eseguiti in [[calcolo parallelo|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 due tecniche sono complementari,: a volte i sistemi multiprocessore implementano anche il multithreading per migliorare le prestazioni complessive del sistema.
 
== 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ù 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.
 
Questo filone di ricerca ha portato anche delle critiche, le principali sono:
*Più thread condividono le stesse risorse come [[CPU cache|cache]] o translation lookaside buffer e quindi possono interferire a vicenda rallentandosi.
*Le prestazioni dei singoli thread non migliorano, ma anzi possono degradare all'aumento dei thread concorrenti.
*Il supporto hardware del multithreading e dei sistemi multiprocessori richiede anche un contributo del [[software]], i programmi e i [[sistema operativo|sistemi operativi]] devono essere adattati per gestire questa nuova possibilità.
 
== Coarse-grained multithreading ==
Line 18 ⟶ 20:
 
Per esempio:
#Ciclo i: l'[[istruzione (informatica)|istruzione]] j del thread A viene caricata
#Ciclo i+1: l'istruzione j+1 del thread A viene caricata
#Ciclo i+2: l'istruzione j+2 del thread A viene caricata, il caricamento provoca un cache miss con corrispondente richiesta nella [[memoria centrale]]
#Ciclo i+3: il processore avvia l'esecuzione del thread B
#Ciclo i+4: l'istruzione k del thread B viene caricata
#Ciclo i+5: l'istruzione k+1 del thread B viene caricata
 
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 ===
Line 31 ⟶ 33:
 
=== 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]]
Line 87 ⟶ 89:
 
== 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).