Use el terminal OSX para averiguar el conjunto de instrucciones de la CPU (AVX, SSE y similares)

Tengo diferentes máquinas con OSX 10.12 y 10.13, que usan diferentes procesadores. Estoy tratando de obtener desde la terminal, una cadena que me muestre qué instrucciones de CPU son compatibles con esa máquina; para que pueda usar el software apropiado (algunos de los programas requieren instrucciones específicas para estar presentes en la CPU, y si esa CPU no las admite, el software funcionará incorrectamente o fallará).

Verifiqué la consulta del perfilador del sistema a través de la terminal, pero solo puedo obtener el tipo y modelo de CPU, no el conjunto de instrucciones de CPU que admite; y si hiciera esto a mano, obteniendo cada modelo de CPU y verificando en línea, tomaría horas.

  • Las instrucciones de la CPU son este conjunto de instrucciones como MMX, AVX, SSE; que permiten que su CPU funcione de cierta manera. Con los años, se agregan al conjunto de instrucciones de la CPU base, por lo que la CPU moderna en la actualidad admite más de 15 tipos de instrucciones diferentes.
Tenía dudas si era una mejor pregunta para SO o para AD. Si esto es posible a través de un comando de terminal estándar, entonces AD es apropiado; pero si escribo en un script o código con bibliotecas externas, entonces puede ser más adecuado para SO.
¿Se opondría a cambiar esto con una edición para hacer esto sobre cómo probar una Mac y obtener datos de la CPU? Eso elimina la duda si esto está fuera de tema. Además, qué es exactamente en términos técnicos o términos prácticos un "conjunto de instrucciones de CPU". ¿Estás buscando saber si una Mac es Intel o PPC? Tendrá que editar eso para que cualquiera sepa cómo responder.
Hola Mike, no hay objeciones aquí; Creo que es apropiado obtener la jerga correcta en la pregunta, para que alguien no la marque como fuera de tema. ¡Gracias!

Respuestas (2)

Ingresar

sysctl -a | grep cpu.feat

obtener una lista como

machdep.cpu.features: FPU VME DE PSE TSC MSR PAE MCE CX8 APIC SEP MTRR PGE MCA CMOV PAT PSE36 CLFSH DS ACPI MMX FXSR SSE SSE2 SS HTT TM PBE SSE3 PCLMULQDQ DTES64 MON DSCPL VMX EST TM2 SSSE3 CX16 TPR PDCM SSE4.1 SSE4.2 x2APIC POPCNT AES PCID XSAVE OSXSAVE TSCTMR AVX1.0
machdep.cpu.feature_bits: 2286390173542120447

Alternativamente (evitar el grep y ser mucho más rápido, lo que podría ayudarlo a ejecutar esto a menudo dentro de un script)

sysctl machdep.cpu.features
sysctl machdep.cpu.features machdep.cpu.feature_bits

le da solo la lista (o ambas) directamente.

O simplemente usa: sysctl machdep.cpupara obtenerlos todos

machdep.cpu.features: FPU VME DE PSE TSC MSR PAE MCE CX8 APIC SEP MTRR PGE MCA CMOV PAT PSE36 CLFSH DS ACPI MMX FXSR SSE SSE2 SS HTT TM PBE SSE3 PCLMULQDQ DTES64 MON DSCPL VMX EST TM2 SSSE3 FMA CX16 TPR PDCM SSE4.1 SSE4.2 x2APIC MOVBE POPCNT AES PCID XSAVE OSXSAVE SEGLIM64 TSCTMR AVX1.0 RDRAND F16C -- Esta es la salida de una MacMini de finales de 2014 con sistema Catalina 10.15.7 + procesador Intel Core i5 de doble núcleo de 1,4 GHz + gráficos Intel HD 5000 GPU de 1536 MB

Solo para extender la respuesta de LangLangC , por alguna razón, AVX2 no aparece en la machdep.cpu.featureslista sino en una lista separada: machdep.cpu.leaf7_features. Para verificar todas las banderas compatibles, puede usar:

/usr/sbin/sysctl -n machdep.cpu.features machdep.cpu.leaf7_features

Dando como resultado una salida como

FPU VME DE PSE TSC MSR PAE MCE CX8 APIC SEP MTRR PGE MCA CMOV PAT PSE36 CLFSH DS ACPI MMX FXSR SSE SSE2 SS HTT TM PBE SSE3 PCLMULQDQ DTES64 MON DSCPL VMX SMX EST TM2 SSSE3 FMA CX16 TPR PDCM SSE4.1 SSE4.2 x2APIC MOVBE POPCNT AES PCID XSAVE OSXSAVE SEGLIM64 TSCTMR AVX1.0 RDRAND F16C
RDWRFSGS TSC_THREAD_OFFSET SGX BMI1 HLE AVX2 SMEP BMI2 ERMS INVPCID RTM FPU_CSDS MPX RDSEED ADX SMAP CLFSOPT IPT MDCLEAR TSXFA IBRS STIBP L1DF SSBD
Ya contestado arriba. Sugeriría sysctl machdep.cpuconseguirlos todos.