¿Cómo obtener el número de CPU físicas: s en Linux usando C?

Soy consciente de que sysconf(_SC_NPROCESSORS_ONLN) me dará el número de procesadores lógicos. Pero, ¿cómo puedo obtener el número de procesadores físicos?

@Havoc P: los cpus sin conexión no se muestran en / proc / cpuinfo.

La topología de la CPU se describe en / sys / devices / system / cpu / cpu * / topology / *

Podría analizar / proc / cpuinfo y contar el número de líneas “id físicas:” distintas. Algo molesto, pero no sé si hay una mejor opción. Si está utilizando GLib u otra biblioteca con soporte de expresiones regulares, sería más fácil. O puedes abrir una línea de comandos () para hacerlo si te sientes realmente intrépido. línea de comando de ejemplo en: http://www.brandonhutchinson.com/Understanding_proc_cpuinfo.html

Creo que la mejor manera de obtener esta información es usar hwloc: http://www.open-mpi.org/projects/hwloc/ .

Proporcionan un montón de herramientas de usuario que le permiten acceder a la topología de la CPU de un sistema, pero también proporcionan una biblioteca que puede usar desde C: http://www.open-mpi.org/projects/hwloc/doc/ interfaz v1.1.1 / #

Tal vez esta respuesta a una pregunta similar ayuda. Hay un comentario acerca de que el código no es correcto, pero podría ser un buen punto de partida.