Domanda

I registri SSE sono condivisi o duplicati tra processori logici (hyper threading)?Posso aspettarmi dalla parallelizzazione lo stesso tipo di accelerazione per un programma pesante SSE come per un programma normale (Intel dichiara il 30% per i processori con hyper threading)?

È stato utile?

Soluzione

Non mi è chiaro dalla documentazione di Intel se i processori Hyperthreading condividano il file di registro tra thread o ne abbiano due diversi (immagino che siano in realtà distinti, poiché altrimenti il ​​tempo di cambio di contesto tra thread HT sarebbe piuttosto alto, ma questo è puramente un'ipotesi).

Per quanto riguarda l'accelerazione, dipenderà dal mix di istruzioni e dalla pianificazione.Ricorda che una CPU HT non ha risorse di esecuzione aggiuntive (ALU, unità di caricamento/archiviazione, ecc.), il miglioramento delle prestazioni è dovuto a un migliore utilizzo di tali risorse, poiché il codice tipico, specialmente su un processore moderno, spende una quantità ragionevole di tempo bloccato in attesa del completamento del caricamento della memoria e degli archivi prima che l'esecuzione possa continuare.HT consente a questi carichi e archivi di essere interlacciati in modo che un thread si blocchi durante una lettura, l'altro possa essere attivato e iniziare a utilizzare le risorse di esecuzione che in precedenza erano rimaste inattive.

Immagino che il tipo di aumento delle prestazioni che vedresti con il multithreading di un programma SSE dipenderà dal rapporto tra operazioni di memoria e operazioni aritmetiche.Se, ad esempio, il tuo programma SSE carica 4 registri SSE dalla memoria, esegue 10.000 operazioni SSE su di essi e quindi riscrive i 4 registri, non è probabile che vedrai un grande vantaggio dalla capacità di HT di sovrapporre gli accessi alla memoria perché Il 99% del tempo di esecuzione dei tuoi programmi verrà speso nelle ALU SIMD e non nell'accesso alla memoria.

D'altra parte, se il tuo programma è molto pesante in termini di calcolo, il multithreading del tuo programma potrebbe migliorare notevolmente le prestazioni su processori multicore e potrebbe darti un miglioramento molto migliore del 30% poiché in quel caso il tuo codice potrebbe accedere a tutte le risorse di esecuzione di più core contemporaneamente.

Altri suggerimenti

Sono logicamente duplicati - ogni thread prende il proprio stato. Fisicamente, essi possono essere condivisi -. Dipende dalla vostra implementazione hyperthreading

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top