L'hyperthreading è un'alternativa più economica e più lenta all'avere dual core
Il Manuale Intel Volume 3 sistema di programmazione - Guida 325384-056US settembre 2015 8.7 "Intel Hyper-Threading architettura" descrive brevemente HT. Contiene il seguente diagramma:
TODO è più lento di quanto percento in media nelle applicazioni reali?
L'hyperthreading è possibile perché i moderni core di singole CPU eseguono già più istruzioni contemporaneamente con la pipeline di istruzioni https://en.wikipedia.org/wiki/Instruction_pipelining
La pipeline di istruzioni è una separazione di funzioni all'interno di un singolo core per garantire che ogni parte del circuito venga utilizzata in qualsiasi momento: lettura della memoria, istruzioni di decodifica, istruzioni di esecuzione, ecc.
L'hyperthreading separa ulteriormente le funzioni utilizzando:
un unico backend, che esegue effettivamente le istruzioni con la sua pipeline.
Il dual core ha due backend, il che spiega i maggiori costi e prestazioni.
due front-end, che accettano due flussi di istruzioni e li ordinano in modo da massimizzare l'utilizzo delle tubazioni del singolo backend evitando i pericoli .
Dual core avrebbe anche 2 front-end, uno per ogni backend.
Ci sono casi limite in cui il riordino delle istruzioni non produce alcun vantaggio, rendendo inutile l'hyperthreading. Ma produce un miglioramento significativo in media.
Due hyperthread in un singolo core condividono ulteriori livelli di cache (TODO quanti? L1?) Rispetto a due core diversi, che condividono solo L3, vedi:
L'interfaccia che ogni hyperthread espone al sistema operativo è simile a quella di un core effettivo ed entrambi possono essere controllati separatamente. Così cat /proc/cpuinfo
mi mostra 4 processori, anche se ho solo 2 core con 2 hyperthreads ciascuno.
I sistemi operativi possono tuttavia trarre vantaggio dal sapere quali hyperthreads si trovano sullo stesso core per eseguire più thread di un determinato programma su un singolo core, il che potrebbe migliorare l'utilizzo della cache.
Questo video di LinusTechTips contiene una spiegazione non tecnica leggera: https://www.youtube.com/watch?v=wnS50lJicXc