Je compile mon application C ++ en utilisant GCC 4.3. Au lieu de sélectionner manuellement les indicateurs d'optimisation que j'utilise -march=native
, qui en théorie devraient ajouter tous les indicateurs d'optimisation applicables au matériel sur lequel je compile. Mais comment puis-je vérifier quels indicateurs utilise-t-il réellement?
165
--param l1-cache-size=64 --param l1-cache-line-size=64 --param l2-cache-size=512
-v
option, bien que dans le cadre de lacc1
ligne de commande ...-march=native
et il fonctionnera partout juste après:gcc -Q --help=target
.Pour voir les indicateurs de ligne de commande, utilisez:
Si vous voulez voir les définitions du compilateur / précompilateur définies par certains paramètres, procédez comme suit:
la source
native
correspond vraiment.Il devrait être (
-###
est similaire à-v
):Pour afficher les "vrais" indicateurs natifs pour gcc.
Vous pouvez les faire apparaître plus "clairement" avec une commande:
et vous pouvez vous débarrasser des drapeaux avec -mno- * avec:
la source
Si vous voulez savoir comment configurer une compilation croisée non native, j'ai trouvé cela utile:
Sur la machine cible,
Ensuite, utilisez ceci sur la machine de construction:
la source
echo | gcc-6 -dM -E - -march=sandybridge | grep AVX #define __AVX__ 1
mais les tailles de cache semblent absentes.Je vais jeter mes deux cents dans cette question et suggérer une extension un peu plus verbeuse de la réponse d'Elias. Depuis gcc 4.6, l'exécution de
gcc -march=native -v -E - < /dev/null
émet une quantité croissante de spam sous forme d'-mno-*
indicateurs superflus . Ce qui suit va les dépouiller:Cependant, je n'ai vérifié l'exactitude de cela que sur deux processeurs différents (un Intel Core2 et AMD Phenom), donc je suggère également d'exécuter le script suivant pour être sûr que tous ces
-mno-*
indicateurs peuvent être supprimés en toute sécurité.Je n'ai pas trouvé de différence entre
gcc -march=native -v -E - < /dev/null
etgcc -march=native -### -E - < /dev/null
autres que certains paramètres cités - et des paramètres qui ne contiennent pas de caractères spéciaux, donc je ne suis pas sûr dans quelles circonstances cela fait une réelle différence.Enfin, notez que cela a
--march=native
été introduit dans gcc 4.2, avant lequel il ne s'agit que d'un argument non reconnu.la source