Multithreading: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
mNessun oggetto della modifica |
|||
Riga 36:
==Fine-grained multithreading==
== Idea di base ==
Una tipologia di mutithreading molti spinto prevede che il processore scambi il thread in esecuzione a ogni ciclo di clock.
Line 50 ⟶ 48:
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.
Questa tecnica di multithreading inizialmente venne chiamata ''barrel processing'' ma attualmente la terminologia moderna definisce questa tecnica come ''pre-empiteve'' o ''interlaved'' o ''time-sliced'' o ''fine-grained'' multithreading.
===
In aggiunta alle componenti indicate precedentemente questa tecnica a di multithreading richiede delle componenti aggiuntive che assegnino a ogni istruzione in esecuzione un'ID che ne permetta di identificare il thread proprietario. Questa tecnica richiede che lo scambio tra i thread avvenga senza senza cicli di clock di stallo e quindi richiedono hardware più sofisticato inoltre la presenza di molti thread in esecuzione in parallelo richiede generalmente cache e TLB più capienti al fine di poter servire i vari thread in modo efficiente.
===Esempi ===
* Denelcor [[Heterogeneous Element Processor]]
* [[Sun Microsystems]] [[UltraSPARC T1]]
* [[Lexra]] NetVortex
* [[
* [[Raza Microelectronics Inc]] XLR
===Idea 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 signolo 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.
Per esempio:
# Ciclo i: istruzione j e j+1 dal thread A, istruzione k dal thread B, tutte eseguite in simultanea
# Ciclo i+1: istruzione j+2 dal thread A, istruzione k+1 dal thread B, istruzione m dal thread C, eseguite in simultanea
# Ciclo i+2: istruzione j+3 dal thread A, istruzione m+1 e m+2 dal thread C, eseguite in simultanea.
===
===
In aggiunta all'hardware richiesto dal precedente 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 deve essere molto ampia per poter gestire un numero di thread molto elevato che eseguiendi più istruzioni in parallelo fanno un uso molto intenso delle
risorse suddette.
===
* [[DEC Alpha]] EV8 (
* [[Intel]] [[Hyperthreading]]
* [[IBM]] [[POWER5]]
* Power Processing Elements
* [[Sun Microsystems]] [[UltraSPARC T2]]
|