Melhor resposta
assembler de 32 bits:
mov eax, 0
cpuid
test ecx, 0x0001
Naturalmente você gostaria de ter certeza de empurrar os quatro registros GP primeiro e estourá-los depois de verificar as sinalizações que está procurando. Existem outros sinalizadores relacionados a coisas como monitorar / esperar do SSE3 (bit 3 então 0x0080) ou funções suplementares (bit 9, então 0x0200) que você pode querer usar também.
Fácil de incorporar em C ou a maioria das linguagens de programação reais com assembler embutido presumindo que seu compilador vale a pena.
Resposta
AVX é o nome de uma das muitas extensões de vetor x86 da Intel. Está em uso desde a série Sandy Bridge / bulldozer de CPUs da Intel e AND respectivamente.
O que é uma extensão vetorial?
A arquitetura de CPU tradicional (processamento escalar) opera um modelo chamado SISD: instrução única, dados únicos. Você tem um núcleo de processador que opera em instruções sequencialmente, cada um operando em um único conjunto de operandos por vez.
Isso funciona bem para a maioria dos tipos de cargas de trabalho, mas geralmente não é adequado para alguns tipos de cargas de trabalho de computação intensiva. Considere a edição de fotos, por exemplo: se eu quisesse dobrar o brilho de uma imagem, teria que dobrar o brilho de uma imagem pixel por pixel, o que é lento. Cada pixel é na verdade independente dos outros, o que significa que há potencial para paralelismo massivo: dados recursos de computação suficientes e a arquitetura certa, pode-se teoricamente fazer todo o trabalho em uma única operação.
Insira os processadores vetoriais: eles operam em um modelo chamado SIMD. Em vez de operar em um único elemento, um por um, um processador vetorial concatena muitos elementos de dados em um grande elemento (normalmente 256 bits ou mais) e, em seguida, executa as operações nesse elemento. O resultado é que um processador vetorial pode trabalhar em muitos elementos de dados em uma única operação, quando seriam necessárias várias operações para um processador tradicional fazer isso.
Noções básicas de programação SIMD
Arquiteturas de CPU tradicionais, como X86, obviamente não foram projetadas para operação SIMD. Ao longo dos anos, a Intel adicionou continuamente extensões ao ISA x86 para melhorar sua funcionalidade, e as extensões SIMD foram algumas das primeiras a aparecer.
Tudo começou com MMX no Pentium, mas isso tinha limitações gritantes. Mais tarde, a Intel adicionou a extensão do conjunto de instruções SSE, que removeu algumas dessas limitações. Eles continuaram a iterar no SSE na década seguinte, até que finalmente introduziram o AVX.
O AVX introduziu algumas melhorias bastante significativas sobre seu predecessor, SSE4.x
O tamanho do registro vetorial foi aumentado de 128 bits para 256 bits, dobrando a taxa de transferência potencial. As instruções foram do formato tradicional de 2 operandos (a = a + b) para um formato de 3 operandos ( a = b + c), melhorando a flexibilidade. As regras de alinhamento também foram relaxadas.