Ryzen: Hybrid Thread Expansion vs. Thread Grouping
- Fottemberg
- Messaggi: 19412
- Iscritto il: martedì 29 novembre 2011, 22:52
Re: Ryzen: Hybrid Thread Expansion vs. Thread Grouping
L'SMT verrebbe utilizzato per gestire i Thread in stand-by, oppure i Thread meno pesanti.
PC: CoolerMaster MasterBox Q300P, AMD Ryzen 7 5800X, Thermalright Peerless Assassin 120 SE, GIGABYTE B550M AORUS ELITE, 2x32GB Patriot Viper DDR4-3600, Asus Dual RX6650XT 8GB, SSD Toshiba RC500 512GB, SSD Lexar NM790 2TB, CoolerMaster V650 Gold, Windows 11 Home
- ermanno
- Messaggi: 330
- Iscritto il: sabato 30 maggio 2015, 15:44
Re: Ryzen: Hybrid Thread Expansion vs. Thread Grouping
Quindi un thread per core, così le prestazioni dovrebbero essere massime.
Grazie per la risposta.
Grazie per la risposta.
- Alessio89
- Messaggi: 8097
- Iscritto il: martedì 29 novembre 2011, 23:47
Re: Ryzen: Hybrid Thread Expansion vs. Thread Grouping
Non esiste una mappatura fissa fra core logici e priorità nell'SMT. L'SMT assegna ad un secondo stack pointer le parti della pipeline non utilizzate dallo stack in uso. Nello stesso task manager disabilitare se si vuole impedire ad un processo di sfruttare l'SMT bisogna disabilitare l'affinità ad un core logico ogni due, ma l'ordine che si sceglie è del tutto indifferente. L'SMT però da vantaggi per lo più quando dal secondo thread si hanno accessi a risorse condivise o a dimensione inferiore, in modo da non effettuare troppi flush nella cache e da minimizzare quindi i cache miss e gli stalli. L'implementazione AMD è più efficiente di quella di Intel principalmente per una pipeline leggermente più lunga (ma non mostruosamente lunga come fece intel con certi Pentium 4) e di sistema di branch-prediction ottimizzato per questo (che a loro volta sono il motivo, almeno in parte, delle prestazioni in single thread leggermente meno efficienti della controparte).
I thread in stand-by sono appunto in pausa per definizione, pertanto non sono coinvolti. I thread con carico di lavoro meno pesanti invece vanno assegnati ad hoc da chi sviluppa il software tramite la lettura delle maschere di affinità che ritornano le chiamate al CPUID (e sono una cosa non standard, pertanto va sempre tenuta in considerazione una configurazione di riserva "universale" che funzioni comunque su ogni architettura). In questo senso lo scheduler del sistema operativo può fare poco o nulla. L'unica cosa "saggia" con questa architettura è cercare di mantenere i thread attivi di un processo sul minor numero possibile di CCD, indipendentemente che li faccia roteare ogni tot (cosa che presumo avvenga ancora, o almeno lo spero) per dissipare meglio il calore prodotto o meno.
I thread in stand-by sono appunto in pausa per definizione, pertanto non sono coinvolti. I thread con carico di lavoro meno pesanti invece vanno assegnati ad hoc da chi sviluppa il software tramite la lettura delle maschere di affinità che ritornano le chiamate al CPUID (e sono una cosa non standard, pertanto va sempre tenuta in considerazione una configurazione di riserva "universale" che funzioni comunque su ogni architettura). In questo senso lo scheduler del sistema operativo può fare poco o nulla. L'unica cosa "saggia" con questa architettura è cercare di mantenere i thread attivi di un processo sul minor numero possibile di CCD, indipendentemente che li faccia roteare ogni tot (cosa che presumo avvenga ancora, o almeno lo spero) per dissipare meglio il calore prodotto o meno.