Specifikationer för AMD Ryzen 5 3500 skymtas – sex kärnor utan flertrådsteknik

Permalänk
Datavetare
Skrivet av SAFA:

La upp en liten mek-vänligare version här:

https://www.dropbox.com/s/f25o0matinal4t5/mzb-test.tar.gz?dl=...

La även till ett program för att logga klockfrekvens under körningen (det är varmare nu) och det visar sig att processorn klockar ner mer med två trådar aktiva än fyra.
Lite data från en körning på en Intel(R) Core(TM) i7-6600U CPU @ 2.60GHz finns med.

Rätt coola fall du hittat

Insåg direkt vad en absolut kritisk skillnad var i det du körde och gmbench: ditt fall kör ju flyttal med godtycklig precision, det är verkligen en nisch av en nisch! Är medveten om att sådana fall finns, men då prestanda inte riktigt är någon höjdare om man inte kör med HW-stöd för flyttal är det extremt sällan det används. I princip alla problem kan omformuleras så man i stället kan hantera det som matriser.

Kan nu reproducera vad du ser, d.v.s. för vissa bitlängder (200 bitar i ditt exempel, zoom 180 som använder sig av 200 bitar) träffar ett väldigt specifikt fall i Intels CPU. Ett fall som väldigt bra belyser vad jag nämnde ovan: man kan absolut inte stirra sig blid på skalningen av SMT för att avgöra om den är "bra" eller ej.

Problemet (om man nu på något sätt ska kallad det så) är att Skylake får en totalt brutal IPC i enkeltrådfallet. perf-stat rapporterar IPC på 3,54 vilket är det högsta jag någonsin sett. Redan när bara en CPU-tråd används börjar man alltså få front-end som en rejäl flaskhals och det är förklaringen till varför SMT överhuvudtaget inte kan ge något. Man får en svag försämring i total effekt.

Just att front-end är rejält rödmarkerad som flaskhals i perf-stat pekar också på att "hot-path" är något för stor att få plats i mikro-op cache. I det läget kan inte IPC nå över 4 (är möjligt att nå 5, fast det kräver ett villkorat hopp ungefär var 5:e instruktion, något som nog knappast förekom då antalet felspekuleringar var långt under 1 %).

Zen+ har också brutal IPC, men den är ändå en bit under Skylake på 3,13. IPC för high-end x86 i "normala" program brukar ligga från 1,0 till 2,5 som absolut högst. Vidare har Zen större micro-op cache (framförallt Zen2) samt färre restriktioner i avkodaren vid miss i micro-op cache (dock med en hård gräns på maximal IPC på 4). Med SMT når ju Zen extrem nära IPC på 4,0 (1,9 per tråd).

Att man når sådan astronomisk IPC beror rätt mycket på att L1$D missarna är omätbara (under en promille), även missar i andra saker som TLB$ och branch-$ är ju i praktiken noll. Ett lysande exempel på "microbenchmark" då inget "normalt" program uppför sig ens nära detta.

Zen är generellt sett starkare än Skylake på flyttal, så förväntat utfall här är att IPC ligger högre när båda trådarna jobbar. Men skulle knappast ta detta fall som ett exempel på att Skylake är dålig, tvärtom är ju "problemet" med SMT här en effekt av absolut brutal IPC redan när en CPU-tråd används.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Medlem
Skrivet av Yoshman:

Rätt coola fall du hittat

Insåg direkt vad en absolut kritisk skillnad var i det du körde och gmbench: ditt fall kör ju flyttal med godtycklig precision, det är verkligen en nisch av en nisch! Är medveten om att sådana fall finns, men då prestanda inte riktigt är någon höjdare om man inte kör med HW-stöd för flyttal är det extremt sällan det används. I princip alla problem kan omformuleras så man i stället kan hantera det som matriser.

Kan nu reproducera vad du ser, d.v.s. för vissa bitlängder (200 bitar i ditt exempel, zoom 180 som använder sig av 200 bitar) träffar ett väldigt specifikt fall i Intels CPU. Ett fall som väldigt bra belyser vad jag nämnde ovan: man kan absolut inte stirra sig blid på skalningen av SMT för att avgöra om den är "bra" eller ej.

Problemet (om man nu på något sätt ska kallad det så) är att Skylake får en totalt brutal IPC i enkeltrådfallet. perf-stat rapporterar IPC på 3,54 vilket är det högsta jag någonsin sett. Redan när bara en CPU-tråd används börjar man alltså få front-end som en rejäl flaskhals och det är förklaringen till varför SMT överhuvudtaget inte kan ge något. Man får en svag försämring i total effekt.

Just att front-end är rejält rödmarkerad som flaskhals i perf-stat pekar också på att "hot-path" är något för stor att få plats i mikro-op cache. I det läget kan inte IPC nå över 4 (är möjligt att nå 5, fast det kräver ett villkorat hopp ungefär var 5:e instruktion, något som nog knappast förekom då antalet felspekuleringar var långt under 1 %).

Zen+ har också brutal IPC, men den är ändå en bit under Skylake på 3,13. IPC för high-end x86 i "normala" program brukar ligga från 1,0 till 2,5 som absolut högst. Vidare har Zen större micro-op cache (framförallt Zen2) samt färre restriktioner i avkodaren vid miss i micro-op cache (dock med en hård gräns på maximal IPC på 4). Med SMT når ju Zen extrem nära IPC på 4,0 (1,9 per tråd).

Att man når sådan astronomisk IPC beror rätt mycket på att L1$D missarna är omätbara (under en promille), även missar i andra saker som TLB$ och branch-$ är ju i praktiken noll. Ett lysande exempel på "microbenchmark" då inget "normalt" program uppför sig ens nära detta.

Zen är generellt sett starkare än Skylake på flyttal, så förväntat utfall här är att IPC ligger högre när båda trådarna jobbar. Men skulle knappast ta detta fall som ett exempel på att Skylake är dålig, tvärtom är ju "problemet" med SMT här en effekt av absolut brutal IPC redan när en CPU-tråd används.

Ah, intressant analys !

Edit: För att vara lite petig så är det heltalsmultiplikationer + skalning i GMP som jag använder, provade först med GMP:s flyttal men fick ca 20% bättre prestanda med nuvarande.
Sen hur det fixat det internt i GMP är ju en annan sak... har inte kollat mer än att flera olika metoder används beroende på antal bittar.