Ad esempio, l'aritmetica a virgola mobile ha spesso un throughput elevato, ma anche una latenza elevata. Ad esempio, potresti essere in grado di avviare due moltiplicazioni ogni ciclo, ma potrebbero essere necessari cinque cicli fino a quando il risultato di una moltiplicazione è disponibile. Il primo è chiamato throughput (due per ciclo), il secondo è latenza.
Se si eseguono i calcoli in modo che un'operazione dipenda dalla precedente, è possibile che si verifichi un limite di latenza. Supponi di calcolare (x0 + y0) * (x1 + y1) * (x2 + y2) * ... Se fai questo in modo ingenuo, ogni moltiplicazione può iniziare solo 5 cicli dopo il precedente, quindi finisci con 0,2 moltiplicazioni e 0,2 aggiunte per ciclo anche se il processore potrebbe fare molto più lavoro per ciclo. Questo è il codice che è legato alla latenza.
L'hyperthreading è molto utile per il codice rilegato a latenza, perché è molto semplice per il processore gestire due thread con latenza alla stessa velocità di uno. Se il tuo codice è limitato dal throughput, l'hyper-threading non aiuta un bit. In pratica, peggiore è il codice, maggiore è l'aiuto derivante dall'hyper threading.