Benchmark ed STM sui Ryzen.
Inviato: domenica 1 dicembre 2019, 21:29
Anche in questo periodo l'insonnia si fa sentire e dopo una serata tra amici non riuscivo comunque a prendere sonno.
ho cominciato quindi a pensare a questo argomento.
I ryzen stanno andando forte, ma saranno giustamente supportati, anche oggi, dall'OS e dai giochi? ma soprattutto, saranno ben testati?
la particolare architettura di Zen e l'implementazione sui processori comporta una complicazione leggermente maggiore nel valutarli, nell'usarli e nell'essere sfruttati.
Purtroppo, per ora, l'unico esemplare di ryzen che ho in mio possesso è un 3400G (due, in verità... uno sul portatile).
La domanda che mi sono posto è se la concorrenzialità su alcune caratteristiche della CPU possa compromettere le prestazioni.
i Ryzen sono suddivisi a più stadi: una CPU è divisa in CCX, ogniuno di questi CCX è formato da 4 core, la L3 associata direttamente a questi quattro core e indirettamente anche alla L3 degli altri CCX; questi CCX sono suddivisi, a loro volta, in 2 moduli da 2 core "fisici", con la L2 abbinata al singolo core, sul quale ha accesso anche l'altro core del modulo in maniera indiretta e ancora con più passaggi un core di un'altro modulo.
a questo si aggiunge l'SMT, ossia quella che è descritta come la funzione che permette di sfruttare le risorse non sfruttate di un core con altri thread operati in simultanea; descrizione molto semplicistica, visto che "le risorse" non sfruttate di questi core sono intere pipeline di calcolo fatte e finite.
Tutte queste organizzazioni sono collegate da bus ed è qui che avviene la "concorrenzialità" delle risorse, ossia proprio sullo sfruttamento dei bus di comunicazione.
nella pratica mi sono chiesto quanta differenza c'è nell'usare 2 threads contemporaneamente sul singolo core fisico (ossia sui 2 core logici di un core fisico) e invece su 2 core fisici differenti.
se i 2 threads usanolo stesso core useranno anche gli stessi bus dati e quindi subiranno parte di questa convivenza?
da questa domanda sono partite diverse altre.
windows è realmente pronto a gestire i flussi a seconda del tipo, qualità e quantità di threads che deve eseguire, o li alloca a "come capita capita"?
e se pur avendo una gestione oculata delle risosre, tanto da poter sistemare i threads sulla migliore risorsa disponibile in quel momento, quando questi (threads ad elevata richiesta di risorse) superano il conteggio dei core fisici, come fa a decidere quali usare ed è sempre giusto quello che fa?
oggi ho fatto alcuni test.
per prima cosa ho usato un benchmark che potesse saturare il computo di uno o più core, quello integrato in CPU-Z;
ho usato più di un'istanza in concomitanza e mi sono avvalso del settaggio dell'affinita con i core da gestione risorse.
Come nota posso dire che Ryzen master mi indica il quarto core come "prediletto".
3400G, settaggio a default, senza PBO abilitato;
benchmark CPU-Z usato con l'esecuzione di 8 threads;
affinità di CPUZ.exe solo sul core0;
il risultato del benchmark ha dato 465-470 punti a 3.95-4.00Ghz massimo.
per essere sicuro ho testato tutti i core logici nella stessa modalità, aspettando che le temperature si riportassero a valori normali.
core0; 3.95Ghz; 465 punti
core1; 4.00Ghz; 470 punti
core2; 3.80Ghz; 455 punti
core3; 3.80Ghz; 455 punti
core4; 3.80Ghz; 460 punti
core5; 3.80Ghz; 455 punti
core6; 3.80Ghz; 455 punti
core7; 3.80Ghz; 460 punti
già qui vediamo che il bios nomina core0/core1 il 4° core fisico della CPU, quindi che non c'è relazione di nomenclatura dei core tra ryzen master e la gestione dei core di windows.
ora andiamo alle questioni interessanti, ossia usare 2 istanze di CPU-Z, settate con 8 threads, e ogniuna di queste istanze affiliate a 2 core distinti.
usando core0 + core1 i risultati sono:
core0 320 punti
core1 325 punti
frequenza indicata su task manager di 4.06Ghz (non ho voluto guardare le frequenze in dettaglio, core per core, con HWmonitor... semmai lo farò in seguito.
(nota: il PC completamente piantato, con evidenti lag del mouse).
usando invece core0 + core2:
core0 470 punti
core2 465 punti
frequenza di 4.06Ghz.
(PC piantato con evidenti lag del mouse, almeno finchè entrambe le sessioni di CPU-Z sono attive).
più tardi rifarò i test in modo più compreto, usando anche hwmonitor per vedere le frequenze di tutti i core mentre eseguo i test.
il secondo esperimento è stato di usare 4 core all'unisono con una istanza di CPU-Z attiva.
core0 1250 punti 4.00Ghz
core1
core2
core3
core0 1545 punti con la frequenza che oscillava tra 4.01 e 4.03Ghz.
core1
core2
core4
core0 1800 punti con frequenza che oscillava tra 4.03 e 4.04ghz.
core2
core4
core6
usato senza affinità dei core, ma su tutti i core il risultato è stato di 2400 punti con la CPU a 4.03Ghz.
più "simpatico" è stato testare il sistema su un benchmark di un gioco.
visto che ho una scarsissima 570 pulse, sono andato a ripescare un gioco vecchio, cercando di metterlo al minimo possibile delle richieste grafiche.
la scelta è andata sul vecchio Tomb Raider, in finestra a 1280x720, settaggi preset minimo e senza vsync attivo.
questi i risultati:
affinità core 0+1
min 128
max 246
medio 186.2
affinità core 0+2
min 172
max 304
medio 236.4
affinità core 0+1+2+3
min 264
max 436
medio 356.2
affinità core 0+2+4+6
min 326
max 496
medio 417.3
affinità core 0+1+2+3+4+5+6+7 (tutti)
min 342
max 502
medio 444.1
affinità core 0+2+3+4+5+6+7 (tutti meno il core1)
min 345
max 512
medio 448.4
l'ultimo test è il più significativo, perchè evidenzia come scaricare il core SMT associato al core fisico che regge il megathread del gioco lo libera nell'uso delle risorse, anche se questo core, con questi settaggi, non è mai andato, mai, al 100% d'uso, ma si è sempre mantenuto tra i 60 e l'80%.
come si può notare sugli altri risultati la differenza a pari numero di risorse sfruttate, ma a differente qualità di queste, è considerevole, ma in questo ultimo test abbiamo usato un'ammontare di potenza computazionale addirittura inferiore a quello dell'uso di tutti i core, eppure i risultati sono stati maggiori.
non immagino cosa possa succedere quando mettiamo in gioco anche i CCX diversi (il 3400G ne ha uno solo), o addirittura die differenti come nel 3900x e 3950x e quando prendiamo in esame le diverse tipologie di giochi, se focalizzati su pochi o tenti threads.
rifarò i test settando 800x600 o cercando qualche settaggio del gioco che mandi al 100% il megathread (abilito insomma l'AA per vedere se influisce maggiormente sulla CPU), o con qualche altro benchmark.
questo test evidenzia come l'uso di una GPU decisamente performante, ma usata a settaggi che rendono la CPU il vero collo di bottiglia, possano cambiare in modo sensibile i risultati dei test sui ryzen.
EDIT:
ho eseguito i test a 800x600, preset minimo con i seguenti risultati (solo sugli ultimi due setting)
affinità core: tutti
min 324
max 506
medio 453.1
il core0 oscillava tra 95% di massimo e 70% di minimo
affinità core: tutti meno core1
min 348
max 516
medio 457.2
il core0 questa volta ha toccato 100% per diversi secondi, oscillando tra 100 di massimo e 75% di minimo.
PS:
i valori numerici con il preset di prima possono essere differenti, perchè probabilmente è stato toccato qualche paramentro dell'overclock della scheda; purtroppo i driver hanno "sentito" che avevo istallato tomb raider e hanno creato un preset a parte, ponendolo a default e no usando quello che uso di solito che è leggermente più veloce.
comunque la rilevanza è sulla stessa sessione di test e preciso che il test con tutti i core associati è stato eseguito per primo rispetto a quello con il core1 non associato.
ho cominciato quindi a pensare a questo argomento.
I ryzen stanno andando forte, ma saranno giustamente supportati, anche oggi, dall'OS e dai giochi? ma soprattutto, saranno ben testati?
la particolare architettura di Zen e l'implementazione sui processori comporta una complicazione leggermente maggiore nel valutarli, nell'usarli e nell'essere sfruttati.
Purtroppo, per ora, l'unico esemplare di ryzen che ho in mio possesso è un 3400G (due, in verità... uno sul portatile).
La domanda che mi sono posto è se la concorrenzialità su alcune caratteristiche della CPU possa compromettere le prestazioni.
i Ryzen sono suddivisi a più stadi: una CPU è divisa in CCX, ogniuno di questi CCX è formato da 4 core, la L3 associata direttamente a questi quattro core e indirettamente anche alla L3 degli altri CCX; questi CCX sono suddivisi, a loro volta, in 2 moduli da 2 core "fisici", con la L2 abbinata al singolo core, sul quale ha accesso anche l'altro core del modulo in maniera indiretta e ancora con più passaggi un core di un'altro modulo.
a questo si aggiunge l'SMT, ossia quella che è descritta come la funzione che permette di sfruttare le risorse non sfruttate di un core con altri thread operati in simultanea; descrizione molto semplicistica, visto che "le risorse" non sfruttate di questi core sono intere pipeline di calcolo fatte e finite.
Tutte queste organizzazioni sono collegate da bus ed è qui che avviene la "concorrenzialità" delle risorse, ossia proprio sullo sfruttamento dei bus di comunicazione.
nella pratica mi sono chiesto quanta differenza c'è nell'usare 2 threads contemporaneamente sul singolo core fisico (ossia sui 2 core logici di un core fisico) e invece su 2 core fisici differenti.
se i 2 threads usanolo stesso core useranno anche gli stessi bus dati e quindi subiranno parte di questa convivenza?
da questa domanda sono partite diverse altre.
windows è realmente pronto a gestire i flussi a seconda del tipo, qualità e quantità di threads che deve eseguire, o li alloca a "come capita capita"?
e se pur avendo una gestione oculata delle risosre, tanto da poter sistemare i threads sulla migliore risorsa disponibile in quel momento, quando questi (threads ad elevata richiesta di risorse) superano il conteggio dei core fisici, come fa a decidere quali usare ed è sempre giusto quello che fa?
oggi ho fatto alcuni test.
per prima cosa ho usato un benchmark che potesse saturare il computo di uno o più core, quello integrato in CPU-Z;
ho usato più di un'istanza in concomitanza e mi sono avvalso del settaggio dell'affinita con i core da gestione risorse.
Come nota posso dire che Ryzen master mi indica il quarto core come "prediletto".
3400G, settaggio a default, senza PBO abilitato;
benchmark CPU-Z usato con l'esecuzione di 8 threads;
affinità di CPUZ.exe solo sul core0;
il risultato del benchmark ha dato 465-470 punti a 3.95-4.00Ghz massimo.
per essere sicuro ho testato tutti i core logici nella stessa modalità, aspettando che le temperature si riportassero a valori normali.
core0; 3.95Ghz; 465 punti
core1; 4.00Ghz; 470 punti
core2; 3.80Ghz; 455 punti
core3; 3.80Ghz; 455 punti
core4; 3.80Ghz; 460 punti
core5; 3.80Ghz; 455 punti
core6; 3.80Ghz; 455 punti
core7; 3.80Ghz; 460 punti
già qui vediamo che il bios nomina core0/core1 il 4° core fisico della CPU, quindi che non c'è relazione di nomenclatura dei core tra ryzen master e la gestione dei core di windows.
ora andiamo alle questioni interessanti, ossia usare 2 istanze di CPU-Z, settate con 8 threads, e ogniuna di queste istanze affiliate a 2 core distinti.
usando core0 + core1 i risultati sono:
core0 320 punti
core1 325 punti
frequenza indicata su task manager di 4.06Ghz (non ho voluto guardare le frequenze in dettaglio, core per core, con HWmonitor... semmai lo farò in seguito.
(nota: il PC completamente piantato, con evidenti lag del mouse).
usando invece core0 + core2:
core0 470 punti
core2 465 punti
frequenza di 4.06Ghz.
(PC piantato con evidenti lag del mouse, almeno finchè entrambe le sessioni di CPU-Z sono attive).
più tardi rifarò i test in modo più compreto, usando anche hwmonitor per vedere le frequenze di tutti i core mentre eseguo i test.
il secondo esperimento è stato di usare 4 core all'unisono con una istanza di CPU-Z attiva.
core0 1250 punti 4.00Ghz
core1
core2
core3
core0 1545 punti con la frequenza che oscillava tra 4.01 e 4.03Ghz.
core1
core2
core4
core0 1800 punti con frequenza che oscillava tra 4.03 e 4.04ghz.
core2
core4
core6
usato senza affinità dei core, ma su tutti i core il risultato è stato di 2400 punti con la CPU a 4.03Ghz.
più "simpatico" è stato testare il sistema su un benchmark di un gioco.
visto che ho una scarsissima 570 pulse, sono andato a ripescare un gioco vecchio, cercando di metterlo al minimo possibile delle richieste grafiche.
la scelta è andata sul vecchio Tomb Raider, in finestra a 1280x720, settaggi preset minimo e senza vsync attivo.
questi i risultati:
affinità core 0+1
min 128
max 246
medio 186.2
affinità core 0+2
min 172
max 304
medio 236.4
affinità core 0+1+2+3
min 264
max 436
medio 356.2
affinità core 0+2+4+6
min 326
max 496
medio 417.3
affinità core 0+1+2+3+4+5+6+7 (tutti)
min 342
max 502
medio 444.1
affinità core 0+2+3+4+5+6+7 (tutti meno il core1)
min 345
max 512
medio 448.4
l'ultimo test è il più significativo, perchè evidenzia come scaricare il core SMT associato al core fisico che regge il megathread del gioco lo libera nell'uso delle risorse, anche se questo core, con questi settaggi, non è mai andato, mai, al 100% d'uso, ma si è sempre mantenuto tra i 60 e l'80%.
come si può notare sugli altri risultati la differenza a pari numero di risorse sfruttate, ma a differente qualità di queste, è considerevole, ma in questo ultimo test abbiamo usato un'ammontare di potenza computazionale addirittura inferiore a quello dell'uso di tutti i core, eppure i risultati sono stati maggiori.
non immagino cosa possa succedere quando mettiamo in gioco anche i CCX diversi (il 3400G ne ha uno solo), o addirittura die differenti come nel 3900x e 3950x e quando prendiamo in esame le diverse tipologie di giochi, se focalizzati su pochi o tenti threads.
rifarò i test settando 800x600 o cercando qualche settaggio del gioco che mandi al 100% il megathread (abilito insomma l'AA per vedere se influisce maggiormente sulla CPU), o con qualche altro benchmark.
questo test evidenzia come l'uso di una GPU decisamente performante, ma usata a settaggi che rendono la CPU il vero collo di bottiglia, possano cambiare in modo sensibile i risultati dei test sui ryzen.
EDIT:
ho eseguito i test a 800x600, preset minimo con i seguenti risultati (solo sugli ultimi due setting)
affinità core: tutti
min 324
max 506
medio 453.1
il core0 oscillava tra 95% di massimo e 70% di minimo
affinità core: tutti meno core1
min 348
max 516
medio 457.2
il core0 questa volta ha toccato 100% per diversi secondi, oscillando tra 100 di massimo e 75% di minimo.
PS:
i valori numerici con il preset di prima possono essere differenti, perchè probabilmente è stato toccato qualche paramentro dell'overclock della scheda; purtroppo i driver hanno "sentito" che avevo istallato tomb raider e hanno creato un preset a parte, ponendolo a default e no usando quello che uso di solito che è leggermente più veloce.
comunque la rilevanza è sulla stessa sessione di test e preciso che il test con tutti i core associati è stato eseguito per primo rispetto a quello con il core1 non associato.