/arch (x86)
Spécifie l'architecture pour la génération de code sur x86.Consultez également /arch (x64) et /arch (ARM).
/arch:[IA32|SSE|SSE2|AVX]
Arguments
/arch:IA32
Ne spécifie aucune instruction améliorée et spécifie également x87 pour les calculs de virgule flottante./arch:SSE
Active l'utilisation des instructions SSE de./arch:SSE2
Active l'utilisation des instructions SSE2.C'est l'instruction par défaut sur les plateformes x86 si aucune option d' /arch n'est spécifiée./arch:AVX
Active l'utilisation d'Intel a évolué des instructions vectorielles d'extensions.
Notes
Les instructions SSE2 et SSE existent sur différents processeurs AMD et Intel.Les instructions AVX existent sur les processeurs Intel Sandy Bridge et AMD Bulldozer.
Le d' _M_IX86_FP indique que, le cas échéant, l'option du compilateur pour /arch a été utilisée.Pour plus d'informations, consultez Macros prédéfinies.
L'optimiseur choisit quand et comment les instructions SSE et SSE2 doivent être utilisées lorsque /arch est spécifié.Elle utilise les instructions SSE et SSE2 pour des calculs à virgule flottante scalaires lorsqu'il détermine qu'il est plus rapide pour utiliser les instructions SSE/SSE2 et s'inscrit au lieu de la pile de registre x87 à virgule flottante.Votre code utilise donc un mélange de x87 et de SSE/SSE2 pour les calculs en virgule flottante.En outre, avec /arch:SSE2, les instructions SSE2 peuvent être utilisées pour certaines opérations d'entiers 64 bits.
En plus d'utiliser les instructions de SSE2 et SSE, le compilateur utilise également des autres instructions qui sont présentes sur les révisions de processeur qui prennent en charge SSE et SSE2.Un exemple est l'instruction CMOV qui est apparue en premier sur la révision Pentium Pro des processeurs Intel.
Lorsque vous utilisez /clr pour compiler, /arch n'a aucun effet sur la génération du code pour les fonctions managées./arch affecte seulement la génération du code pour les fonctions natives.
/arch et /QIfist ne peuvent pas être utilisés sur le même compiland.En particulier, si vous n'utilisez pas _controlfp pour modifier le mot de commande de débogage gel, puis code de démarrage d'exécution définit le champ de précision- contrôle de mot de x87 FPU à 53 bits.Par conséquent, chaque valeur float et exécution de double dans une expression utilise un significand de 53 bits et un exposant de 15 bits.Toutefois, chaque opération en simple précision de SSE utilise un significand 24 bits et un exposant de 8 bits, les opérations et SSE2 en double précision utilisent un significand de 53 bits et un exposant de 11 bits.Pour plus d'informations, consultez _control87, _controlfp, __control87_2.Ces différences sont possibles dans une arborescence d'expression, mais pas lorsqu'une assignation d'utilisateur est impliquée après chaque sous-expression.Vous devez tenir compte des éléments suivants :
r = f1 * f2 + d; // Different results are possible on SSE/SSE2.
Par rapport à :
t = f1 * f2; // Do f1 * f2, round to the type of t.
r = t + d; // This should produce the same overall result
// whether x87 stack is used or SSE/SSE2 is used.
controlfp ne change pas les bits de contrôle MXCSR.Par conséquent, avec /arch:SSE2, toute fonctionnalité qui dépend de l'utilisation d' controlfp est désactivée.
Pour définir cette option du compilateur pour SSE ou SSE2 dans Visual Studio
Ouvrez la boîte de dialogue Pages de propriété du projet.Pour plus d'informations, consultez Comment : ouvrir les pages de propriétés d'un projet.
Sélectionnez le dossier C/C++ .
Sélectionnez la page de propriétés Génération de code.
Modifiez la propriété Activation du jeu d'instructions amélioré.
Pour définir l'option du compilateur /arch:AVX dans Visual Studio
Ouvrez la boîte de dialogue Pages de propriété du projet.Pour plus d'informations, consultez Comment : ouvrir les pages de propriétés d'un projet.
Sélectionnez le dossier C/C++ .
Sélectionnez la page de propriétés Ligne de commande .
Dans la zone Options supplémentaires, ajoutez /arch: AVX.
Pour définir cette option du compilateur par programmation
- Consultez EnableEnhancedInstructionSet.