Cyberpunk 2077 ei hyödynnä SMT-teknologiaa Ryzen-prosessoreilla

Kaotik

Banhammer
Ylläpidon jäsen
Liittynyt
14.10.2016
Viestejä
21 593
Cyberpunk 2077 -pelaajat ovat huomanneet, että peli ei hyödynnä SMT-teknologiaa Ryzen-prosessoreilla.
Syyllinen tähän löytyy CD Projekt Redin käyttämästä vanhasta GPUOpenin alaisesta koodinpätkästä, joka on julkaistu alun perin Bulldozer-optimointina.
Vanhentunut koodinpätkä asettaa sovelluksen hyödyntämään prosessorin loogisia ytimiä Bulldozer-prosessoreilla ja fyysisiä ytimiä muilla AMD:n prosessoreilla, joihin lukeutuu luonnollisesti myös Ryzen.
Tunnistus on mahdollista muuttaa heksaeditorin avulla, mutta todennäköisesti CDPR tulee julkaisemaan sille myös virallisen korjauksen.

Lähteet: https://www.reddit.com/r/pcgaming/c..._an_intel_c_compiler_which/gfknein/?context=3 Cyberpunk 2077 Does Not Leverage SMT on AMD Ryzen, Lower Core-Count Variants take a Bigger Hit, Proof Included
 
Liittynyt
08.12.2017
Viestejä
1 441
Tässä ihmeellistä on, miten yksinkertaisesta ongelmasta ja korjauksesta on kyse. Jos peliä olisi testattu AMD:n laitteilla kunnolla CPU-profilointityökalun kanssa, ongelma olisi selvinnyt helposti kehitysaikanakin. Nyt asian paikallistivat ja korjasivat pelin engineä tuntemattomat ennätyksellisen lyhyessä ajassa.
 

Cirrus

Miksei maailma toimi asmilla?
Liittynyt
16.10.2016
Viestejä
2 998
Computerbase testasi tuota 5000 -sarjan Ryzeneillä ja vain 5600X:llä tulos oli parempi SMT-hackin kanssa.

Toms hardware teki samaa ja järein amd otti selkeästi takkiin. En jaksanut etsiä häkin tarkkaa toimintaa, mutta se kuulosti joltain täydellisen typeryystason affinitypakotukselta. Eipä sellaista tietenkään tule oikeasti.
 
Liittynyt
17.10.2016
Viestejä
22 124
Computerbase testasi tuota 5000 -sarjan Ryzeneillä ja vain 5600X:llä tulos oli parempi SMT-hackin kanssa.




edit: ja kommentoivat että 5600X:llä tuon SMT-hackin kanssa esiintyi stutterointia.
Niin.. ja tästä voi jokainen itse lukea, että hack/SMT hidastaa kaikkia muita prosessoreita, paitsi 5600X:ta. 5600X:n kanssa se aiheuttaa stutterointia.

--

Haluaisin nähdä muitakin lukuja, mutta tämän valossa ihan turha "korjata" ja ei siitä "korjauksesta" saa mitään hyötyä. Erityisesti kiinnostaisi Intel i5-9600K vs i5-10600K..
 

Kaotik

Banhammer
Ylläpidon jäsen
Liittynyt
14.10.2016
Viestejä
21 593
Haluaisin nähdä muitakin lukuja, mutta tämän valossa ihan turha "korjata" ja ei siitä "korjauksesta" saa mitään hyötyä. Erityisesti kiinnostaisi Intel i5-9600K vs i5-10600K..
Tällä ei ole mitään vaikutusta tai tekemistä Intelin prosessoreiden kanssa, koskee vain AMD:ta.
 
Liittynyt
17.10.2016
Viestejä
22 124
Tällä ei ole mitään vaikutusta tai tekemistä Intelin prosessoreiden kanssa, koskee vain AMD:ta.
Juu, niinhän uutisessa luki. Tuossa vaan saa helposti kuvan, nopeuttaako SMT peliä. Jos siitä on vaan haittaa, niin feasibility study on tehty ja "korjausta" on turha lähteä tekemään, riippumatta siitä, mitä ihmiset internetissä mölisee.
 
Liittynyt
16.10.2019
Viestejä
1 141
Vähän aihetta sivuten, Tukka-Stevehän oli juuri tehnyt CPU-testausta tällä pelillä ja havaitsi, että Ryzen 3 3300X (4/8) ja Intel i5-8600K (6/6) kärsivät häiritsevästä stutterista, vaikka FPS-luvut näyttikin hyviltä. Näistä tarkempaa dataa 9:30 paikkeilla. Pelkät FPS:t ei siis kerro kaikkea.
 
Liittynyt
11.02.2019
Viestejä
1 782
Juu, niinhän uutisessa luki. Tuossa vaan saa helposti kuvan, nopeuttaako SMT peliä. Jos siitä on vaan haittaa, niin feasibility study on tehty ja "korjausta" on turha lähteä tekemään, riippumatta siitä, mitä ihmiset internetissä mölisee.
No toisaalta tuossa taulukossahan on vain 5000 sarjan CPU:t, joilla singlecorea on vaikka muille jakaa. Epäilisin että noilla isommilla prossuilla tasaisemmin levitetty kuorma pudottaa boosteja about eron verran, kun taas 5600X hyötyy koska 6 threadia on "liian vähän" ja se käsittääkseni pitää boostitkin helpommin täydessä rasituksessa. Mielenkiintoista olisi nähdä sama testi mutta siten että kellot on tapissa koko ajan.

Samaten 3000 sarjalla tilanne voisi olla vähän eri kun siellä singlecorea ei ole samaan malliin jolloin kuorman levittäminen saattaa ollakin hyödyllistä. Toivottavasti joku tekisi kattavamman testin, vaikka sinänsä ongelma nyt ei ole järjettömän mielenkiintoinen niin suorituskykyvaikutukset SMT on/off eri ydinmäärillä, eri yhden ytimen suorituskyvyllä ja erilaisilla boostikäytöksillä on aika mielenkiintoista dataa.
 

Cirrus

Miksei maailma toimi asmilla?
Liittynyt
16.10.2016
Viestejä
2 998
No toisaalta tuossa taulukossahan on vain 5000 sarjan CPU:t, joilla singlecorea on vaikka muille jakaa. Epäilisin että noilla isommilla prossuilla tasaisemmin levitetty kuorma pudottaa boosteja about eron verran, kun taas 5600X hyötyy koska 6 threadia on "liian vähän" ja se käsittääkseni pitää boostitkin helpommin täydessä rasituksessa. Mielenkiintoista olisi nähdä sama testi mutta siten että kellot on tapissa koko ajan.

Samaten 3000 sarjalla tilanne voisi olla vähän eri kun siellä singlecorea ei ole samaan malliin jolloin kuorman levittäminen saattaa ollakin hyödyllistä. Toivottavasti joku tekisi kattavamman testin, vaikka sinänsä ongelma nyt ei ole järjettömän mielenkiintoinen niin suorituskykyvaikutukset SMT on/off eri ydinmäärillä, eri yhden ytimen suorituskyvyllä ja erilaisilla boostikäytöksillä on aika mielenkiintoista dataa.
Tuo peli käynnistää threadeja aika kovan määrän muutenkin. Sen juuri sen real core countin verran. Jos tuo hakkerointifixi aiheuttaa sen että niitä lähtee päälle 32 5950x:llä niin mahtaa alkaa tulla vastaan jo enginen threadeille skaalautumisen määräkin.
1608019931110.png
 
Liittynyt
02.06.2017
Viestejä
374
Minulla ei ole kumpaakaan, AMD:tä tai Cyberpunkkia, mutta näin sivusta huutelen ihan mielenkiinnosta.

Kannattaa mitata ennen ja jälkeen tulokset ja seurata cpu context switchien määrää (kuinka paljon suorittavat softasäikeet loikkivat rautasäikeeltä toiselle). Context switchin kustannus on pienen latenssin softissa ihan älytön, koska käytännössä CPU välimuistit pitää aina synkata context switchissä uudestaan (ccNUMA, ja eikös Ryzen/ZEN ollut joku corepaketointiviritelmä). Tämä saattaa aiheuttaa myös vakauteen/eheyteen ongelmia, jos asiaan ei ole kiinnitetty huomiota tuotekehitysvaiheessa.
Voi olla, että kehittäjät ovat tehneet rajoitusratkaisun ihan tarkoitusella.

Context switchejä voi mitata windowsin performance monitor työkalulla:
Monitoring Context Switches | Microsoft Docs
 

tuoppi´

Kapitalisti
NOSTO
Liittynyt
24.10.2016
Viestejä
3 716
Luulis ton olevan nopeampi, jos kerran uudempi versio GPUOpenista käyttää SMT:tä.
 
Liittynyt
13.02.2017
Viestejä
539
Käsitinkö nyt oikein että mun Ryzen 3500x on abouttirallaa sama kuin Ryzen 3600 Cyberpunkissa, koska SMT poissa?
 

HikinenM

Tukijäsen
Liittynyt
18.10.2016
Viestejä
1 048
Computerbase testasi tuota 5000 -sarjan Ryzeneillä ja vain 5600X:llä tulos oli parempi SMT-hackin kanssa.




edit: ja kommentoivat että 5600X:llä tuon SMT-hackin kanssa esiintyi stutterointia.
Jännästi nuo tulokset vaihtelevat sivustoista toiseen, vaikka kaikissa on ollut sama tulos että 5900x/5950x eivät hyödy tuosta, mutta 5600x/3600/3700x/2600x/2700x ym. taas hyötyvät. Mutta tuo olisi uutta että tulisi stutterointia 5600x:llä, en ole itse ainakaan huomannut. Toistaiseksi sinun linkkaamasi on ainoa testisivusto joka ei suosittele tuota fixiä millään Ryzen prosessorilla.

"In a system powered by an 8-core AMD Ryzen 7 3700X, our own Ben Funk saw a roughly 11 percent gain in framerates after making the change, with better SMT handling at play. Have a look (and note this data is from the HEX edit, not the mod)...
Minimum framerates also saw a jump. The bottom line is, if you own a Ryzen processor, we recommend either making the HEX edit or giving the mod a go, to make sure you are getting the most performance possible out of your system. Incidentally, Intel systems are not affected by this apparent bug."
1608022917730.png


3600x + GeForce RTX 3080 Eagle OC 10G
1608023246795.png

1608023375240.png
 
Liittynyt
22.10.2016
Viestejä
11 123
Minulla ei ole kumpaakaan, AMD:tä tai Cyberpunkkia, mutta näin sivusta huutelen ihan mielenkiinnosta.

Kannattaa mitata ennen ja jälkeen tulokset ja seurata cpu context switchien määrää (kuinka paljon suorittavat softasäikeet loikkivat rautasäikeeltä toiselle). Context switchin kustannus on pienen latenssin softissa ihan älytön, koska käytännössä CPU välimuistit pitää aina synkata context switchissä uudestaan (ccNUMA, ja eikös Ryzen/ZEN ollut joku corepaketointiviritelmä).
Ei tarvi synkata mitään L2-välimuisteja uusiksi context switchissä

CPU-käskykantojen speksi suunnitellaan aina siten että välimuistin olemassaolo on käytännössä läpinäkyvää, välimuistillisen prosessorin pitää tuottaa aivan samat tulokset kuin välimuistiton prosessori laskisi.

Se välimuistien tila pidetään jatkuvasti sellaisena, että siellä ei voi olla eri ytimien/säikeiden mielestä eri järjestyksessä tapahtuvia kirjoituksia samaan osoitteeseen. Tätä tarkoittaa välimuistin koherenssius. Tämä tehdään jotta ylläoleva periaate siitä että välimuisti ei vaikuta laskennan tulokseen toteutuisi.

Ja tällä ei ole mitään tekemistä context switchin/virtuaalimuistin kanssa, tämä mekanismi toimii täysin fyysisillä muistiosoitteilla.

Välimuistit on kaikissa yleisissä CPUissa tagattu fyysisillä osoitebiteillä (vaikka yksi henkilö täällä yrittää Zenin L1D:n osalta väittää muuta kun lukee rivien välistä asioita, joita siellä ei sanota). (virtuaalinen tägays löytyy nykyaikana suurinpiirtein ainoastaan IBMn mainframeprossuista, mutta niitä ei voi sanoa yleiseksi prossuksi)

Ainoa asia miten context switch suoraan vaikuttaa välimuistien flushaamiseen on, että data jonka yksi prosessi on ladannut tai tallettanut AMDn Zenin L1D-kakkuun on käyttökelvotonta toiselle prosessille (koska way-predictionin microtagit riippuu virtuaaliosoitteesta, ja ne vaihtuu context switchissä, ja ilman vlaidia mikrotagia välimuistista tulee huti vaikka data siellä fyysisesti olisi), vaikka sillä olisi oikeudet sen käyttämiseen. Tämä voi johtaa siihen, että pieni määrä likaista dataa tarvii sieltä flushata sen L2-kakkuun, mutta tämä ei vaikuta millään tavalla siihen, miten se lähtee sieltä kohti muita ytimiä.

Tämä saattaa aiheuttaa myös vakauteen/eheyteen ongelmia, jos asiaan ei ole kiinnitetty huomiota tuotekehitysvaiheessa.
Systeemit suunnitellaan siten, että ne toimii oikein ihan riippumatta siitä, kuinka monta conxtext switchiä siellä tapahtuu, tai paljonko dataa joudutaan siirtämään välimuistien välillä.

Softa on yksinkertaisesti rikki jso se voi hajota context switcehin tai liialliseen välimuistin koherenssiliikenteeseen (joilla ei siis ole mitään tekemistä keskenään).

Jos se hajoaa jollain isolla määrällä, ei ole mitään takeita ettei se voisi hajota myös pienemmällä määrällä. Suurempi määrää ainoastaan nostaa todennäköisyyttä että tähdet asettuu asentoon, jossa bugi ilmenee.

Voi olla, että kehittäjät ovat tehneet rajoitusratkaisun ihan tarkoitusella.
Ei. Tai siis ei mistään tällaisesta syystä.

Syy on se, että
1) haluttiin että säikeitä on optimaalinen määrä sekä phenomilla, bulldozerilla että intelin SMTtä tukevilla prossuilla, eikä yhtään varauduttu siihen, että AMDltä voi joskus tulla prossu joka toimii tämän osalta samalla tavalla kuin intelin prossut
2) kirjoitettiin tämä valintakoodi typerästi (lähinnä koska kukaan ei uskaltanut kirjoittaa sitä kokonaan uusiksi, lisättiin vaan uusia erikoistapauksia eri prossuille). Sen olisi saanut helposti kirjoiteitettua siten, että se olisi ollut optimaalinen kaikilla (valita katsoa vaan suoraan loogisten ytimien määrää, ignoraten fyysisten määrä), ja tämä optimaalinen koodi olisi ollut jopa lyhempi kuin nykyinen epäoptimaalinen koodi.
 
Viimeksi muokattu:
Liittynyt
21.02.2017
Viestejä
5 031
Jännästi nuo tulokset vaihtelevat sivustoista toiseen
Juu on kyllä merkittävä parannus tuossa Hothardwaren testissä. Varmaan kannattaa kokeilla miten omalla koneella toimii.

Pelihän on ihan raakileena julkaistu, ehkäpä tämäkin vielä työn alla CDPR:llä...
 

HikinenM

Tukijäsen
Liittynyt
18.10.2016
Viestejä
1 048
Juu on kyllä merkittävä parannus tuossa Hothardwaren testissä. Varmaan kannattaa kokeilla miten omalla koneella toimii.

Pelihän on ihan raakileena julkaistu, ehkäpä tämäkin vielä työn alla CDPR:llä...
Jep, varauksella nämä omat korjailut ja aina kannattaa tarkistaa miten vaikuttaa omaan kokoonpanoon. Toivotaan että CDPR korjaa tuon suoraan peliin parhaalla katsomallaan tavalla jotta kaikki prosessorit toimivat mahdollisimman tehokkaasti.
 

Kaotik

Banhammer
Ylläpidon jäsen
Liittynyt
14.10.2016
Viestejä
21 593
Luulis ton olevan nopeampi, jos kerran uudempi versio GPUOpenista käyttää SMT:tä.
Sen verran korjausta ettei ole mitään "uudempaa versiota GPUOpenista", GPUOpen on AMD:n ylläpitämä sivusto kaikenkarvaisille avoimen lähdekoodin optimoinneille, sampleille, teknologioille jne. Tässä on kyse sen kautta julkaistusta optimoinnista, joka oli joskus muinoin oleellinen, nykyään tekee hallaa eikä kukaan ole tajunnut korjata sitä samplea huomioimaan uudempiakin prossuja.
 
Liittynyt
02.06.2017
Viestejä
374
Ei tarvi synkata mitään L2-välimuisteja uusiksi context switchissä

CPU-käskykantojen speksi suunnitellaan aina siten että välimuistin olemassaolo on käytännössä läpinäkyvää, välimuistillisen prosessorin pitää tuottaa aivan samat tulokset kuin välimuistiton prosessori laskisi.

Se välimuistien tila pidetään jatkuvasti sellaisena, että siellä ei voi olla eri ytimien/säikeiden mielestä eri järjestyksessä tapahtuvia kirjoituksia samaan osoitteeseen. Tätä tarkoittaa välimuistin koherenssius. Tämä tehdään jotta ylläoleva periaate siitä että välimuisti ei vaikuta laskennan tulokseen toteutuisi.
Anteeksi, oioin ja yksinkertaistin hieman liikaa. Kertomasi on hyvä selitys yleisperiaatteelle.


Mutta... cache coherency protokollat takaavat samat data, eivät samaa järjestystä ooo-arkkitehtuureilla.

Yksinkertaistettuna, meillä on Nodet1 ja 2. alkutilanne on sama.
N1 N2
1:A 1:A
2:A 2:A
3:A 3:A
4:A 4:A

Säie1 asuu N1:llä, säie2 N2:lla.
S1 päivittää yhden A:n B:ksi, S2 tekee omalla tahollaan saman C:ksi. Koska ooo, nodet toimivat itsenäisinä yksikköinä.
N1 N2
1:B 1:C
2:A 2:A
3:A 3:A
4:A 4:A

CC<->

N1 N2
1:B 1:C
2:C 2:B
3:A 3:A
4:A 4:A

Datat ovat edelleen samat, mutta järjestys eri.
S2 siirretään N1:ltä N2:lle (ja S2 poistuu tai ei touhua enää tuossa osassa cachea).
Koska välimuisteja ei nyt synkattu, S1 saa dataa hakiessaan eri tuloksen kuin pitäisi.

Ongelman voi välttää:
1. bindaamalla S1:n N1:lle, ongelmaksi tulee se, jos säikeitä tulee paljon ja niitä bindaillaan, niin schedulointi tulee hankalaksi tai vähintäänkin epäoptimaaliseksi.
2. Laittamalla memory barrierin. Memory barrier takaa järjestyksen, mutta aiheuttaa pullonkaulaksi cache coherencyn. Lisäksi välimuistin käyttö ei välttämättä ole optimaalista jos näin tekeviä säikeitä on paljon.
3. Tekemällä context switchissä sync()in, jolloin välimuistit ovat taas samat.
4. Epäoptimoimalla, jolloin tilanneta ei välttämättä tapahdu. (tai siis jättämättä ihan jyrkimmät optimoinnit pois)
5. Vähentämällä rinnakkaisuutta, jolloin on vähemmän säikeitä kisaamassa.

Mikä sitten on optimaalista riippuu softasta. Voisi kuvitella, että fysiikkalaskenta on mikrosekuntiluokan softaa, jossa tällaista tapahtuu. Latenssit kun tuppaavat kertautumaan koodissa.

Ja vielä edit: En tiedä toimii AMD näin, mutta Intelin NUMAt toimivat
 
Viimeksi muokattu:
Liittynyt
22.10.2016
Viestejä
11 123
Anteeksi, oioin ja yksinkertaistin hieman liikaa. Kertomasi on hyvä selitys yleisperiaatteelle.

Mutta... cache coherency protokollat takaavat samat data, eivät samaa järjestystä ooo-arkkitehtuureilla.
Ei.

Se, että kaikki näkevät saman kirjotuksen, tarkoittaa, että ne näkevät sen saman kirjoitetun arvon.

Mutta siitä, koska se sen näkee, ei taata muuta kuin niiden järjestys.

Mutta koska niiden pitää nähdä kaikki kirjoitukset samaan osoitteeseen samassa järjestyksessä, toinen ei saa kirjoittaa siihen ennen kuin se on varmistanut, että toinen ei ole välissä kirjoittanut siihen.

Käytännössä aina, kun välimuistiin kirjoitetaan, se välimusitilinja pitää ottaa itselle sellaiseen moodiin, että muut eivät saa kirjoittaa siihen yhtä aikaa (ja saada muilta siirrettyä niiden viimeinen kirjoitus joka tapahtui ennent ätä haltuunottoa).



Yksinkertaistettuna, meillä on Nodet1 ja 2. alkutilanne on sama.
N1 N2
1:A 1:A
2:A 2:A
3:A 3:A
4:A 4:A

Säie1 asuu N1:llä, säie2 N2:lla.
S1 päivittää yhden A:n B:ksi, S2 tekee omalla tahollaan saman. Koska ooo, nodet toimivat itsenäisinä yksikköinä.
N1 N2
1:B 1:A
2:A 2:A
3:A 3:A
4:A 4:B

Datat ovat edelleen samat, mutta järjestys eri.
S2 siirretään N1:ltä N2:lle (ja S2 poistuu tai ei touhua enää tuossa osassa cachea).
Koska välimuisteja ei nyt synkattu, S1 saa dataa hakiessaan eri tuloksen kuin pitäisi.
Ei. molemmat eivät saa kirjoittaa samaan muuttujaan "ristiin". tämä on asia jonka välimuistin koherenssius kieltää.

Ei välimuistinkoherenttius vertaa mitään datasisältöjä vaan sitä, mihin osoitteisin (välimuistiulohkoihin) kirjoitetaan. Ja pakottaa vaan kirjoitukset samaan osoitteesen johonkin kaikille samaan järjestykseen.

Se, että alettaisiin vertamaan että "satuttiinko kirjoittamaan sama luku" olisi aivan älyttömän raskasta ja hyöty olisi olematon, koska yleensä eri säikeet EI kirjoita sinne samaa dataa.

Ongelman voi välttää:
1. bindaamalla S1:n N1:lle, ongelmaksi tulee se, jos säikeitä tulee paljon ja niitä bindaillaan, niin schedulointi tulee hankalaksi tai vähintäänkin epäoptimaaliseksi.
2. Laittamalla memory barrierin. Memory barrier takaa järjestyksen, mutta aiheuttaa pullonkaulaksi cache coherencyn. Lisäksi välimuistin käyttö ei välttämättä ole optimaalista jos näin tekeviä säikeitä on paljon.
3. Tekemällä context switchissä sync()in, jolloin välimuistit ovat taas samat.
sync() flushaa levyvälimuistin (joka on puhdasta softaa käyttiksessä), sillä ei ole mitään tekemistä CPUilla olevan muistille toimivan rautavälimuistin kanssa.

4. Epäoptimoimalla, jolloin tilanneta ei välttämättä tapahdu. (tai siis jättämättä ihan jyrkimmät optimoinnit pois)
5. Vähentämällä rinnakkaisuutta, jolloin on vähemmän säikeitä kisaamassa.

Mikä sitten on optimaalista riippuu softasta. Voisi kuvitella, että fysiikkalaskenta on mikrosekuntiluokan softaa, jossa tällaista tapahtuu. Latenssit kun tuppaavat kertautumaan koodissa.

Ja vielä edit: En tiedä toimii AMD näin, mutta Intelin NUMAt toimivat
Sotket nyt aivan täysin CPUn välimuistin koherenttiuden, säikeiden välisen synkronoinnin ja levyvälimuistin toiminnan keskenään, ja sen, mikä on softan, mikä raudan vastuulla.

Normaalin user-mode-softan ei koskaan tarvi tehdä mitään datavälimuisti-flushauksia jotta muut ytimen näkee sen niin kauan kun dataa käsittellään vain CPUlla.

Sen sijaan, jos tehdään itseäänmodifioivaa koodia, niin käskyvälimuistia voidaan joutua flushaamaan jotta sinne ladataan uusi modifioitu koodi, mutta tämä pätee jo saman ytimen sisälläkin, tällä ei ole mitään tekemistä monen eri säikeen kanssa.


Ja NUMAlla ei ole myöskään tämän kanssa mitään tekemistä. NUMA tarkoittaa sitä, että meillä on hajautettu muistiväylä jossa osa muistipiireistä on kytketty eri piirillä olevaan muistiohjaimeen kuin osa, jolloin osa muistista on joillekin ytimille NOPEAMPAA kuin joku muu osa siitä.
 
Viimeksi muokattu:
Liittynyt
05.09.2020
Viestejä
1 392
Eikös se ole vanhaa tietoa että Windozessa AMD:n SMT ei vain toimi peleissä ja pitäisi kytkeä pois. Joitakin poikkeuksia tietty on. Ehkä Cyberpunkin tekijät ovat tienneet kummalla tavalla peli pyörii sujuvammin.
 

Kaotik

Banhammer
Ylläpidon jäsen
Liittynyt
14.10.2016
Viestejä
21 593
Eikös se ole vanhaa tietoa että Windozessa AMD:n SMT ei vain toimi peleissä ja pitäisi kytkeä pois. Joitakin poikkeuksia tietty on. Ehkä Cyberpunkin tekijät ovat tienneet kummalla tavalla peli pyörii sujuvammin.
Vanhaa urbaanilegendaa tarkoitat?

Toki joissain peleissä tulee takkiin, toisissa tulee plussaa, erot päällä/pois häviävän pieniä keskimäärin, ihan kuten Intelilläkin (oli haastavampaa löytää edes semituoretta, tällainen löytyi Does Intel Hyper Threading Hurt Gaming Performance? I9-9900K Analysis )
 
Liittynyt
05.09.2020
Viestejä
1 392
Vanhaa urbaanilegendaa tarkoitat?

Toki joissain peleissä tulee takkiin, toisissa tulee plussaa, erot päällä/pois häviävän pieniä keskimäärin, ihan kuten Intelilläkin (oli haastavampaa löytää edes semituoretta, tällainen löytyi Does Intel Hyper Threading Hurt Gaming Performance? I9-9900K Analysis )
5950X ei lienee vielä kovin yleinen prossu. Mä katselin Ryzen 5 3600:lla tehtyjä mittauksia. Eli soppaa ilmeisesti hämmentää vielä Zen-sukupolvien erot. Vai onko AMD parantanut vanhempien prossujen tilannetta softapäivityksillä?
 

Laquel

This is where I get off.
Liittynyt
17.10.2016
Viestejä
2 560
Vähän aihetta sivuten, Tukka-Stevehän oli juuri tehnyt CPU-testausta tällä pelillä ja havaitsi, että Ryzen 3 3300X (4/8) ja Intel i5-8600K (6/6) kärsivät häiritsevästä stutterista, vaikka FPS-luvut näyttikin hyviltä. Näistä tarkempaa dataa 9:30 paikkeilla. Pelkät FPS:t ei siis kerro kaikkea.
Jännä homma kyllä tuo 8600k kun en ole mitään erityistä stutteriä huomannut omalla kellotetulla :O Tosin mulla onki 1440p ja RTX päällä niin voi olla että prossu ei rajoita niin paljon kuin tuossa testitilanteessa
 

Kaotik

Banhammer
Ylläpidon jäsen
Liittynyt
14.10.2016
Viestejä
21 593
5950X ei lienee vielä kovin yleinen prossu. Mä katselin Ryzen 5 3600:lla tehtyjä mittauksia. Eli soppaa ilmeisesti hämmentää vielä Zen-sukupolvien erot. Vai onko AMD parantanut vanhempien prossujen tilannetta softapäivityksillä?
Tuossa jälkimmäisessä linkissä on Zen 2 (vaikka järeämpi kuin 3600) ja ihan samaa kaavaa noudattaa kuin Zen 3. Laitatko linkkiä näihin mittauksiin mitä itse katselit?
 
Liittynyt
22.10.2016
Viestejä
11 123
Eikös se ole vanhaa tietoa että Windozessa AMD:n SMT ei vain toimi peleissä ja pitäisi kytkeä pois. Joitakin poikkeuksia tietty on. Ehkä Cyberpunkin tekijät ovat tienneet kummalla tavalla peli pyörii sujuvammin.
Ei. Vaan se on mutua ja väärinymmärrystä.

SMT toimii oikein hyvin, mutta kaikki pelit ei hyödy siitä, jos ne joko 1) ei tarvi suurta määrää säikeitä, ja 2) joillain peleillä tietyissä tilanteissa SMT hidastaa, kun niissä on yksi raskas säie sekä monta kevyttä säiettä joiden hommat voisi aivan hyvin suorittaa pienemmällä määrällä säikeitä peräkkäin, ja näiden ajaminen yhtä aikaa SMTllä hidastaa myös sitä yhtä raskasta säiettä.

Ja tämä olisi ihan samalla tavalla ongelma Intelin SMTtä tukevalla prossulla, tämä ei ole mikään Ryzenin ongelma, vaan vaan huonosti optimoidun softan (epätasainen kuormanjako) ongelma.


Tämä Cyberpunkin ongelma/bugi on täällä moneen kertaan analysoitu ja selitetty sellaisten ihmisten toimesta, jotka on oikeasti perehtyneet asiaan ja lukeneet kyseisen ongelmallisen koodipätkän, miksi pitää alkaa selittämään jotain omaa mutua joka ei oikeasti liity asiaan mitenkään? Koska on liian laiska edes yrittämään ymmärtää, mistä tässä on oikeasti kyse?
 
Liittynyt
29.08.2017
Viestejä
56
Vaikka minulla on 3900x niin utilisaatiot nousi 30%- > 50%, aikasemmin ei käyttänyt ollenkaan loogisia coreja. Ja vaikka FPS ei juurikaan noussut (GPU bound oli jo aikasemmin) niin stutterointi katosi käytännössä ja tekee pelistä paljon pelattavamman.
 
Liittynyt
17.10.2016
Viestejä
3 205
Tässä ihmeellistä on, miten yksinkertaisesta ongelmasta ja korjauksesta on kyse. Jos peliä olisi testattu AMD:n laitteilla kunnolla CPU-profilointityökalun kanssa, ongelma olisi selvinnyt helposti kehitysaikanakin. Nyt asian paikallistivat ja korjasivat pelin engineä tuntemattomat ennätyksellisen lyhyessä ajassa.
Eiköhän siellä ole ollut paskat housussa vähän muidenkin asioiden suhteen joten jotain profilointeja tuskin edes tehty. Sen luokan bugipläjäys ettei vastaavaa ole vähään aikaan nähty.
 

Marti77

Team H2O
Liittynyt
16.12.2016
Viestejä
4 444
Eiköhän siellä ole ollut paskat housussa vähän muidenkin asioiden suhteen joten jotain profilointeja tuskin edes tehty. Sen luokan bugipläjäys ettei vastaavaa ole vähään aikaan nähty.
On sitä pahempaa nähty esim Red dead redemption 2 mitä ei saanut edes käynnistetty kun julkisti PC version.
 
Liittynyt
17.10.2016
Viestejä
3 205
On sitä pahempaa nähty esim Red dead redemption 2 mitä ei saanut edes käynnistetty kun julkisti PC version.
Tuo taidettiin korjata aika pikapika vauhdilla. Kokonaisuutena tämän pelin bugit ja puutteet kyllä pahempia. RDR2 ei sentään ole korvattu puolta pelin sisällöstä geneerisellä placeholderilla koska ei ollut aikaa tehdä loppuun asti. Hyvä esimerkki pelin olematon turhake AI.
 
Liittynyt
08.12.2017
Viestejä
1 441
Syy on se, että
1) haluttiin että säikeitä on optimaalinen määrä sekä phenomilla, bulldozerilla että intelin SMTtä tukevilla prossuilla, eikä yhtään varauduttu siihen, että AMDltä voi joskus tulla prossu joka toimii tämän osalta tamalla tavalla kuin intelin prossut
2) kirjoitettiin tämä valintakoodi typerästi (lähinnä koska kukaan ei uskaltanut kirjoittaa sitä kokonaan uusiksi, lisättiin vaan uusia erikoistapauksia eri prossuille). Sen olisi saanut helposti kirjoiteitettua siten, että se olisi ollut optimaalinen kaikilla (valita katsoa vaan suoraan loogisten ytimien määrää, ignoraten fyysisten määrä), ja tämä optimaalinen koodi olisi ollut jopa lyhempi kuin nykyinen epäoptimaalinen koodi.
Tai vielä optimaalisempi voisi olla, että lasketaan oletuksena kaikille loogisten ytimien tai muun yleipätevän metriikan mukaan ja vasta tämän jälkeen jos on mittausten kautta varmistettu tietyn cpu-mallin toiminta eri parametreilla eri kokoonpanoissa, manuaalinen parametrien ylikirjoitus olisi vain tälle mallille erityisenä hienosäätönä.
 
Liittynyt
08.11.2016
Viestejä
1 324
Syy on se, että
1) haluttiin että säikeitä on optimaalinen määrä sekä phenomilla, bulldozerilla että intelin SMTtä tukevilla prossuilla, eikä yhtään varauduttu siihen, että AMDltä voi joskus tulla prossu joka toimii tämän osalta tamalla tavalla kuin intelin prossut
2) kirjoitettiin tämä valintakoodi typerästi (lähinnä koska kukaan ei uskaltanut kirjoittaa sitä kokonaan uusiksi, lisättiin vaan uusia erikoistapauksia eri prossuille). Sen olisi saanut helposti kirjoiteitettua siten, että se olisi ollut optimaalinen kaikilla (valita katsoa vaan suoraan loogisten ytimien määrää, ignoraten fyysisten määrä), ja tämä optimaalinen koodi olisi ollut jopa lyhempi kuin nykyinen epäoptimaalinen koodi.
Ilmeisesti se koodi on joka tapauksessa buginen. Mun x86 assembly osaaminen ei riittänyt varmistaa kumpi noista koodinpätkistä on käytössä.
 
Liittynyt
17.10.2016
Viestejä
22 124
Ja vielä edit: En tiedä toimii AMD näin, mutta Intelin NUMAt toimivat
Tähän nyt vaan tiedoksi, että NUMA tarkoittaa prosessorin erilaista mahdollisuutta tehdä muistihakuja. Intelin vehkeissä ei ole ainakaan kuluttajaluokassa mitään tällaista non-uniformia, kun ytimet ovat samalla piirisirulla.

AMD:lla taas on vaikka chiplettejä, ja niillä on eri cachet ja ne voivat hakea muistista eri tavalla, riippuen siitä, onko se ydin missä CCX:ssä, millä piisirulla tai missä vaan kaukana siitä vertailuytimestä.

NUMA ei ole mitään tekemistä context switchien kanssa ja jotenkin tuntuu, että tässä on toisella tunnuksella käyty jo tämä keskustelu ja vieläkään ei ole täysin ymmärretty, mitä siinä tapahtuu.

NUMA = Non Uniform Memory Access ja Intelin Mesh topologiassa ei ole mitään non uniformia. Nyt aloitetaan sillä, että otat termit haltuun.
 

Kaotik

Banhammer
Ylläpidon jäsen
Liittynyt
14.10.2016
Viestejä
21 593
Ilmeisesti se koodi on joka tapauksessa buginen. Mun x86 assembly osaaminen ei riittänyt varmistaa kumpi noista koodinpätkistä on käytössä.
Toisin kuin tuo linkki väittää, tämä ei ole mikään Intelin kääntäjän tempaus, vaan tuo on ihan suoraan AMD:n GPUOpenista (mutta vanhentunut). Lisäksi tuossa höpötetään jotain Intelin prossuista, tuo koodinpätkä vaikuttaa ja koskee vain AMD:n prossuja.
 
Liittynyt
08.12.2017
Viestejä
1 441
Systeemit suunnitellaan siten, että ne toimii oikein ihan riippumatta siitä, kuinka monta conxtext switchiä siellä tapahtuu, tai paljonko dataa joudutaan siirtämään välimuistien välillä.

Softa on yksinkertaisesti rikki jso se voi hajota context switcehin tai liialliseen välimuistin koherenssiliikenteeseen (joilla ei siis ole mitään tekemistä keskenään).

Jos se hajoaa jollain isolla määrällä, ei ole mitään takeita ettei se voisi hajota myös pienemmällä määrällä. Suurempi määrää ainoastaan nostaa todennäköisyyttä että tähdet asettuu asentoon, jossa bugi ilmenee.
Tähän väliin olisi hyvä mainita, että korkean tason ohjelmointikieli luultavasti saattaa tarjota turvallisemman konsistenssimallin kuin laitteisto, jolla voi nykyään olla aika löysä malli. Näiden mallien yhteensovitus voi olla kokonaan delegoitu runtimelle, kääntäjälle ja viimeistään enginelle. Korkealla tasolla on vain lukkoja, mutekseja tai synchronized-lohkoja yms. Oma pelikoodi on rikki, jos se ei noudata ohjelmointikielen ja -ympäristön konsistenssimallia. Tällaistakin perinnekoodia on, missä toivotaan, ettei ajeta liian eksoottisella raudalla, jotta ongelmat eivät realisoituisi. Esim. kun tuplaydinprosessoreita (tai tuplasoketteja) alkoi ilmaantua kuluttajille, jotkin vanhat säiekoodit olivat yhtäkkiä ihan rikki (olivat luottaneet esim. siihen että yksi CPU vuorottelee säikeitä peräkkäin).

Lisäksi voisi ehkä sanoa, että monta säiettä ei implikoi, että kontekstinvaihtoja edes tarvitaan, kun säikeet voi sitoa tietylle ytimelle ja pelilogiikan kannalta ei ole edes välttämättä olennainen/toivottu piirre, että tehdään kontekstinvaihtoja jonkun muun taustaprosessin kanssa. Tai jos niitä tapahtuu, datan käsittely hoituu ihan käyttiksen kautta ja pelikoodi ei paljonkaan sille sitten voi. Toinen vielä, että immutable-datan kanssa on nykyään vähemmän tarve ylipäänsä hakea yhdestä paikasta tila. Peleissä ei ehkä voi hyödyntää joka paikassa, mutta kuitenkin.
 
Liittynyt
17.10.2016
Viestejä
443
Vaikka minulla on 3900x niin utilisaatiot nousi 30%- > 50%, aikasemmin ei käyttänyt ollenkaan loogisia coreja. Ja vaikka FPS ei juurikaan noussut (GPU bound oli jo aikasemmin) niin stutterointi katosi käytännössä ja tekee pelistä paljon pelattavamman.
Sama todennettu 3800x:llä, cpu% keskiarvo nousi 30:stä 40:een. Aiemmin yksi ydin oli kuormitettu n. 80%:sti, kaksi seuraavaa noin 50% ja loput viisi 15-25% (hyvin karkeasti). Puukotuksen jälkeen neljä säiettä pyörii noin 50-60% tuntumassa jo loput 12 säiettä melko tasaisesti pienemmällä kuormalla. Vega 56 rajoittaa menoa jo muutenkin niin paljon etten huomannut juuri mitään eroa suorituskyvyssä. Dynaaminen skaalaus tiputtaa ehkä hieman harvemmin alemmalle tasolle kuin ennen.
 

BlackWolf

Suomen Michael Jackson
BANNED
NOSTO
Liittynyt
18.10.2016
Viestejä
1 797
Minulle tuli sellainen asia mieleen, että voisikohan uusilla konsoleilla olla sama juttu jäänyt päälle. En tunne niiden sielunelämää niin hyvin, mutta jos vedetty copypastella niiden firmojen omiin työkaluihin, niin teoriassa voisiko siellä olla toi sama tsekkaus jäänyt listoille. Olisi aika hauska.
 
Liittynyt
02.06.2017
Viestejä
374
Ei. molemmat eivät saa kirjoittaa samaan muuttujaan "ristiin". tämä on asia jonka välimuistin koherenssius kieltää.
Kiitos valaisusta.
Valaisetko vielä hieman tilannetta, jossa välimuistin edessä olevassa striimauspuskurissa (joka ei tietenkään ole osa cachea) sattuisi olemaan vielä cacheline joka itse cachessa on invalid ja kyseistä riviä haluava säie juuri siirretään toisaalta tälle cpulle. Voisiko tässä kuitenkin ihan vähän tapahtua siten, että säie hakeekin rivin puskurista (joka ei tietenkään ole osa cachea) eikä siitä ihan oikeasta cachesta - tai säie hakee mahdollisesti jopa ihan väärän rivin? Ja voisiko tässä myös käydä siten, että kääntäjä ei ole huomioinut tällaista tilannetta?


sync() flushaa levyvälimuistin (joka on puhdasta softaa käyttiksessä), sillä ei ole mitään tekemistä CPUilla olevan muistille toimivan rautavälimuistin kanssa.
Anteeksi sotkin arkkitehtuurit, sync() tekee välimuistisynkkauksen powerpc:ssä, ei x86:ssa. Suoraa vastinetta ei taida olla.[/quote][/QUOTE]
 
Liittynyt
08.11.2016
Viestejä
1 324
Toisin kuin tuo linkki väittää, tämä ei ole mikään Intelin kääntäjän tempaus, vaan tuo on ihan suoraan AMD:n GPUOpenista (mutta vanhentunut). Lisäksi tuossa höpötetään jotain Intelin prossuista, tuo koodinpätkä vaikuttaa ja koskee vain AMD:n prossuja.
Joko et ymmärtänyt lukemaasi tai et lukenut linkkiä.

Tässä alla mitä kirjoitin Cyberpunkin threadissä.


Tuossa lienee paras tekninen selitys aiheesta, ei ole mitään tekemistä AVX:n kanssa. Se 75 -> 74 muutos vaihtaa tuon hypyn "jump if not equal" -> "jump if equal" muotoon, ja taas EB vaihtaa tuon hypyn aina tapahtumaan.

EB muutoksen etuna on se että tuo muutos tulee voimaan kaikilla prossuilla, ja jos joku säätää tyhmää ja tekee tuon muutoksen "väärällä" prossulla niin silloin siihen ei mene päälle se oletusasetus joka ei käytä kaikkia(?) coreja, näin siis kävisi jos käyttää 74 arvoa tuossa tilanteessa.

AMD:n vehkeillä ei ole mitään eroa nopeuden kannalta käyttääkö sitä 74 vai EB.

Spoileri tägissä kuinka tuo näkyy IDA:ssa patchattynä ja ilman pätchiä.
 
Liittynyt
21.12.2016
Viestejä
103
Anteeksi sotkin arkkitehtuurit, sync() tekee välimuistisynkkauksen powerpc:ssä, ei x86:ssa. Suoraa vastinetta ei taida olla.
Ei ole edelleenkään välimuistin synkkauskäsky, vaan PowerPC:n sync näkyy olevan käsky-barrier. X86:n vastineena voi käyttää cpuid-käskyä.
 
Liittynyt
21.06.2017
Viestejä
7 031
1) haluttiin että säikeitä on optimaalinen määrä sekä phenomilla, bulldozerilla että intelin SMTtä tukevilla prossuilla, eikä yhtään varauduttu siihen, että AMDltä voi joskus tulla prossu joka toimii tämän osalta tamalla tavalla kuin intelin prossut
2) kirjoitettiin tämä valintakoodi typerästi (lähinnä koska kukaan ei uskaltanut kirjoittaa sitä kokonaan uusiksi, lisättiin vaan uusia erikoistapauksia eri prossuille). Sen olisi saanut helposti kirjoiteitettua siten, että se olisi ollut optimaalinen kaikilla (valita katsoa vaan suoraan loogisten ytimien määrää, ignoraten fyysisten määrä), ja tämä optimaalinen koodi olisi ollut jopa lyhempi kuin nykyinen epäoptimaalinen koodi.
Paitsi että tota koodia ei joidenkin mukaan ole edes tarkoitettu käytettävksi copy/pastena vaan palvelee lähinnä esimerkki koodina.
 

FlyingAntero

ɑ n d r o i d
Premium-jäsen
S Y N T H W A V E
Liittynyt
17.10.2016
Viestejä
9 131
Tarkoittaako tuo samalla myös, että Cyperpunk ei juurikaan osaa hyödyntää useampaa kuin 8-12 säiettä? Suorituskykyero useamman ytimen prosessoreille tulisi sitten vain korkeammista kelloista?
 

Sampsa

Sysop
Ylläpidon jäsen
Team Tesla
Liittynyt
13.10.2016
Viestejä
12 592
Tarkoittaako tuo samalla myös, että Cyperpunk ei juurikaan osaa hyödyntää useampaa kuin 8-12 säiettä? Suorituskykyero useamman ytimen prosessoreille tulisi sitten vain korkeammista kelloista?
8-12 ydintä tarkoittaa 16-24 säiettä, mutta joo SMT on jätetty niillä tarkoituksella pois koska aidot ytimet parempia
 

FlyingAntero

ɑ n d r o i d
Premium-jäsen
S Y N T H W A V E
Liittynyt
17.10.2016
Viestejä
9 131
8-12 ydintä tarkoittaa 16-24 säiettä, mutta joo SMT on jätetty niillä tarkoituksella pois koska aidot ytimet parempia
Sitä tuossa just pohdin, kun 8-ytimiselle SMT:tä ei kuitenkaan enabloitu. 6-ytimisellä on kuitenkin parempi ajaa 12 säiettä.
 

Cirrus

Miksei maailma toimi asmilla?
Liittynyt
16.10.2016
Viestejä
2 998
Sitä tuossa just pohdin, kun 8-ytimiselle SMT:tä ei kuitenkaan enabloitu. 6-ytimisellä on kuitenkin parempi ajaa 12 säiettä.
Ihmettelin samaa jo cyberpunk ketjussa heti. Mutta oletko varma että ne käynnistää 12 säiettä?

Mutta joo. Se on päivän selvää että jos 5600x on nopein 12:sta säikeellä, níin myös 5800x oilisi nopein samalla määrällä ja päivitys on kustu taas.
 
Toggle Sidebar

Statistiikka

Viestiketjut
240 670
Viestejä
4 207 821
Jäsenet
70 932
Uusin jäsen
pite

Hinta.fi

Ylös Bottom