Meilleure réponse
Assembleur 32 bits:
mov eax, 0
cpuid
test ecx, 0x0001
Naturellement vous Je voudrais vous assurer de pousser les quatre registres GP en premier et de les ouvrir une fois que vous avez vérifié les indicateurs que vous recherchez. Il y a dautres indicateurs liés à des choses comme le moniteur / attente de SSE3 (bit 3 donc 0x0080) ou des fonctions supplémentaires (bit 9, donc 0x0200) que vous voudrez peut-être utiliser également.
Assez facile à incorporer dans C ou la plupart des « vrais » langages de programmation avec un assembleur intégré en supposant que votre compilateur en vaut la peine.
Réponse
AVX est le nom de lune des nombreuses extensions vectorielles x86 dIntel. Elle est utilisée depuis la série de CPU Sandy Bridge / Bulldozer dIntel et AND respectivement.
Quest-ce quune extension vectorielle?
Larchitecture CPU traditionnelle (traitement scalaire) fonctionne sur un modèle appelé SISD: instruction unique, données uniques. Vous avez un cœur de processeur qui fonctionne sur des instructions séquentiellement, chacune fonctionnant sur un seul ensemble dopérandes à la fois.
Cela fonctionne bien pour la plupart des types de charges de travail, mais il est généralement mal adapté à certains types de charges de travail intensives en calcul. Prenons lexemple de la retouche photo: si je voulais doubler la luminosité dune image, je devrais doubler la luminosité dune image pixel par pixel, ce qui est lent. Chaque pixel est en fait indépendant des autres, ce qui signifie quil y a un potentiel pour parallélisme massif: avec suffisamment de ressources de calcul et la bonne architecture, on pourrait théoriquement faire tout cela en une seule opération.
Entrez les processeurs vectoriels: ceux-ci fonctionnent sur un modèle appelé SIMD. Au lieu dopérer sur un seul élément un par un, un processeur vectoriel concatène de nombreux éléments de données en un seul grand élément (généralement 256 bits ou plus), puis effectue des opérations sur celui-ci. Le résultat étant qu’un processeur vectoriel peut travailler sur de nombreux éléments de données en une seule opération, alors qu’il faudrait plusieurs opérations à un processeur traditionnel pour le faire.
Bases de la programmation SIMD
Les architectures CPU traditionnelles telles que X86 nétaient évidemment pas conçues pour le fonctionnement SIMD. Au fil des ans, Intel a continuellement ajouté des extensions à lISA x86 pour améliorer ses fonctionnalités, et les extensions SIMD ont été parmi les premières à apparaître.
Cela a commencé avec MMX sur le Pentium, mais cela avait Limitations flagrantes. Plus tard, Intel a ajouté lextension du jeu dinstructions SSE, qui a supprimé certaines de ces limitations. Ils ont continué à répéter sur SSE dans la décennie à venir, jusquà ce quils aient finalement introduit AVX.
AVX a introduit des améliorations assez importantes par rapport à son prédécesseur, SSE4.x
La taille du registre vectoriel a été augmentée de 128 bits à 256 bits, doublant le débit potentiel. Les instructions sont passées du format traditionnel à 2 opérandes (a = a + b) à un format à 3 opérandes ( a = b + c), améliorant la flexibilité. Les règles dalignement ont également été assouplies.