Sinulla alkaa hirmuinen sykkiminen kun jotain negatiivista mainitaan AVX-512.
Minua alkaa ärsyttää ihan MIKÄ TAHANSA paskan puhuminen. Oli aihe
mikä tahansa.
Ja n. 80% kritiikistä AVX512-sta kohtaan on joko paskapuhetta tai sitten sitä ettei ymmärretä sitä että softatuen saapuminen uudelle käskykantalaajennokselle kestää jonkin aikaa (erityisesti tilanteessa jossa sen valmistaja sählää kuten Intel nyt sählää)
Se, että Skylake-johdannaisissa on huono AVX-512-toteutus ei ole itse AVX-512n vika. Se on Skylake-johdannaisten ytimien ongelma.
Ihan kuin olisit oikein suuri AVX-512 fani, aika erikoista fanittaa jotain käskylaajennusta. Huomaa hyvin miten kiihkona olet asian tiimoilta kun suu vaahdossa tehtailet peräjälkeen vastauksia samaan aiheeseen liittyen jotka olis voinu niputtaa yhteen. Rauhoitu nyt hyvänen aika!
En ole mikään AVX512-fani. Vaan olen täällä niitä harvoja ihmisiä jotka oikeasti
ymmärtää näitä asioita siinä missä muut mutuilee eikä ymmärrä itse käskykannan ja sen implementaation eroja eikä sitä, miten SIMD vaikuttaa esim. energiatehokkuuteen ja postaa mutupaskaa.
Esim. ARMn SVE on
paljon parempi SIMD-käskykanta kuin AVX-512. Todellisuudessa olen SVE-fani. Ja syy siihen SVE-faniuteen on ihan se, kuinka hyvä SVE on teknisesti.
Mutta AVX-512 nyt sattuu olemaan esim.
ainoa keino x86lla vektoroida looppeja jotka tekevät talletuksia ei-peräkkäisiin muistiosoitteisiin.
Näiden looppien osalta vaihtoehdot x86lla on joko todella hidas ja energiatehoton skalaarisuoritus, tai AVX-512.
Muita vaihtoehtoja ei ole, jos halutaan pysyä x86ssa ja saada hyvä suorituskyky näissä loopeissa. Kohta toki on vaihtoehtona vaihtaa Appleen ja käyttää SVEtä.
Jos itse speksaisin x86lle uutta SIMD-käskykantaa, se olisi monelta osin erilainen kuin AVX-512, muistuttaisi paljon enemmän SVEtä, mutta valitettavasti AVX2 on ominaisuuksiltaan vajaa monille koodeille ja AVX-512 tarjoaa tarvittavan toiminnallisuuden, vaikkei olekaan kaikilta yksityiskohdiltaan täydellinen ratkaisu. AVX-512 nyt sattuu olemaan se ainoa
kehittynyt (*) SIMD-käskykanta joka meillä x86lle on.
Ja silloinkin kun niitä AVX-512n kehittyneitä ominaisuuksia ei tarvita, se mahdollistaa tuplasti enemmän laskutoimituksia/käsky kuin AVX2, mikä mahdollistaa sekä hiukan paremman energiatehokkuuden että suuremman suorituskyvyn kuin AVX2
mikäli implementaatio on tehty tätä silmälläpitäen.
Olen itse ollut suunnittelemassa useampaa SIMD-datapolun omaavaa prossuydintä sekä yhtä VLIW-prossua jossa käytännössä emuloitiin SIMDiä VLIW-linjoilla, kun prossunsuunnittelutyökalun SIMD-tuki ei ollut vielä valmis. Olen joutunut miettimään, tarvitaanko kyseessä olevien algoritmien ajamiseen scatteria ja gatheria, että tarvitaanko ytimelle jompaa kumpaa tai molempia, ja että kuinka hidas scatter/gather on näissä algoritmeissa nopeuden kannalta kelvollinen toteutus, tarviiko tehdä joku massiivinen multibank-ratkaisu joka lataa kaikki linjat kellojaksossa (kunhan ei tule bank-konflikteja) vai riittääkö sisäisesti sarjallinen "kevyttoteutus" kuten Intelin ja AMDn x86-prossuissa.
Olen tuskaillut sen kanssa, että (scatterin ja gatherin lisäksi) linjakohtainen predikointi tarvittaisiin siihen että SIMD-prossulle voisi rinnakkaistaa OpenCL-work itemeita geneerisesti, mutta oma TTYn prossunkehitystyökalumme ei tätä tukenut eikä tuen lisääminen olisi ollut helppoa. (AVX-512 tukee)
Olen opettanut rinnakkaisohjelmointia TTYn "parallel computing" kurssilla monena vuonna (en enää tänä vuonna, vaihdoin teollisuuden puolelle suunnittelemaan prossuytimiä jotka menee ihan oikeisiin tuotteisiin).
Parallel computing-kurssilla käsiteltiin nimenomaan mm. koodin optimointia SIMDille (sekä näyttiksille, ja moniytimelle)
Ja tuo piikittely siitä että ne minun käyttämät webbipalvelut hyötyy AVX-512 oli aika typerää kun nimenomaan on osoitettu että siellä webbiserveri käytössä siitä AVX-512 on nimenomaan haittaa eikä hyötyä.
Ei todellakaan ole
osoitettu mitään sellaista yleisesti. Sotket jälleen itse AVX-512sta ja sen toteutusta Skylake-johdannaisissa.
On osoitettu että Skylake-johdannaisilla siitä on
välillä haittaa kun skylake-johdannaiset sählää kellotaajuutensa ja jännitteensä kanssa kun osa säikeistä käyttää sitä ja osa ei.
Mutta jos lasketaan esim. sellaista tekoälykoodia jossa sitä raskasta AVX-512sta kaipaavaa laskentaan tehdään "jatkuvasti", suurimmalla osalla sen palvelimen ytimistä, siitä on suurta hyötyä. Mutta tekoälykoodi oli toki siitä huono esimerkki, että se kannattaa yleensä lähettää joko näyttikselle tai erilliselle neuroverkkopiirille laskettavaksi, mutta käsittääkseni esim. Facebook kyllä ajaa tekoälykoodia ihan Intelin prossuillakin.
(*) Kehittyneellä tarkoitan (gatherin, joka löytyy jo AVX2sta lisäksi) mm. tukea scatterille sekä kunnolista linjakohtaista predikointia kaikelle; Kun käskykannassa on gather, scatter sekä linjakohtainen predikointi, käytännössä mikä tahansa looppi joka ei sisällä datariippuvuuksia ja sisältää vain hyvin käyttäytyviä kontrollirakenteita (for-loopit, if-elset, mutta ei villejä gotoja) on mahdollista rinnakkaistaa sille.