Beste svaret
32 biters samler:
mov eax, 0
cpuid
test ecx, 0x0001
Naturligvis du vil du være sikker på at du skyver de fire fastlegeregistrene først og skyver dem når du har sjekket flaggene du leter etter. Det er andre flagg relatert til ting som SSE3s monitor / wait (bit 3 så 0x0080) eller tilleggsfunksjoner (bit 9, så 0x0200) du kanskje også vil bruke.
Lett nok å innlemme i C eller de fleste ekte programmeringsspråk med innebygd montør forutsatt at kompilatoren din er verdt å gjøre.
Svar
AVX er navnet på en av mange x86-vektorutvidelser fra Intel. Den har vært i bruk siden Sandy Bridge / Bulldozer-serien av CPUer fra henholdsvis Intel og AND.
Hva er en vektorutvidelse?
Tradisjonell CPU-arkitektur (skalarbehandling) fungerer på en modell kalt SISD: enkeltinstruksjon, enkeltdata. Du har en prosessorkjerne som fungerer på instruksjoner sekvensielt, hver opererer på et enkelt sett med operander om gangen.
Dette fungerer bra for de fleste typer arbeidsbelastninger, men det er generelt lite egnet for noen typer beregningsintensive arbeidsbelastninger. Tenk for eksempel på fotoredigering: hvis jeg ønsker å doble lysstyrken på et bilde, må jeg doble lysstyrken på et bilde piksel for piksel, noe som er tregt. Hver piksel er faktisk uavhengig av andre, noe som betyr at det er potensiale for massiv parallellitet: gitt nok databehandlingsressurser og riktig arkitektur, kan man teoretisk gjøre alt som fungerer i en enkelt operasjon.
Skriv inn vektorprosessorer: disse opererer på en modell som heter SIMD. I stedet for å operere på et enkelt element en etter en, sammenkobler en vektorprosessor mange dataelementer til ett stort element (vanligvis 256 bits eller mer), og utfører deretter operasjoner på det. Resultatet er at en vektorprosessor kan arbeide på mange dataelementer i en enkelt operasjon, når det vil ta flere operasjoner for en tradisjonell prosessor å gjøre det.
Grunnleggende om SIMD-programmering
Tradisjonelle CPU-arkitekturer som X86 var åpenbart ikke designet for SIMD-drift. Gjennom årene har Intel kontinuerlig lagt til utvidelser til x86 ISA for å forbedre funksjonaliteten, og SIMD-utvidelser var noen av de tidligste som dukket opp.
Det startet med MMX på Pentium, men det hadde ganske skarpe begrensninger. Senere la Intel til SSE-instruksjonsutvidelsen, som fjernet noen av disse begrensningene. De gjentok videre SSE i det kommende tiåret, til de til slutt introduserte AVX.
AVX introduserte noen ganske betydelige forbedringer. over forgjengeren, SSE4.x
Størrelsen på vektorregisteret ble økt fra 128bit til 256 bit, og doblet potensiell gjennomstrømning. Instruksjonene gikk fra det tradisjonelle 2 operandformatet (a = a + b) til et 3 operandformat ( a = b + c), forbedrer fleksibiliteten. Justeringsreglene ble også avslappet.