Beste antwoord
32 bit assembler:
mov eax, 0
cpuid
test ecx, 0x0001
Natuurlijk Ik wil er zeker van zijn dat je eerst de vier GP-registers pusht en ze laat poppen als je eenmaal hebt gecontroleerd welke vlaggen je zoekt. Er zijn andere vlaggen gerelateerd aan zaken als SSE3s monitor / wait (bit 3 dus 0x0080) of aanvullende functies (bit 9, dus 0x0200) die je misschien ook wilt gebruiken.
Makkelijk genoeg om op te nemen in C of de meeste echte programmeertalen met inline assembler, ervan uitgaande dat je compiler de moeite waard is.
Antwoord
AVX is de naam van een van de vele x86-vectorextensies van Intel. Het is in gebruik sinds de sandy bridge / bulldozer-serie CPUs van respectievelijk Intel en AND.
Wat is een vectorextensie?
Traditionele CPU-architectuur (scalaire verwerking) werkt op een model met de naam SISD: enkele instructie, enkele gegevens. Je hebt een processorkern die opeenvolgend volgens instructies werkt, elk met een enkele set operanden tegelijk.
Dit werkt goed voor de meeste soorten workloads, maar het is over het algemeen niet geschikt voor sommige typen rekenintensieve workloads. Overweeg bijvoorbeeld fotobewerking: als ik de helderheid van een afbeelding wil verdubbelen, zou ik de helderheid van een afbeelding pixel voor pixel moeten verdubbelen, wat traag is. Elke pixel is in feite onafhankelijk van andere, wat betekent dat er potentieel is voor massaal parallellisme: met voldoende rekenmiddelen en de juiste architectuur zou men theoretisch al dat werk in een enkele operatie kunnen doen.
Voer vectorprocessors in: deze werken op een model genaamd SIMD. In plaats van één voor één op een enkel element te werken, voegt een vectorprocessor veel data-elementen samen tot één groot element (typisch 256 bits of meer), en voert daar vervolgens bewerkingen op uit. Het resultaat is dat een vectorprocessor in één bewerking aan veel gegevenselementen kan werken, terwijl het voor een traditionele processor meerdere bewerkingen zou kosten om dit te doen.
Basisprincipes van SIMD-programmering
Traditionele CPU-architecturen zoals X86 waren duidelijk niet ontworpen voor SIMD-werking. In de loop der jaren heeft Intel voortdurend uitbreidingen aan de x86 ISA toegevoegd om de functionaliteit ervan te verbeteren, en SIMD-uitbreidingen waren enkele van de eersten die verschenen.
Het begon met MMX op de Pentium, maar dat had behoorlijk wat opvallende beperkingen. Later voegde Intel de extensie SSE-instructieset toe, waarmee een aantal van deze beperkingen werd verwijderd. Ze herhaalden SSE in het komende decennium, totdat ze uiteindelijk AVX introduceerden.
AVX introduceerde een aantal behoorlijk significante verbeteringen vergeleken met zijn voorganger, SSE4.x
De vectorregistergrootte werd vergroot van 128 bit naar 256 bit, waardoor de potentiële doorvoersnelheid verdubbelde. De instructies gingen van het traditionele 2 operand formaat (a = a + b) naar een 3 operand formaat ( a = b + c), wat de flexibiliteit verbetert. De regels voor afstemming werden ook versoepeld.