Bedste svar
32 bit assembler:
mov eax, 0
cpuid
test ecx, 0x0001
Naturligvis dig vil du sørge for at skubbe de fire lægeregistre først og pope dem, når du har kontrolleret, hvilke flag du leder efter. Der er andre flag relateret til ting som SSE3s skærm / vent (bit 3 så 0x0080) eller supplerende funktioner (bit 9, så 0x0200), du måske også vil bruge.
Let nok til at indarbejde i C eller de fleste rigtige programmeringssprog med inline-samler forudsat, at din compiler er værd at fordømme.
Svar
AVX er navnet på en af mange x86-vektorudvidelser fra Intel. Det har været i brug siden den sandede bro / bulldozer-serie af CPUer fra henholdsvis Intel og AND.
Hvad er en vektorudvidelse?
Traditionel CPU-arkitektur (skalarbehandling) fungerer på en model kaldet SISD: enkelt instruktion, enkelt data. Du har en processorkerne, der fungerer på instruktioner sekventielt, hver opererer på et enkelt sæt operander ad gangen.
Dette fungerer godt for de fleste typer arbejdsbelastninger, men det er generelt dårligt egnet til nogle typer beregningsintensive arbejdsbelastninger. Overvej f.eks. Fotoredigering: hvis jeg ville fordoble et billedes lysstyrke, skulle jeg fordoble lysstyrken på et billede pixel for pixel, hvilket er langsomt. Hver pixel er faktisk uafhængig af andre, hvilket betyder, at der er potentiale for massiv parallelisme: givet tilstrækkelige beregningsressourcer og den rigtige arkitektur, kunne man teoretisk gøre alt det, der fungerer i en enkelt operation.
Indtast vektorprocessorer: disse fungerer på en model kaldet SIMD. I stedet for at arbejde på et enkelt element en efter en sammenkæder en vektorprocessor mange dataelementer til et stort element (typisk 256 bits eller mere) og udfører derefter operationer på det. Resultatet er, at en vektorprocessor kan arbejde på mange dataelementer i en enkelt operation, når det tager flere operationer for en traditionel processor at gøre det.
Grundlæggende om SIMD-programmering
Traditionelle CPU-arkitekturer såsom X86 var tydeligvis ikke designet til SIMD-drift. I årenes løb har Intel løbende tilføjet udvidelser til x86 ISA for at forbedre dets funktionalitet, og SIMD-udvidelser var nogle af de tidligste, der kom frem.
Det startede med MMX på Pentium, men det havde ret skarpe begrænsninger. Senere tilføjede Intel udvidelsen SSE-instruktionssæt, som fjernede nogle af disse begrænsninger. De gentog sig yderligere på SSE i det kommende årti, indtil de til sidst introducerede AVX.
AVX introducerede nogle ret betydelige forbedringer over sin forgænger, SSE4.x
Størrelsen på vektorregisteret blev øget fra 128bit til 256 bit, hvilket fordoblede den potentielle kapacitet. Instruktionerne gik fra det traditionelle 2 operandformat (a = a + b) til et 3 operandformat ( a = b + c), hvilket forbedrer fleksibiliteten. Justeringsregler blev også lempet.