Tengo curiosidad por saber por qué el programador mueve constantemente una aplicación entre las CPU, en lugar de mantenerla en una. Parece un poco tonto tener 4 núcleos al 25% en lugar de uno al 100%.
¿Tiene que ver con el calor o es más eficiente de alguna manera? ¿Otros sistemas operativos lo hacen de manera diferente?
Las ideas o enlaces a cosas en profundidad serían buenos. (No pude encontrar mucho yo mismo).
Actualizar:
Por "extendido" no quiero decir que se ejecuta en varias CPU a la vez, sino que se está moviendo de una a otra varias veces por segundo, lo que hace que el efecto se vea extendido.
windows
performance
cpu
Macke
fuente
fuente
Respuestas:
Creo que
wierob
ha descrito el punto bastante bien.Aquí hay un artículo anterior que analiza la
processor affinity
configuración con un QX6800 de cuatro núcleos .(el enlace apunta a la segunda página de ese artículo).
Si no fuerza la afinidad del proceso a un núcleo, ¿pierde rendimiento ?
el diseño del procesador en sí también considera tales cosas.
tiene una memoria caché de 8 MB
L3
compartida en sus 4 núcleos .Cabe señalar que si bien es posible que haya elegido ejecutar solo este proceso de un solo subproceso en el sistema, el sistema operativo en sí tendría varias otras tareas en ejecución que también deben programarse. El planificador equilibra toda esta actividad en el grupo de procesadores (o núcleos) disponibles.
En el futuro, con la arquitectura Nehalem y NUMA , los
procesadores a través de múltiples sockets también podrán abordar mejor el thrash de acceso.
Aquí hay una imagen rápida de una página de ArsTechnica en NUMA .
Si Nehalem
i7
te interesa, tengo algunos enlaces más en esta respuesta .fuente
El planificador simplemente ejecuta el siguiente subproceso que está listo para ejecutarse en un núcleo / CPU "libre".
Puede asignar un proceso a una CPU específica a través del administrador de tareas de Windows.
Tener 4 núcleos al 25% significa que 4 hilos se ejecutan simultáneamente. Mientras que un núcleo en x% significa que solo se ejecuta un hilo. Entonces, el primero es más eficiente en algunos casos.
Pero durante su ejecución, el caché de la CPU se llena con los datos a los que accede el hilo. Entonces, si el subproceso se ejecuta en otra CPU, experimentará más errores de caché, que son costosos, ya que los datos no están en la caché de esta CPU.
¿Qué hace tu hilo? Si el hilo "duerme" por un tiempo muy corto, el núcleo en el que se ejecutó antes podría estar ocupado por otra amenaza y, por lo tanto, su hilo se ejecuta en el siguiente núcleo disponible. ¿Qué sucede si especifica un solo núcleo para ser utilizado por su proceso (por ejemplo, un administrador de tareas)?
fuente
No es. Un subproceso solo puede ejecutarse en un procesador. Sin embargo, algunos procesos tienen múltiples subprocesos, que pueden distribuirse.
El razonamiento, lo creas o no, nunca consideró cómo se ve. El sistema intenta extender los hilos porque no tiene forma de saber cuándo se disparará.
fuente
El sistema operativo migra el hilo a través de los núcleos de la CPU (rápidamente, varias veces por segundo). Es más eficiente ejecutarlo en el mismo núcleo todo el tiempo. Esto se puede aplicar mediante el elemento del menú contextual "Establecer afinidad" en el Administrador de tareas.
Tenga en cuenta que generalmente (uso doméstico típico) la diferencia está en el rango de pocos porcentajes.
Los "4 núcleos cada uno con un 25% de uso" significan, como el Administrador de tareas muestra el uso promedio, que cada núcleo se utilizó por completo un cuarto de tiempo y se liberó el resto del tiempo.
La descripción es para Windows, pero también es similar en otros sistemas operativos.
fuente
Si alguien todavía está leyendo esto, también lo he notado y he realizado bastantes pruebas para ver si no es solo una casualidad. Resulta que no lo es! Creo que extender un solo hilo sobre todos los núcleos es más eficiente por varias razones:
Además, debido a las dos observaciones anteriores, he llegado a creer que Turbo Boost e IDA son ineficaces. Pueden ser útiles en sistemas operativos más antiguos, pero Linux y Windows 7 distribuyen todo en todos los núcleos de manera bastante eficiente. Entonces, un Core 2 Quad q9100 @ 2.26 GHz casi (siempre hay excepciones :-) siempre será más rápido que un Core 2 Duo X9100 @ 3.06GHz, y rara vez lo he visto usar IDA (básicamente el predecesor de Turbo boost, aumenta la frecuencia en uno o dos núcleos solo para aplicaciones de subproceso único).
fuente