Bästa svaret
32-bitars assembler:
mov eax, 0
cpuid
test ecx, 0x0001
Naturligtvis du vill se till att du först trycker på de fyra GP-registren och dyker upp dem när du har kontrollerat vilka flaggor du letar efter. Det finns andra flaggor relaterade till saker som SSE3s monitor / wait (bit 3 så 0x0080) eller tilläggsfunktioner (bit 9, så 0x0200) du kanske också vill använda.
Lätt nog att införliva i C eller de flesta ”riktiga” programmeringsspråk med inline-assembler förutsatt att din kompilator är värt en jävla.
Svar
AVX är namnet på en av många x86-vektortillägg från Intel. Den har använts sedan Sandy Bridge / Bulldozer-serien av processorer från Intel respektive AND.
Vad är en vektortillägg?
Traditionell CPU-arkitektur (skalarbehandling) fungerar en modell som heter SISD: enstaka instruktioner, enstaka data. Du har en processorkärna som fungerar på instruktioner i följd, var och en fungerar på en enda uppsättning operander åt gången.
Detta fungerar bra för de flesta typer av arbetsbelastningar, men det är i allmänhet dåligt lämpligt för vissa typer av beräkningsintensiva arbetsbelastningar. Tänk till exempel på fotoredigering: om jag ville fördubbla en bilds ljusstyrka, måste jag fördubbla ljusstyrkan för en bild pixel för pixel, vilket är långsamt. Varje pixel är faktiskt oberoende av andra, vilket betyder att det finns massiv parallellism: med tillräckligt med beräkningsresurser och rätt arkitektur kan man teoretiskt göra allt som fungerar i en enda operation.
Ange vektorprocessorer: dessa fungerar på en modell som heter SIMD. I stället för att arbeta på ett enda element en efter en sammanfogar en vektorprocessor många dataelement till ett stort element (vanligtvis 256 bitar eller mer) och utför sedan operationer på det. Resultatet är att en vektorprocessor kan arbeta på många dataelement i en enda operation, när det skulle ta flera operationer för en traditionell processor att göra det.
Grunderna i SIMD-programmering
Traditionella CPU-arkitekturer som X86 var uppenbarligen inte utformade för SIMD-drift. Under åren har Intel kontinuerligt lagt tillägg till x86 ISA för att förbättra dess funktionalitet, och SIMD-tillägg var några av de tidigaste att visas.
Det började med MMX på Pentium, men det hade ganska uppenbara begränsningar. Senare lade Intel till SSE-instruktionsuppsättningstillägget, som tog bort några av dessa begränsningar. De upprepade ytterligare på SSE under det kommande decenniet tills de så småningom introducerade AVX. över sin föregångare, SSE4.x
Vektorregisterstorleken ökade från 128 bitar till 256 bitar, vilket fördubblade den potentiella genomströmningen. Instruktionerna gick från det traditionella 2 operandformatet (a = a + b) till ett 3 operandformat ( a = b + c), förbättrad flexibilitet. Justeringsreglerna lindrades också.