Uno dei punti deboli per le CPU non-Intel in ambiente Windows è stato lo scheduler del sistema operativo, con le relative ottimizzazioni e gestione.
Abbiamo infatti constatato come Windows non sia particolarmente cordiale con μArch diverse da quelle Intel, come il vecchio design di AMD “Bulldozer”, la CPU ibrida Qualcomm con Windows su Snapdragon, e più recentemente con l’utilizzo di processori multi-die come Threadripper, che introduce ulteriore latenza in ambienti di calcolo lato consumer.
Ovviamente AMD lavora a stretto contatto con Microsoft quando si tratta di identificare un tipo di core “diverso dal tradizionale” in un nuovo processore, e le due aziende hanno lavorato sodo in modo da assicurare che l’assegnazione dei thread e della memoria, laddove non ci sia un programma a gestire le cose, si svolga nel migliore dei modi. Con l’update 19H1 di Windows, conosciuto come “May 2019 update”, alcune funzioni e ottimizzazioni sono state messe in atto per tirar fuori fino all’ultima goccia di performance da Zen 2 e i layout delle CPU Ryzen 3000.
Ci sono due tipi di ottimizzazioni su questo fronte, entrambe abbastanza semplici da spiegare:
Raggruppamento dei thread
La prima è l’assegnazione dei thread: quando un processore ha diversi “gruppi” di core, ci sono vari modi in cui i thread possono essere assegnati, ognuno coi suoi pro e contro. I due estremi per l’assegnazione dei thread sono il raggruppamento dei thread e l’espansione dei thread.
Il raggruppamento dei thread avviene quando i nuovi thread vengono allocati nei core accanto a quelli che hanno già thread in esecuzione. Ciò tiene i thread vicini, per una migliore comunicazione inter-thread, ma ciò porta alla creazione di regioni ad alta densità di potenza, specie dove ci sono tanti core su un processore ma solo un paio sono attivi.
L’espansione dei thread avviene invece quando i nuovi thread vengono allocati nei core più lontani possibili, e nel caso di AMD, ciò potrebbe significare che un thread seguente verrebbe allocato su un chiplet diverso, o su un CCX diverso, ovvero quanto più lontano possibile.
Ciò permette alla CPU di mantenere prestazioni elevate, evitando di avere zone ad alta densità di potenza, e permettendo di mantenere le migliori prestazioni in boost su un più vasto range di core.
Il pericolo nell’utilizzare questa tecnica compare quando un programma usa più di un thread ed essi finiscono per essere allocati su lati diversi della CPU. Nel caso di Threadripper, addirittura, ciò può significare che un thread viene allocato su die distanti e che subiscono forti penalità in termini di latenza verso la memoria, causando uno sbilanciamento delle prestazioni tra i due thread, anche se tale distanza permettesse di avere una frequenza di boost maggiore.
Visto che i programmi moderni funzionano, specie i videogiochi, di solito creano più thread invece di gestire tutti i calcoli su un singolo thread, e che questi thread hanno bisogno di comunicare, AMD ha effettuato la transizione da una gestione ibrida ad espansione dei thread ad un sistema a raggruppamento di thread. Ciò significa che verrà riempito prima un CCX, per poi iniziare ad allocare i nuovi thread nel CCX successivo. AMD crede che nonostante si venga a creare un’area ad alta densità di potenza (e quindi di calore), insieme a parti della CPU completamente inattive, ciò fornisce comunque un incremento delle prestazioni.
Per le CPU Matisse, ciò dovrebbe permettere un boost importante in situazioni con un numero limitato di threads, soprattutto nei giochi. In particolare, AMD ha dimostrato tale spiegazione mostrando come Rocket League, in Full HD con il low preset, ha riportato un aumento degli FPS del 15%.
Gestione dei clock
Già con la 6° generazione di CPU, Intel ha introdotto la tecnologia Speed Shift, che permette alle CPU di saltare da un Pstate all’altro, e di passare dallo stato di idle allo stato di load molto rapidamente, tra i 40 e i 100 ms, fino a scendere a 15 ms con la 7° generazione. Come? Molto semplicemente, la gestione dei Pstates viene assegnata alla CPU, e quindi il sistema operativo non deve intervenire, riducendo i tempi di reazione a seconda delle richieste effettuate. Con Zen 2, AMD fa praticamente la stessa cosa.
AMD ha già abbastanza granularità negli step di frequenza rispetto a Intel, specie considerando gli step di 25 MHz contro quelli da 100 MHz della concorrente, ma accelerare il passaggio a clock più alti aiuta AMD quando si tratta di carichi di lavoro con dei picchi di carico, come WebXPRT, benchmark browser favorito da Intel per questo genere di cose.
Secondo AMD, grazie all’update di Windows 19H1 “May 2019 Update” e all’aggiornamento dei BIOS delle schede di generazione precedente, con Zen 2 si passa da circa 30 millisecondi per effettuare questi “passaggi” di frequenza a solo 1-2 millisecondi. Ciò dovrebbe, sulla carta, rendere l’esperienza ben più reattiva di quanto si riscontra su Intel.
Il nome che AMD dà a quest’implementazione si chiama CPPC2 (Collaborative Power Performance Control 2), e tramite questo sistema AMD dichiara di aumentare la velocità di lancio dei software del 6%, come riscontrato dal test di PCMark10 dedicato.
Sicurezza avanzata per Zen 2
Un altro aspetto fondamentale di Zen 2, per AMD, è l’approccio ai requisiti di sicurezza avanzata dei processori moderni. Come avrete sicuramente letto negli ultimi mesi, una sfilza di exploit rivelati non influenza minimamente i processori AMD, principalmente per il modo in cui AMD gestisce gli indirizzi virtuali, procedura che da sempre, su Zen, richiede una serie di controlli addizionali, prima ancora che ce ne fosse la necessità. Ciononostante, ci sono sì alcuni exploit che intaccano anche AMD, ma con Zen 2 ci sono implementazioni sul fronte Hardware e Firmware che bloccano completamente tali falle.
Il cambiamento principale è con Spectre e Spectre V4 (questultimo conosciuto anche come Speculative Store Bypass), dove AMD adesso è protetta proprio a livello Hardware. In questi giorni si parla anche di un exploit definito SWAPGS, ma AMD ne è immune, ovviamente.
Discussione su post