Una delle sfide inerenti al lavorare con CPU composte da più die è la latenza d’accesso alla memoria. Assistiamo a tale problema sui sistemi multiprocessore e, in margini inferiori, su alcuni dei setup di Intel dalle CPU particolarmente “popolate”. Per metterla in parole semplici, tutto a partire dalle dimensioni fisiche dei core alla lunghezza dell’interconnessione va contro le velocità ottimali di spostamenti nella memoria.
Nel caso di Threadripper, questi effetti sono sia moltiplicati che minimizzati in svariati modi. In ogni processore ci sono due set distinti di memory channel, dove ognuno di questi abbina una coppia di canali con uno dei due die sul package. Mentre questo crea un collegamento veloce di soli 78 ns tra ogni die e il canale “più vicino”, distribuire l’accesso su tutti i canali di memoria può aumentare la latenza fino all’esorbitante numero di 133 ns quando un die dual CCX è costretto a comunicare con i canali più “lontani”.
La ragione di tutto ciò è semplice: i processori Ryzen Threadripper non sono nativamente quad-channels. Piuttosto, AMD ha -per mancanza di una definizione migliore- unito due processori insieme sfruttando l’Infinity Fabric per canalizzare tutte le comunicazioni tra essi. Ciò può causare un notevole aumento della latenza, pertanto un’idea alquanto innovativa è stata implementata: dare all’utente la possibilità di scegliere le modalità di accesso alla memoria.
Distributed Mode
Attraverso il Distributed Mode, il sistema è messo in una configurazione ad Uniform Memory Access, o UMA. UMA significa che gli spostamenti in memoria vengono bilanciati su tutti i canali DRAM, utilizzando l’intero layout dell’architettura quad channel. In essenza, ciò aumenta significativamente la bandwidth disponibile e può beneficiare applicazioni che richiedono un ampio accesso alla memoria come After Effects, Premiere Pro, Blender e 3DS Max.
L’altra faccia della medaglia è che questa configurazione sacrifica la latenza in favore della massima banda passante visto che ognuno dei die cerca di accedere anche ai canali di memoria più distanti. Ecco che quindi entra in gioco il Local Mode nell’equazione di AMD.
Local Mode
Il Local Mode è molto più “subdolo” del Distributed visto che localizza l’accesso alla memoria ai canali che sono fisicamente più vicini ai core che processano il carico di lavoro, posizionando il sistema in una configurazione Non-Uniform Memory Access (NUMA). In molte situazioni in cui Threadripper ha un vantaggio (leggasi: workloads a più thread particolarmente impegnativi) ciò in realtà riduce le performance, visto che abbassa la latenza ma al contempo riduce la banda passante disponibile. Ma c’è un’area chiave dove la configurazione NUMA porta tantissimi benefici: i giochi.
Secondo AMD, la loro ricerca indica che molti titoli beneficiano più di una latenza ridotta che di maggiore bandwidth. Ma non finisce qui, AMD, durante i test interni, ha scoperto qualcos’altro:
Inoltre, il Local Mode (NUMA) suggerisce allo scheduler del sistema operativo che un’applicazione che non utilizza molti thread dovrebbe rimanere in esecuzione su un solo die e preferire la memoria connessa più vicina finché riempita (a tal punto c’è un travaso nella successiva porzione di memoria). Tale residenza in un die minimizza la possibilità che i thread di un gioco (come la fisica, l’IA o il suono) con elevati requisiti di sincronizzazione vengano divisi tra i vari die, generando latenze maggiori. Questo, in aggiunta a latenze inferiori, aumenta specificamente le prestazioni nei giochi.
Sembra quindi che lo scheduler di Windows 10 tratti il setup NUMA come un’entità indissolubile invece che una sezione divisa di due nodi di calcolo distinti. Come risultato il processore potrebbe (in teoria) gestire meglio i carichi di lavoro in-game. Se poi ciò si traduce o meno in realtà, lo scopriremo nelle pagine dei benchmark.
Discussione su post