GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo puede encontrar el número de procesador en el que se está ejecutando un subproceso?

Para XP, un rápido google como reveló esto:

https://www.cs.tcd.ie/Jeremy.Jones/GetCurrentProcessorNumberXP.htm ¿Esto ayuda?


Si todo lo que quiere hacer es evitar la contención, no necesita conocer la CPU actual. Podrías elegir un montón al azar. O podría tener un montón por hilo. Aunque puede obtener más o menos contención de esa manera, evitará la sobrecarga de sondear la CPU actual, que puede ser significativa o no. Consulte también el scalable_allocator de Intel Thread Building Block, que puede haber resuelto ese problema mejor que usted.


De la salida de man sched_getcpu :

NAME
       sched_getcpu - determine CPU on which the calling thread is running

SYNOPSIS
       #define _GNU_SOURCE
       #include <utmpx.h>

       int sched_getcpu(void);

DESCRIPTION
   sched_getcpu() returns the number of the CPU
   on which the calling thread is currently executing.

RETURN VALUE
   On success, sched_getcpu() returns a non-negative CPU number.
   On error, -1 is returned and errno is set to indicate the error.

SEE ALSO
   getcpu(2)

Desafortunadamente, esto es específico de Linux. Dudo que haya una forma portátil de hacer esto.


Además de la respuesta de Antony Vennard y el código en el sitio citado, aquí hay un código que también funcionará para Visual C++ x64 (sin ensamblador en línea):

DWORD GetCurrentProcessorNumberXP() {
   int CPUInfo[4];   
   __cpuid(CPUInfo, 1);
   // CPUInfo[1] is EBX, bits 24-31 are APIC ID
   if ((CPUInfo[3] & (1 << 9)) == 0) return -1;  // no APIC on chip
   return (unsigned)CPUInfo[1] >> 24;
}

Una breve mirada a la implementación de GetCurrentProcessorNumber() en Win7 x64 muestra que usan un mecanismo diferente para obtener el número de procesador, pero en mis (pocas) pruebas, los resultados fueron los mismos para mi función casera y oficial.


Linux
  1. Cómo encontrar el número de zócalos de CPU en un sistema CentOS/RHEL

  2. ¿Cómo puedo encontrar la versión de Fedora que uso?

  3. ¿Cómo puede determinar las versiones instaladas de las bibliotecas glibc?

  4. ¿Cómo puedo ver en qué núcleo de CPU se está ejecutando un subproceso?

  5. ¿Puede el Id. de subproceso de un proceso multiproceso ser el mismo que el Id. de proceso de otro proceso en ejecución?

Cómo encontrar el número de puerto de un servicio en Linux

Cómo encontrar el número de núcleos de CPU desde la línea de comandos en Linux

Cómo encontrar los 10 principales procesos en ejecución por memoria y uso de CPU

Cómo encontrar información de la CPU en Linux usando la línea de comandos

Cómo encontrar la utilización de la CPU, qué hace que el sistema se cuelgue

Cómo encontrar qué versión de Linux está ejecutando