Je sais qu'il est généralement recommandé d'utiliser -march = natif (si vous compilez pour la machine sur laquelle vous vous trouvez), afin que gcc détermine votre arch et cputype et génère le code le plus spécifique à la machine, mais comment fais ça? Utilise-t-il cpuid (sur chaque bras ou sur x86)? Quelles techniques sont utilisées sur les plates-formes sans instruction cpuid-like?Comment gcc détermine -march = native sur x86? Sur le bras?
Répondre
Bonne question.
Mon intuition était qu'il irait vérifier /proc/cpuinfo
. En fait, cela dépend de l'architecture sur laquelle il a été compilé. Il semble que host_detect_local_cpu
est la fonction responsable de cela. Son travail est de remplacer -march=native
soit par le bon -march=<...>
ou un ensemble de drapeaux (-mmmx
, -mno-avx
, etc) qui correspondent le plus possible le CPU actuel. Exemples pour i386
et arm
. i386
utilise cpuid
directement pour vérifier chaque fonctionnalité possible. arm
vérifie dans /proc/cpuinfo
pour la ligne CPU part
et a une table qui mappe d'une valeur de pièce de CPU à une génération de l'architecture et l'utilise directement dans -march=<...>
. Juste pour le plaisir, je vérifie d'autres architectures (je ne les connais pas).
- solaris sur
sparc
: utilise l'interfacekstat
- linux sur
sparc
: utilise/proc/cpuinfo
alpha
: utilise laimplver
instruction- darwin sur
rs6000
: utilise l'appel systèmehw.cpusubtype
- freebsd sur
rs6000
: utilise codé en durpowerpc
- linux sur
rs6000
: contrôles dans/proc/self/auxv
pour la valeur de la plate-forme dans l'interpréteur Elf de son propre processus - aix sur
rs6000
: utilise_system_configuration
(apparemment une structure globale)
- 1. Comment puis-je vérifier si gcc supporte -march = native?
- 2. est bras-eabi-gcc différent de bras-linux-androideabi-gcc
- 3. bras-eabi-gcc - cygwin
- 4. L'application native Android se bloque avec SIGILL sur x86
- 5. /bin/sh: 1: bras-linux-gcc: introuvable sur ubuntu
- 6. L'assemblage de GCC d'un programme vide sur x86, win32
- 7. Compilation croisée pour le bras à partir de x86
- 8. compiler GCC natif pour bras à l'aide du compilateur croisé
- 9. A propos de bras-eabi-gcc et la compilation croisée
- 10. problèmes compilant TCC sur Ubuntu pour le bras
- 11. comment régler un gcc sur la carte de bras pour qu'elle puisse se compiler
- 12. Détermine si le vidage de processus a été généré sur une machine x64 ou x86
- 13. Comment utiliser gcc pour compiler le code d'assemblage x86 sur un ordinateur x64
- 14. Que fait exactement -march = natif?
- 15. bras perdu kilobyte sur compilation
- 16. assembleur pour le montage de bras sur ubuntu beagleboard
- 17. Comment déterminer les options de bras GCC optimales à partir de/proc/cpuinfo?
- 18. Connecteur MySQL C++ sur Arch-Linux/bras
- 19. pthread_cancel se comporte différemment sur le bras et ppc?
- 20. Bibliothèques manquantes lors de l'installation de qt-everywhere pour la compilation croisée sur le bras
- 21. Benchmark du compilateur -march flag?
- 22. GCC/X86, Problèmes avec les sauts relatifs
- 23. Comment utiliser Gcc 4.6.0 libquadmath et __float128 sur x86 et x86_64
- 24. bras Gnu donnant erreur sur UBFX, instruction Bad
- 25. comment animer les bras de bras
- 26. PIC sur le GCC d'OSX
- 27. bras eabi-gcc [1] Erreur de syntaxe: '@ 4pO4' inattendu
- 28. Comment exécuter le binaire de bras sur la plate-forme Android?
- 29. compiler le code bras synamique
- 30. Boost bibliothèques C++ pour chaîne d'outils gcc-bras