Som du kanskje vet, behandler CPU-en programvaren slik at alt fungerer i et datasystem. Programmer består av instruksjoner og data; instruksjonene angir hvilken operasjon som må utføres på dataene for å oppnå det forventede resultatet. Og det er slik alt utføres. Vel, en av de viktigste enhetene i CPU-en er ALU eller FPU, som er ansvarlig for matematiske operasjoner. Og i nåværende prosessorer, som Intel, er funksjonelle enheter som er i stand til å utføre vektorinstruksjoner med datalengder på opptil 512 bits inkludert, for eksempel AVX-512 som vi skal diskutere her.
Disse utvidelsene er ment å fremskynde behandlingen av visse arbeidsmengder, spesielt vitenskapelige, som krever et stort antall operasjoner av denne typen. Men da AVX-512 dukket opp, Ikke alle var gode anmeldelser for Intel, var det også mange som ikke likte dette tillegget i det hele tatt, og som til og med møtte på visse problemer, som vi skal se ...
Du kan også være interessert i:
Hvordan fungerer en ALU?
Før man lærer mer om instruksjonssettet AVX-512, er det først viktig å forstå hvordan et instruksjonssett fungerer. ALU (aritmetisk logikkenhet), det vil si en aritmetisk og logisk prosesseringsenhet.
Det vil si at de i denne enheten utføres beregninger som inkluderer operasjoner som addisjon, multiplikasjon, divisjon osv.For å utføre disse oppgavene bruker ALU-en spesifikke digitale kretser som styres av CPU-ens kontrollenhet. Når den fanger opp en instruksjon som skal behandles fra minnet og dekoder den, sender den en opkode til ALU-en som indikerer hva den skal gjøre med de to dataelementene som er lastet inn i registrene. For eksempel vil en ADD-instruksjon legge til, en SUB subtrahere, en MUL multiplisere, en DIV dividere osv.
I tillegg vil denne ALU-en, som resten av CPU-enhetene, fungere i tempoet som er satt av klokkefrekvens. For eksempel, hvis det er 5 GHz, vil de utføre 5.000 milliarder operasjoner per sekund, for å si det veldig enkelt.
Når det er sagt, øker mengden varme som genereres av CPU-en etter hvert som CPU-klokkehastigheten øker. Derfor er det ikke den eneste løsningen for å forbedre ytelsen å skalere frekvensen høyere og høyere. Derfor må CPU-designere se etter alternativer for å forbedre ytelsen, som parallellisme på kjernenivå, registerendring, prediksjon og spekulasjon, utførelse i feil rekkefølge, superskalarsystemer, osv. Og blant tiltakene for å øke datakraften er også bruk av instruksjoner kalt SIMD, det vil si en vektor, som kan operere på større datasett.
Et eksempel på disse instruksjonene er AVX-512Mens resten av enhetene bruker 64-bits data, bruker spesialenhetene for disse utvidelsene 512-bits datalengde, det vil si at de kan håndtere 8 ganger den normale ordstørrelsen samtidig. For å gjøre dette trenger de ALU-er (heltall) eller FPU-er (hvis flyttall) større og mer komplekst, noe som til slutt fører til en større brikkeoverflate, dermed høyere kostnader og også andre komplikasjoner ...
Hvordan kommer dataene til ALU-en?
Vel, nå som du har en grunnleggende forståelse av hva en ALU er og hvordan den fungerer, samt hva AVX-512 brukes til på et grunnleggende nivå, er neste trinn å lære hvordan data når ALU-en, da dette også vil hjelpe deg å forstå disse utvidelsene.
For å nå ALU-en må dataene bevege seg gjennom forskjellige lagringssystemer. Denne datareisen er basert på minnehierarki av datasystemet. En kort beskrivelse av dette hierarkiet ville være:
- Sekundærminne: Dette er masselagringsmedier, det vil si HDD- eller SSD-harddisker, blant andre disker som også kan være koblet til I/O-systemet, for eksempel optiske medier osv. De lagrer en stor mengde informasjon, men minnet deres er tregere sammenlignet med CPU-hastigheten. Derfor medfører tilgang til disse mediene en straff, større latens. For å unngå disse straffene laster vi disse dataene inn i et primært minne, som vi skal diskutere i neste punkt. For eksempel, for å gi deg en klarere idé, tenk deg at du har Word installert på harddisken din, og du vil kjøre det. Denne programvaren vil bestå av en serie kjørbare filer eller binærfiler som inneholder instruksjonene og dataene som er nødvendige for at CPU-en skal kunne kjøre dem. Det kan også hende at programvaren du vil kjøre ikke er på en harddisk, for eksempel når du installerer et operativsystem fra en USB-minnepinne eller DVD. De kjørbare binærfilene med disse instruksjonene og dataene vil også bli funnet der.
- Primærminne: Det primære lagringssystemet består av RAM (random access memory). Dette lagringssystemet er raskere enn det sekundære lagringssystemet, men det kan ikke lagre like mye informasjon, og det kan heller ikke gjøre det permanent, siden det er et flyktig minne som lagrer informasjon mens det er slått på. Det vil si at hver gang du slår av datamaskinen, slettes ikke programmene du har installert, men innholdet i denne RAM-en. Som sagt, når prosessen eller programmet lastes inn i RAM-en, overføres instruksjonene og dataene fra den kjørbare binærfilen fra den sekundære enheten til denne primære enheten, som CPU-en kan få tilgang til raskere.
- Cache: Hurtigbufferen er innebygd i CPU-en og er det raskeste minnesystemet, men den har også en veldig liten kapasitet og er ustabil. Dette minnesystemet er vanligvis delt inn i tre deler: L1, L2 og L3. Alle data som må behandles av ALU-en flyttes fra harddisken til RAM og deretter til hurtigbufferen. Når det er sagt, kan ikke ALU-en få tilgang til data direkte fra hurtigbufferen. Derfor trenger den et annet, enda mindre og raskere minne, som er neste punkt...
- CPU-registre: CPU-registeret er et veldig enkelt minne som består av veldig raske flip-flop-elementer. Avhengig av CPU-arkitekturen kan registrene endre størrelse. For eksempel kan de være 8-bit, 16-bit, 32-bit, 64-bit, osv. Videre kan antallet deres være variabelt, og alle utgjør CPU-ens registervindu eller fil. Det er i disse registrene at dataenheter, som ALU eller FPU, kan få tilgang til dataene som er lastet inn i dem. Så når en instruksjon hentes fra RAM til CPU i hentesyklusen, vil instruksjonen bli dekodet eller tolket av kontrollenheten, som vil bestemme hva utførelsen av den instruksjonen innebærer. For eksempel kan ADD r1, r2, r3 legge sammen dataene i register r2 + r3 og lagre resultatet i r1. På denne måten vil kontrollenheten sende denne opkoden til ALU, og be den om å legge sammen verdiene og plasseringen av dataene, i dette tilfellet de nødvendige registrene. ALU får deretter tilgang til dataene og utfører addisjonsoperasjonen. Slik fungerer dette hierarkiet.
Også, som du kanskje vet, den data og instruksjoner De mest brukte filene blir mellomlagret slik at de kan nås raskere hvis de trengs igjen i fremtiden. Som du kanskje tror, blir hvert mellomlagsnivå raskere:
- L1Dette er det første nivået, det raskeste av alle, med den laveste latensen. Dette betyr at færre klokkesykluser går tapt når man aksesserer det. Videre er dette minnet vanligvis delt inn i en L1D eller L1 for data, og en L1I eller L1 for instruksjoner. Dette betyr at instruksjoner og data ikke blandes.
- L2Dette er neste nivå av hurtigbuffer, og har større kapasitet enn L1, men er noe tregere, så det kreves flere sykluser for å få tilgang til den. Her vil både data og instruksjoner blandes, siden den er enhetlig.
- L3Dette nivået har større kapasitet enn L2, men er enda tregere enn L2. Og i likhet med L2 er det også enhetlig, og lagrer både data og instruksjoner. Hvis L3 er det siste nivået, er det også kjent som LLC (Last Level Cache), selv om andre systemer kan ha andre nivåer, for eksempel L4, osv.
Som du kan tenke deg, når CPU-en trenger å søke etter data eller instruksjoner for å øke ytelsen, vil den først søke i L1, siden den krever færrest klokkesykluser for tilgang. Hvis den ikke er der, vil den søke i L2, den nest raskeste. Og hvis den heller ikke er der, vil den søke i L3. Hvis den heller ikke er der, vil den søke i RAM, og så videre.
Hva er AVX-512 og hvordan fungerer det?
Settet av AVX-512 instruksjoner Det er den andre iterasjonen av AVX og kom til Intel-prosessorer i 2013. AVX står for Advanced Vector Extensions, og ble først introdusert i Intels Xeon Phi (Knights Landing) og kom senere til Intels server med Skylake-X-baserte Xeons.
I tillegg nådde AVX-512 instruksjonssettet også forbrukerutstyr, dvs. PC-er, med Cannon Lake-arkitekturen og støttet senere arkitekturene Ice Lake og Tiger Lake. Kanskje et av de mest kritiserte tiltakene som aldri burde ha blitt tatt, på den ene siden fordi det ikke var nok programvare til å dra nytte av disse instruksjonene, og på den andre siden fordi det gjorde disse enhetene mer komplekse.
Som forklart ovenfor, har ALU/FPU bare tilgang til dataene som finnes i CPU-registerAVX-instruksjonssettet øker størrelsen på disse registrene. Denne økningen gjør at flere datapunkter kan behandles med én enkelt instruksjon, noe som øker ytelsen.
Hovedformålet med dette settet med instruksjoner var akselerere oppgaver relatert til datakomprimering, bildebehandling og kryptografiske beregningerVed å tilby dobbelt så mye datakraft sammenlignet med AVX-256, ga instruksjonssettet AVX-512 betydelige ytelsesforbedringer. Ytelsen på disse Intel-CPU-ene ble imidlertid ikke doblet, slik mange kanskje tror.
Hvorfor avvikler Intel AVX-512?

Som forklart ovenfor, tilbyr AVX-512 instruksjonssettet flere fordeler i beregningsmessige beregninger, men ikke alt var velkommentDet er sant at populære biblioteker som TensorFlow bruker instruksjonssettet til å gi raskere beregninger på CPUer som støtter instruksjonssettet.
AMD tok først i bruk AVX-512 i Zen 4-baserte mikroprosessorer. Et fullstendig skifte mellom de to selskapene ...
Så hvorfor deaktiverer Intel AVX-512 på sine nyere Alder Lake-prosessorer? Vel, sannheten er at de ikke har blitt fjernet helt. For eksempel, i Aldersjø Vi må bestå av en heterogen flerkjernearkitektur, med høyytelses P-kjerner og høyeffektive E-kjerner.
Mens P-kjernene er basert på Golden Cove-mikroarkitekturen, og har muligheten til å utføre disse instruksjonene, i E-kjernene basert på Gracemont-mikroarkitekturen, Disse instruksjonene kan ikke utføresPlanleggeren for disse kjernene vil avvise slike instruksjoner for å holde disse kjernene mindre og mer energieffektive.
Alder Lake CPU-er og nyere støtter imidlertid ikke instruksjonssettet AVX-512, da det ellers ville være E-kjerner som ikke ville kunne kjøre visse programmer. De kan imidlertid brukes i andre CPU-er der Intel ikke fysisk har blandet disse kjernene, slik som i tilfellet med Xeon for HPC og servere, og til og med i noen datamaskiner der det er tillatt. deaktiver E-kjerner fra BIOS/UEFI.
Trenger man AVX-512 på en forbruker-CPU?

AVX-512-instruksjonssettet øker registerstørrelsen til en CPU for å forbedre ytelsen. økning i ytelse lar CPU-er behandle tall raskere, slik at brukere kan kjøre video-/lydkomprimeringsalgoritmer med høyere hastigheter.
Når det er sagt, kan denne økningen i ytelse bare observeres når instruksjonene som er definert i et program er optimalisert for å kjøre i AVX-512 instruksjonssettet. Ellers vil de være fullstendig ubrukelige, og gitt den lave bruken av AVX-512, skjer dette i få situasjoner.
Av denne grunn er instruksjonssettarkitekturer som AVX-512 bedre egnet for arbeidsbelastninger fra server og HPC, men ikke for den gjennomsnittlige forbrukeren. Derfor gir det ikke mye mening å gjøre det.
Så hvorfor har AMD integrert dem nå? Den gang gjorde de det bra ved å holde seg unna for å ikke få de samme problemene som Intel hadde i sin tid. Men nå har de gått i motsatt retning, og har også tatt dem i bruk. Og det kan være fordi mikroarkitekturene designet av AMD, som f.eks. Zen 4, brukes til både Ryzen- og Threadripper- og EPYC-brikker, og kanskje har de laget den samme for alle brikker, slik Intel gjorde den gangen. På denne måten kan AMD nå også jobbe med AVX-512 i servere, arbeidsstasjoner og HPC for å konkurrere med Xeon.
Hvorfor har Intel fjernet dem fra Alder Lake?

Intels støtte for AVX-512-instruksjoner med Alder Lake-prosessorene sine det har vært en dunkel affæreSelskapet opplyste opprinnelig at funksjonen ikke ville fungere på deres nye 12. generasjons prosessorer eller senere. Men de snudde senere da hovedkortleverandører fant forskjellige løsninger for å aktivere disse instruksjonene fra fastvaren.
På denne måten kan du Aktiver eller deaktiver dette alternativet fra BIOS/UEFI av hovedkortet, og dermed gi brukerne muligheten til å bruke AVX-512 eller ikke, avhengig av arbeidsmengdebehovet.
Det ser imidlertid ut til at Intel selger noen ikke-K-enheter, dvs. de som ikke er låst opp for overklokking, med AVX-512 deaktivert som standardOg selv om det ikke ser ut til å bli fjernet på maskinvarenivå for disse produktene, ville denne blokkeringen hindre brukere i å bruke dem.
Men det ser ut til at Intel har lekt med musen og musen, siden det endelig ser ut til at det amerikanske selskapet har valgt fysisk deaktivere støtte AVX-512-instruksjoner brukes i forbrukerbrikkene deres på silisiumnivå, så ingenting kan gjøres for å bruke disse instruksjonene, alt i navnet for å øke energieffektiviteten.
Det vil si, i oppsummering, at svingene Intel har gjort har vært:
- Han fortalte pressen at AVX-512 ikke ville være kompatibel med de nye hybridprosessorene.
- Før lanseringen dukket det opp en optimaliseringsguide som viste hvordan man bruker denne funksjonen.
- Intel benektet igjen at disse instruksjonene ble støttet, kanskje på grunn av all kritikken de hadde mottatt tidligere. Deretter fjernet de referansene fra denne veiledningen.
- Da Alder Lake ble utgitt, ble det oppdaget at instruksjonene fungerte på noen hovedkort med riktig firmware. Dette var noe hovedkortprodusentene gjorde mot Intels ønsker.
- Intel forble i utgangspunktet tause, men fortalte taiwansk presse at støtte for AVX-512 var til stede, men ikke som standard, så hvis noen ønsket å bruke det på egen risiko, kunne de det, akkurat som de påtar seg risikoen ved overklokking ...
- I fjor annonserte Intel at de endelig deaktiverte AVX-512 med en ny fastvare- eller mikrokodeoppdatering.
- Samme uke dukket det opp BIOS/UEFI-utgivelser som deaktiverte AVX-512-alternativet.
- MSI fant en måte å omgå denne Intel AVX-512-låsen, noe som muliggjør enkle endringer i BIOS/UEFI.
- Intel var ikke fornøyd med dette og bestemte seg til slutt for å deaktivere instruksjonssettet i maskinvaren, slik at det ikke kunne tukles med på noen måte. Derfor vil det være fysisk tilgjengelig på tidlige Alder Lake-bygg, mens det ikke vil være tilgjengelig på senere Alder Lake-bygg.
Så hvis du vil ha AVX-512 aktivert, må du kjøp Intel Xeon, som selvsagt er dyrere.
Under alt dette såpeoperaNå legger AMD til AVX-512-støtte til alle sine Zen 4-brikker, selv forbrukerbrikker. Så hvis du vil ha en prosessor til PC-en din som har AVX-512, er det beste alternativet akkurat nå en Ryzen 7000 (Zen 4).
Hva er VNNI?

Og for å avslutte, vil jeg ikke avslutte uten å snakke om AVX-512 VNNI, det vil si en utvidelse spesielt utviklet for å akselerere konvolusjonelle nevrale nettverksalgoritmer. Forkortelsen VNNI står for Vector Neural Network Instruksjoner.
Disse instruksjonene utvider de første AVX-512-utvidelsene, med fire nye instruksjoner for å øke hastigheten på nevrale nettverksløkker. Disse instruksjonene er:
VPDPBUSDDenne instruksjonen kan multiplisere de individuelle bytene (8 bit = 1 byte) til den første kildeoperand med de tilsvarende bytene til den andre kildeoperand, noe som gir 16-bits ordresultater som summeres og akkumuleres til en måloperand med to ord (32-bit).VPDPBUSDS: samme som ovenfor, bortsett fra at den mellomliggende sumoverløpet mettes ved 0x7FFF_FFFF/0x8000_0000 for positive/negative tall.VPDPWSSDI denne andre instruksjonen kan de individuelle ordene (16 bits) i den første kildeoperand multipliseres med det tilsvarende ordet i den andre kildeoperand, noe som gir mellomliggende ordresultater som legges til og akkumuleres i et dobbeltord (32 bits) i destinasjonsoperand.VPDPWSSDSSom du kan forestille deg, er den den samme som den forrige, bortsett fra at den mellomliggende sumoverløpet mettes ved 0x7FFF_FFFF/0x8000_0000 for positive/negative tall.
Hovedmotivasjonen bak AVX512 VNNI-utvidelsen er observasjonen av at mange tette konvolusjonelle nevrale nettverksløkker krever gjentatt multiplikasjon av to 16-bits eller to 8-bits verdier og akkumulering av resultatet i en 32-bits akkumulator. Dette er mulig ved hjelp av to instruksjoner, VPMADDWD som brukes til å multiplisere to 16-bits par og legge dem sammen etterfulgt av én VPADDD som legger opp den akkumulerte verdien.