web-dev-qa-db-fra.com

Comment savoir si une machine Linux prend en charge les instructions AVX / AVX2?

Je suis sur des machines SUSE Linux Enterprise 10/11. Je lance mes régressions vers une batterie de machines exécutant des processeurs Intel. Certains de mes tests échouent car mes outils sont construits à l'aide d'une bibliothèque qui nécessite la prise en charge des instructions AVX/AVX2. Je reçois un Illegal exception Erreur.

Sous Linux, existe-t-il des commandes que je peux utiliser pour déterminer quel est le code CPU/nom de famille?

Je crois qu'AVX et AVX2 sont disponibles à partir de la famille Intel SandyBridge et Haswell, respectivement.

19
user4979733

Sur Linux (ou sur les machines Unix), les informations sur votre processeur sont dans /proc/cpuinfo. Vous pouvez en extraire des informations à la main, ou avec une commande grep (grep flags /proc/cpuinfo).

De plus, la plupart des compilateurs définiront automatiquement __AVX2__ afin que vous puissiez également vérifier cela.

17
hr0m

Exécutez cette commande:

grep avx /proc/cpuinfo

Ou

grep avx2 /proc/cpuinfo

Cela vous donnera:

drapeaux: FPU vme de pse tsc msr pae mce CX8 apic septembre mtrr pge mca CMOV pat pse36 clflush MMX risque de règlement sse SSE2 ss syscall nx pdpe1gb rdtscp lm CONSTANT_TSC Arch_perfmon rep_good nopl eagerfpu PNI pclmulqdq VMX SSSE3 CX16 PCID sse4_1 sse4_2 x2apic POPCNT tsc_deadline_timer aes xsave AVX AVX2 hyperviseur lahf_lm arat tsc_adjust xsaveopt

27
khrm

Vous pouvez également exécuter lscpu et consulter la liste des instructions à la fin.

4
Ibrahim A

Vous pouvez tester la disponibilité des jeux d'instructions SIMD et d'autres fonctionnalités du processeur en examinant /proc/cpuinfo, par exemple.

$ grep avx2 /proc/cpuinfo
flags       : fpu vme ... sse4_1 sse4_2 ... bmi1 avx2 ... bmi2 ...
2
Paul R