¿Qué es Thread Director en procesadores Intel Core y cómo funciona?
Una de las mayores diferencias entre las CPU para PC de Intel y AMD es la inclusión del Thread Director. Esta tecnología debutó en la 12ª Gen de procesadores Intel Core. En concreto, en los primeros procesadores en tener núcleos heterogéneos. Su función principal es ayudar al sistema operativo la asignación correcta de las diferentes aplicaciones y sus procesos. En este artículo os explicaremos sus secretos.
La apuesta por dos tipos de núcleos en cada CPU con IPC dispar es una de las decisiones más polémicas de Intel en los últimos años. A la hora de comentar cómo funciona el Thread Director no vamos a valorar si se trata de una mejor o peor idea, sino que nos centraremos exclusivamente en su funcionamiento a la vez que romperemos algunos mitos.
¿Qué es Thread Director?
Cuando Intel lanzó sus Core 12 para PC se encontró con un problema: en PC, hasta ese momento, nadie había lanzado una CPU con varios núcleos de diferente rendimiento y arquitectura entre ellos. Dicha práctica, si bien es habitual en los SoC Arm para teléfonos móviles, no lo es en ordenadores domésticos. Esta situación hizo que los diferentes sistemas operativos no tuvieran una asignación de procesos en la que se tuviera en cuenta las diferencias de potencia entre los diferentes cores de la CPU.
Bajo el nombre de Thread Director Intel desarrollo una solución al problema. Sobre esta solución hay muchos mitos hasta el momento. Así que nada mejor que descartar los más conocidos.
- Thread Director no reemplaza la tarea del sistema operativo de gestionar los recursos y decidir en que núcleos se ejecutan los diferentes procesos de las aplicaciones.
- Tampoco es una pieza especial de hardware en el sentido de que no es ninguna unidad dedicada.
Por lo que en realidad se trata de un programa que se encuentra en la propia CPU y cuyo trabajo es evaluar los diferentes procesos a ejecutar en nuestro PC. Tras esto, ofrece al sistema operativo la información necesaria para que este pueda asignar de forma correcta los procesos a los diferentes recursos de la CPU.
Cómo funciona Thread Director
Para entender cómo funciona el Thread Director hemos de tener en cuenta que lo hace de forma muy parecida a la ejecución especulativa. Es decir, ejecuta en un hilo aparte y totalmente aislado el proceso en uno de los núcleos. En el caso de los Intel Core basados en arquitectura Alder Lake y Raptor Lake, en uno de los hilos ejecución de los P-Cores. En cambio, a partir de Meteor Lake utiliza uno de los E-Core de bajo consumo situados en el SoC y, por tanto, alejados del Compute Tile para dicha tarea.
Thread Director no solo mira y mide cada instrucción por separado, sino también el coste computacional del algoritmo que ha de ejecutar. Es decir, tiene en cuenta la notación en "0" que nos marca el coste computacional a la hora de ejecutar dicho proceso. Para que los profanos que estáis leyendo esto lo entendáis mejor. No todos los programas tienen el mismo coste computacional, sino que va evolucionando. Es por ello que Thread Director no solo mira la lista de instrucciones, sino que ejecuta el proceso de forma temporal. Los resultados se almacenan en una dirección de memoria concreta, asignado a la variable en ensamblador IA32_THREAD_FEEDBACK-CHAR que incluye tres datos:
- La ID Class del proceso en cuestión, en total hay cuatro
distintas:
- 0: el proceso puede ejecutarse tranquilamente en los P-Cores como en los E-Cores.
- 1: el proceso funciona mucho mejor si se asigna a los P-Cores.
- 2: se recomienda que el proceso se mueva a los E-Cores.
- 3: ahí van esos procesos que se componen de bucles de coste exponencial, largas esperas y que terminan por afectar al resto.
- Su rendimiento, medido en una cifra de 0 a 255.
- La eficiencia energética, medida en una cifra de 0 a 255.
A partir de dicha información, el sistema operativo asigna los diferentes procesos a los núcleos correspondientes, siempre y cuando este sea compatible con Thread Director y, por tanto, este capacitado para realizar dicha función.
¿Para qué sirve la puntuación?
A día de hoy las CPU tienen multitud de núcleos, sin embargo, la asignación no puede dividirse solo en el tipo de núcleo, sino en la carga de trabajo que tiene cada uno de estos. Gracias a la puntuación que da el Thread Director, no solo el sistema operativo sabe qué tipo de núcleo utilizar, sino también en cuál de ellos asignar el trabajo. ¿El objetivo? Evitar que queden núcleos sin usar a la hora de ejecutar una aplicación. Eso sí, existen ciertas excepciones en cuanto al funcionamiento. En especial por el hecho que el set de instrucciones no es parejo entre E-Cores y P-Cores. Por lo que si durante el proceso de evaluación se encuentra una sola de estas instrucciones, se asignará automáticamente al tipo de núcleo correspondiente.
Thread Director no dirige nada
Pese a su nombre comercial, en realidad no dirige nada, dado que es el sistema operativo el encargado de decidir que núcleos ejecutan cada una de las aplicaciones y los diferentes procesos. Esto es importante entenderlo, ya que cuando una aplicación pasa a segundo plano (background) los recursos asignados por el sistema operativo se reducen.
Es decir, si por ejemplo estamos renderizando una escena en 3D de Blender, pero dejamos la aplicación en segundo plano haciendo el trabajo, nos encontraremos que Windows entenderá que para nosotros lo relevante ya no es dicha tarea, por lo que le asignará muchos menos recursos y lo más seguro es que lo envíe a los E-Cores. De la misma manera, nos podemos encontrar con una aplicación muy ligera funcionando en los P-Cores solo por estar en primer plano.
Thread Director es un nombre un poco engañoso desde el momento en que es el sistema operativo el encargado de dirigir a donde van los recursos de las diferentes aplicaciones. Simplemente, esta función puede hacerlo de forma más eficiente, pero para ello el software debe ser consciente de la existencia de esta solución de Intel.
El futuro a partir de Meteor Lake
Thread Director en Meteor Lake sufre un cambio importante. En vez de ejecutarse en uno de los P-Cores incluidos en la Compute Tile, su trabajo es realizado por los E-Cores de bajo consumo en el SOC Tile. Este SoC es el que tiene el acceso a la RAM realmente, al tener en su interior el controlador de memoria integrado de la CPU.
Todos y cada uno de los procesos son evaluados por los E-Cores de bajo consumo en el SOC Tile, los cuales ejecutan el Thread Director, pero con un matiz. Si a la hora de evaluar el proceso la conclusión es que este se puede resolver rápidamente en dichos núcleos, entonces lo hacen. En otro caso lo pasan al Compute Tile, donde opera de la misma manera que en generaciones anteriores.
Es decir al contrario de lo que se suele decir, Thread Director en Meteor Lake, y posteriores, no tiene que lidiar con tres tipos de núcleos realmente. Eso siempre y cuando aquella tarea que apenas requiere potencia es rápidamente resuelta antes de que llegue a los núcleos principales de la CPU.