- Liittynyt
- 12.12.2016
- Viestejä
- 3 930
Höpöhöpö. Mitään tällaista "128-bittistä AVX-moodia" ei intelin prosessoreissa ole olemassa. Jos suoritetaan 256-bittisillä vektoreilla operoivia käskyjä, ne suoritetaan aina 256-bittisellä datapolulla.
Sen sijaan skylake-SP:n halvemmilla malleilla AVX-512-käskyjä suoritetaan pilkkoen niitä kahteen 256-bittiseen osaan. Taidat sekoittaa tähän.
AVX/AVX2n suhteen on vain moodit:
1) kaikkien YMM-rekisterien bitit 129-255 on nollia, ja
2) Kaikkien YMM-rekisterien bitit 128-255 eivät ole nollia.
Jälkimmäisessä moodissa prosessori käy matalammalla kellotaajuudella.
Nuo kaksi moodia ovat lähelle sitä mitä tarkoitan. On myös paljon spekulaatiota (edes Intel ei tätä kunnolla kerro) myös suoritusyksiköiden kytkemisestä pois päältä. Eli moodi 1:ssa myös puolet suoritusyksiköistä kytketään pois päältä virransyötön nimissä.
Valitettavasti spekulaation varassa tässä ollaan.
Höpöhöpö.
Ensinnäkin:
Se prosessori pitää sen "256-bittisen moodin" käytännössä melkein tasan niin kauan kun niissä YMM-rekisterien ylemmissä biteissä on nollia.
Ajamalla käsky vzeroupper voidaan nollata ne kaikkien YMM-rekisterien ylemmät bitit jolloin prosessori palaa nopeasti täyteen kellotaajuuteensa.
Ja aina kun esimerkiksi poistutaan funktiosta, joka sitä AVXää käytti, sellaiseen kutsuvan funktioon, joka sitä ei käytä, ne YMM-rekisterien ylimmät bitit nollataan.
Sinne YMM-rekisterien ylimpiin bitteihin jää roskaa hidastamaan prossun kellotaajuuta "turhaan" tai "pidemmäksi aikaa" käytännössä ainoastaan jos kääntäjä tai käyttis on bugisia (ja joo, pari tällaista bugia on löydetty JA KORJATTU).
Kysehän tässä ei ole niinkään siitä kuinka nopeasti prosessorin saa palaamaan normaaliin kellotaajuuteen vaan siitä kuinka kauan kestää saada AVX2 yksiköt täyteen vauhtiin.
Toisekseen: Sinulla on jälleen täysin hukassa se, millaisista aikayksiköistä ja suuruusluokista tietokoneen sisällä puhutaan.
4 gigahertsiä tarkoittaa neljää miljardia kellojaksoa sekunnissa. 60 FPS:llä se tarkoittaa 66 MILJOONAA kellojaksoa framessa. Se, että joskus jostain tilavaihdoksesta (joka tehdään vaikka joitain kymmeniä kertoja framessa, eli luokkaa parin miljoonan kellojakson välein) tulee parin sadan kellojakson viive ei ole yhtään mitään väliä. Saman luokan viive tulee siitä, että edes yhden kerran accessoidaan muistia osoitteesta, jota ei löydy välimuistista, vaan joudutaan menemään DRAMille asti. Ja pelien working set muistin suhteen on "aika paljon" enemmän kuin 8 - 16 megatavua mitä nykyprossujen L3-välimuistiin mahtuu.
Joidenkin nettilähteiden mukaan se AVX2-yksiköiden käynnistysviive on kymmeniä tuhansia kellojaksoja, joka on jo aika huomattava kun sitä verrataan esim. muistihaun viiveisiin. Tuosta on ollut vähintään spekulaatiota kauan.
Ilman virallista kantaa asiaan on melko vaikea sanoa.
Intelillä ei ole mitään "128-bittistä moodia" ja vaikka AVX-käsky stallaisi hetken kellotajuutta laskiessa ennen kuin se saadaan suorittaa, miljoona kellojaksoa laskevalla rutiinilla ei ole mitään ongelmaa odotella 100 kellojaksoa AVX-yksiköiden heräämistä.
Sillä "moodilla" tarkoitetaan tässä tapauksessa virransäästötilaa jos se on olemassa. Entä jos lisätään se odottelu 10 000 kellojaksoon tai vielä suuremmaksi?
"satunnaisella" tarkoitetaan tällaisissa nyt sitä, että ei tehdä vaikka yksittäisiä 64 tavun memcpy:tä AVX2-rekistereitä käyttäen, jotta voidaan tehdä tämä neljän osan sijasta kahdessa osassa, ja säästää kaksi kellojaksoa. Heti kun aletaan oikeasti laskea yhtään mitään (mitä se peli laskee hyvin paljon) siitä saadaa huomattava hyöty.
Satunnaisella tarkoitin sitä ettei ole nopeaa suorittaa sitä ensimmäistä 256-bittistä AVX2 käskyä (tai mikä aktivoikaan kaikki tehot käyttöön) koska kaiken tehon saaminen edellyttää jatkuvaa AVX2 rekisterien ja laskentayksiköiden päälläpitoa. Siitä taas seuraa lisääntynyttä lämmöntuottoa.
Jos tätä kymmenien tuhansien kellojaksojen/mikrosekuntien viivettä ei ole olemassakaan, nämä spekulaationi lentävät roskiin. Jotkut sanovat sellaisen olevan, jotkut sanovat ettei sellaista ole, jotkut sanovat sen riippuvan prosessorista