2010-07-29 20 views
5

Me gustaría saber si es posible identificar el procesador físico (núcleo) que se utiliza por subproceso con id-hilo específico?Identificar el procesador (núcleo) es utilizado por un hilo específico

Por ejemplo, tengo una aplicación multiproceso que tiene 2 hilos (threadid = 10 e hilo = 20, por ejemplo). Ejecuto la aplicación en un sistema que tiene un procesador de doble núcleo (núcleo 1 y núcleo 2). Entonces, ¿cómo saber el número de núcleos se usa por subproceso con threadid = 20?

P.S. Plataformas de Windows.

Gracias,

Denis.

Respuesta

3

A menos que utilice la afinidad de hilos, los hilos no se asignan a núcleos específicos. Con cada segmento de tiempo, el hilo se puede ejecutar en diferentes núcleos. Esto significa que si hubiera una función para obtener el núcleo de un hilo, para cuando obtenga el valor de retorno, hay una gran posibilidad de que el hilo ya se esté ejecutando en otro núcleo.

Si está utilizando la afinidad de subprocesos, podría echar un vistazo a las funciones de afinidad de subprocesos de Windows (http://msdn.microsoft.com/en-us/library/ms684847%28v=VS.85%29.aspx).

+0

¡Gracias por su respuesta, Patrick! Entonces, aparece otra pregunta: ¿es posible saber cuánto tiempo se ejecuta un hilo específico en un núcleo específico? (por ejemplo, un subproceso ejecuta el 20% de su segmento de tiempo en el núcleo 1 y el 80% de su tiempo se ejecuta en el núcleo 2) – DenisL

+0

No es que conozca a Denis. Lo que puede hacer es limitar un hilo a núcleos específicos (esto se llama afinidad de hilos). Tal vez pueda dividir su proceso en varios hilos donde cada hilo está asignado a un núcleo. ¿Puedes explicarme cuál es el problema original? (lo que lleva a su pregunta original) Tal vez su problema se puede resolver de otra manera. – Patrick

+0

Se me ha encomendado la tarea de crear dos funciones: 1. La primera función devuelve el uso total del procesador multinúcleo mediante un id. De subproceso específico. Implementé la función usando las funciones del contador de rendimiento. 2. La segunda función devuelve el uso del núcleo específico por id. De subproceso específico. No tengo idea de cómo crear la función, parece que es imposible. – DenisL

2

Existen funciones llamadas GetCurrentProcessorNumber (disponibles desde Server 2003 y Vista) y GetCurrentProcessorNumberEx (disponibles desde Server 2008 R2 y Windows 7).

Consulte también this question's answers para obtener más opciones y consideraciones relacionadas (incluido Windows XP, principalmente this answer describing the use of cpuid instruction).

Por supuesto, el número de núcleo puede cambiarse en cualquier momento por el planificador, así que si necesita estar seguro, quizás ayude por una cantidad razonable si comprueba el número de núcleo antes y después de algo Medido o ejecutado durante un breve cantidad de tiempo, y si el número central sigue siendo el mismo, entonces sabe en qué núcleo probablemente también se ejecutó el código intermedio.

Cuestiones relacionadas