¿Cómo puede saber, desde la línea de comandos, cuántos núcleos hay en la máquina cuando ejecuta Mac OS X? En Linux, uso:
x=$(awk '/^processor/ {++n} END {print n+1}' /proc/cpuinfo)
No es perfecto, pero está cerca. Esto está destinado a alimentarse make, por lo que da un resultado 1 mayor que el número real. Y sé que el código anterior se puede escribir más denso en Perl o se puede escribir usando grep, wc y cut, pero decidí que lo anterior era una buena compensación entre la concisión y la legibilidad.
EDICIÓN MUY TARDÍA: Solo para aclarar: estoy preguntando cuántos núcleos lógicos hay disponibles, porque esto corresponde con cuántos trabajos simultáneos quiero makegenerar. La respuesta de jkp, refinada por Chris Lloyd, fue exactamente lo que necesitaba. YMMV.

grep ^processor /proc/cpuinfo | wc -lnproccomando.Respuestas:
Puede hacer esto usando la utilidad sysctl :
fuente
sysctl hw.physicalcpuosysctl hw.logicalcpu, y en general,sysctl hwtodas las opciones.Aún más fácil:
fuente
system_profiler SPHardwareDataTypeque puedo creer `Identificador del modelo: MacBookPro9,2 Nombre del procesador: Intel Core i5 Velocidad del procesador: 2.5 GHz Número de procesadores: 1 Número total de núcleos: 2`Esto debería ser multiplataforma. Al menos para Linux y Mac OS X.
Un poco lento pero funciona.
fuente
Para hacer esto en C, puede usar la familia de funciones sysctl (3):
Los valores interesantes para usar en lugar de "hw.logicalcpu", que cuenta los núcleos, son:
fuente
system_profiler SPHardwareDataTypemuestra que tengo 1 procesador y 4 núcleos.Sin embargo, sysctl no está de acuerdo:
Pero sysctl parece correcto, ya que cuando ejecuto un programa que debería ocupar todas las ranuras de CPU, veo que este programa toma cerca del 800% del tiempo de CPU (en
top):fuente
sysctl hw.physicalcpumostrará cuántos núcleos de CPU físicos están disponibles para usted,sysctl hw.logicalcpumostrará cuántos CPU lógicos están disponibles para usted. Los sistemas operativos como Windows / OSX / Linux hacen todo el trabajo para que parezca que tienes múltiples CPU (independientemente de qué tipo sea). Los sistemas operativos como Linux le permiten configurar qué CPU, núcleos y subprocesos se pueden utilizar.fuente
grep -iUsa el
system_profiler | grep "Cores"comando.Tengo un:
Según Wikipedia, ( http://en.wikipedia.org/wiki/Intel_Core#Core_i7 ) no hay Core i7 con 8 núcleos físicos, por lo que la idea de Hyperthreading debe ser el caso. Ignorar
sysctly usar elsystem_profilervalor para la precisión. La verdadera pregunta es si puede ejecutar eficientemente aplicaciones con 4 núcleos (¿trabajos de compilación largos?) Sin interrumpir otros procesos.Ejecutar un compilador en paralelo con 4 núcleos no parece afectar dramáticamente las operaciones normales del sistema operativo. Entonces, quizás tratarlo como 8 núcleos no sea tan malo.
fuente
Como dijo jkp en un comentario, eso no muestra el número real de núcleos físicos. para obtener la cantidad de núcleos físicos, puede usar el siguiente comando:
fuente
make, por lo que la respuesta de jkp (número de núcleos lógicos) se ajusta mejor.El siguiente comando le brinda toda la información sobre su CPU
fuente
ACLARACIÓN
Cuando se hizo esta pregunta, el OP no dijo que quería la cantidad de núcleos LÓGICOS en lugar de la cantidad real de núcleos, por lo que esta respuesta lógicamente (sin juego de palabras) responde con una forma de obtener el verdadero número de núcleos físicos reales, no El número que el sistema operativo intenta virtualizar a través del vudú hyperthreading.
ACTUALIZACIÓN PARA MANEJAR LA FALLA EN YOSEMITE
Debido a un error extraño en OS X Yosemite (y posiblemente versiones más nuevas, como el próximo El Capitan), he hecho una pequeña modificación. (La versión anterior todavía funcionaba perfectamente si ignoraba STDERR, que es todo lo que la modificación hace por usted).
Cualquier otra respuesta dada aquí tampoco
bundle install --jobs 3donde desea que el número en lugar de3sea uno menor que el número de núcleos que tienes, o al menos no más que el número de núcleos)La forma de obtener solo la cantidad de núcleos, de manera confiable, correcta, razonablemente rápida y sin información adicional o incluso caracteres adicionales alrededor de la respuesta, es esta:
fuente
sysctl -n hw.ncpumi Mac Pro y no tuve ninguno de esos problemas.sysctlno da resultados precisos en mi máquina, y otros han informado lo mismo. Si no se puede confiar en que siempre dé resultados precisos, entonces no se puede considerar confiable y preciso.sysctlla operación adecuada sean mejor conocidos, como lo hizo el usuario 1706991.sysctl -n hw.physicalcpu_maxEn un MacBook Pro con Mavericks ,
sysctl -a | grep hw.cpusolo devolverá algunos detalles crípticos. Se revela información mucho más detallada y accesible en lamachdep.cpusección, es decir:En particular, para los procesadores con
HyperThreading(HT), verá el recuento total de CPU enumerado (logical_per_package) como el doble del recuento de núcleos físicos (cores_per_package).fuente
No se especificó en la pregunta original (aunque vi la publicación de OP en los comentarios que esta no era una opción), pero muchos desarrolladores en macOS tienen instalado el administrador de paquetes Homebrew.
Para los futuros desarrolladores que se topan con esta pregunta, siempre y cuando exista la suposición (o requisito) de que se instale Homebrew (por ejemplo, en una organización de ingeniería en una empresa),
nproces uno de los binarios comunes de GNU que se incluye en elcoreutilspaquete.Si tiene scripts que preferiría escribir una vez (para Linux + macOS) en lugar de dos veces, o para evitar tener
ifbloques donde necesita detectar el sistema operativo para saber si llamar o nonprocvssysctl -n hw.logicalcpu, esta puede ser una mejor opción.fuente
Comentarios para 2 buenas respuestas anteriores:
1) re la respuesta aceptada (y comentarios) por jkp: hw.ncpu aparentemente está en desuso a favor de hw.logicalcpu ( https://ghc.haskell.org/trac/ghc/ticket/8594 )
2) re la actualización de 2014 de Karl Ehr: en mi computadora (con 2.5 ghz intel core i7),
sysctl -a | grep machdep.cpu | grep per_packagedevuelve diferentes números:machdep.cpu.logical_per_package: 16
machdep.cpu.cores_per_package: 8
Los valores deseados son:
machdep.cpu.core_count: 4
machdep.cpu.thread_count: 8
Cual partido:
hw.physicalcpu: 4
hw.logicalcpu: 8
fuente
Esto se puede hacer de una manera más portátil:
Compatible con macOS y Linux.
fuente
nprocno parece estar disponible en macOS Mojave.nproces una instalación trivial a través de homebrew.