HT non è un SMT, ma un consequenziatore di thread.
non processi 2 threads simultaneamente per ogni clock, ma ne fai, al massimo, 2 per per quanti clock sono necessari per eseguire l'intera pipeline, per ciclo di pipeline.
e enormemente diverso, sopratutto quando hai threads che riempono per intero una pipeline (e quindi non hai spazio, nello stesso ciclo di pipeline, di accodarne un'altro).
SMT, in queste implementazioni, possono eseguire un minimo di 2 threads completi e che occuperebbero per intero le pipeline a più threads a ciclo (utilizzando gli stadi vuoti delle pipeline).
un thread riempe la pipeline quando il dato ottenuto nel primo stadio e' ancora necessario per finire l'esecuzione dello stesso thread utilizzandolo congiuntamente anche nell'ultimo stadio, e quindi impossibile da cancellare.
per essere piu' chiari:
http://cfile8.uf.tistory.com/image/2...4D9A73811151FD
http://image.slidesharecdn.com/10-in...?cb=1335624867
questo e' HT nella sua prima implementazione.
oggi invece hai duplicata l'intera catena, e congiuntamente hai la replica dei primi due logici per ogni ALU, permettendoti di operare anche HT.
HT era il modo di massimizzare le pipeline, aumentando cosi' il rendimento;
SMT invece utilizza la forza bruta (raddoppio delle risorse) per massimizzare l'IPC, che diversamente non avrebbe modo di essere incrementato su una ISA ormai ben radicata ed esplorata, limitata da entrambe le parti da brevetti.