CPU: ¿Se pueden activar núcleos desactivados de fábrica?

Hace un tiempo introduje algo sobre el término binning. En ese artículo podías ver que algunas CPUs tienen más núcleos de lo que realmente muestran, pero están desactivados de fábrica. Eso ha llevado a muchos usuarios a preguntarse si se podrían activar estos núcleos para extraer más rendimiento.

Una cuestión que recuerda en algo al tema del overclocking, ya que los chips suelen estar fabricados para funcionar a una mayor frecuencia a la que luego se bloquean para su venta. Por tanto, se pueden exprimir más para conseguir más rendimiento de ellas. ¿Pasará lo mismo con los núcleos?

¿Se pueden activar núcleos físicos desactivados?

Me gustaría dejar claro que con núcleos desactivados no me refiero a núcleos apagados por cuestiones de consumo o temperatura, sino a los núcleos que se desactivan de fábrica por cuestiones relacionadas con el binning.

AMD, cuando usa diseños chiplets, en vez de monolíticos, llama a cada uno de los troqueles de procesamiento CCD (Core Chiplet Die), mientras que cada CCD suele integrar 2 CCX (Core Complex). Un CCX es básicamente un grupo o cluster de 4 núcleos con su caché L3. Por tanto, si se disponen de un empaquetado MCM con dos CCD quiere decir que esa CPU dispondrá de 8 núcleos (4xCCX).

Pues bien, en el caso de AMD, un programador llamado Yuri (1usmus) ha descubierto algo interesante mientras trabajaba con el programa Clock Tuner for Ryzen (CTR) y un AMD Zen 3. En este dispositivo podría ver que su CCD 1 no estaba disponible, pero la alimentación estaba activa, como si estuviese solo «dormido», en una especie de modo de suspensión profunda. Y, eventualmente, aparecían dibujos de actividad en la gráfica del programa de monitorización, aumentando la frecuencia de reloj hasta los 550 Mhz. Esto no ocurre a algunos diseños desactivados por hardware.

Si el núcleo estuviese desactivado de fábrica, eso no sucedería, por lo que dio que pensar que tal vez habría alguna forma de «despertar» ese CCD para ganar más núcleos. Algo que no es nada nuevo, en el pasado ya se ha hecho cosas similares para ganar prestaciones con ciertos componentes de hardware de gama baja o media que no eran más que versiones capadas de los modelos de gama alta.

En principio, ese CCD desactivado debería ser funcional, ya que no es demasiado lógico invertir dinero en encapsular e incluir en el empaquetado un die que no funciona. Los chips se prueban cuando están en el wafer para marcarlos y proceder a su cortado. Por eso, se podría pensar que ese CCD funciona.

Debería haber alguna manera de activar ese CCD para contar con más núcleos. En el pasado se podía hacer mediante el BIOS en algunos casos, como los Phenom II x3 y Athlon II x3. En cambio, en el UEFI no se presenta tal oportunidad para estos otros nuevos diseños, y aún se sigue investigando si podría haber alguna otra forma, aunque me parece improbable si el firmware no lo permite…

Por el momento, tendrás que contentarte con habilitar y deshabilitar núcleos usando AMD Ryzen Master. Pero esto es una simple cuestión de optimización para rendimiento o para eficiencia energética, pero siempre usando los núcleos que AMD tiene activos de fábrica.

En el caso de Intel, con diseños monolíticos, también se desconoce si habría algún método para activar núcleos desactivados de fábrica por binning. En principio no hay forma de hacerlo, ya que la desactivación se realiza mediante una combinación de microcódigo y fuse (una especie de fusibles que se queman una vez se testan en fábrica para la desconexión física). Tan solo jugar con los estados de energía, como en el caso de AMD.

¿Y los núcleos lógicos?

Intel Pentium 4 HT

Hasta ahora he estado hablando de núcleos físicos, pero si la CPU tiene SMT, entonces cada núcleo físico se desdobla en al menos 2 núcleos lógicos, como es el caso de Intel HT o de la implementación SMT de AMD.

En principio, este tipo de multihilo simultáneo se puede habilitar o deshabilitar desde el BIOS/UEFI, e incluso desde algunas aplicaciones de control como AMD Ryzen Master. En el caso del firmware, suele estar presente en menús como:

  • General: Entrar en tu BIOS/UEFI > Advanced > CPU Configuration
  • Gygabyte: Entrar en tu BIOS/UEFI M.I.T. > Advanced CPU Core Settings
  • HPE: Entrar en el menú Sistems Utilities > Systems Configuration > BIOS/Platform Configuration (RBSU) > Processor Options

Desde ahí podrás habilitar o deshabilitar esta tecnología (suele tener nombres como SMT, Multithreading, Intel HT, AMD SMT Option, o similares), haciendo que cada núcleo físico pueda soportar un solo hilo o se desdoble para ejecutar varios hilos simultáneamente.

El problema es cuando se deshabilita de serie el SMT en algunos modelos de procesadores. En esos casos AMD o Intel lo han deshabilitado por algún motivo, generalmente por problemas con esta tecnología. Además, el firmware no lo permitirá activar en estos casos.

BONUS: Trabajo con Linux

Puedes ver la cantidad de núcleos físicos y lógicos de los que dispones en tu máquina con:

#Ver los núcleos físicos y lógicos
cat /proc/cpuinfo

#Mostrar el número de núcleos totales (físicos si no tiene SMT o lógicos si tiene SMT)
nproc

#Ver los sockets en una máquina, para ver si es MP o no
grep "physical id" /proc/cpuinfo | sort | uniq | wc -l

#Comprobar solo los núcleos físicos
cat /proc/cpuinfo | grep "cpu cores" | uniq

#Mostrar la cantidad de núcleos lógicos (SMT)
cat /proc/cpuinfo | grep "processor" | wc -l

#Otra opción es
ps -e -o psr= | sort | uniq | wc -l

Si estás usando Linux, deberías saber que un hilo (hebra o thread) no duerme en un núcleo en particular cuando se tiene SMT activo, y el programador no sabrá de antemano qué núcleo ejecutará un hilo, dependerá del uso de cada momento y la asignación que de el scheduler o planificador.

A un hilo, Linux lo llama LWP) y podrás usar ps -eL para visualizarlos. Podrás buscar también información de los procesos en /proc/<PID>/task/<TID>/status, donde PID es el identificador del proceso y TID es el identificador del thread. En el fichero de estado encontrarás si se encuentra R (running o en ejecución) o si se encuentra S (sleeping o dormido).

#Ver los threads creados por un proceso concreto con PID=8 en este caso
ps -T -p 8

#Puedes también saber qué proceso o thread se está ejecutando en cada núcleo
ps -p 8 -L -o pid,tid,psr

También puedes usar otras muchas herramientas, e incluso usar cpulimit para poder poner limitaciones en el uso de tu CPU. Una vez tienes este paquete instalado, podrías controlarlo fácilmente. Por ejemplo:

#Creamos un proceso en segundo plano permanente como ejemplo
dd if=/dev/zero of=/dev/null &

#Ahora, sabiendo el PID (imagina que es 1300) de este proceso, puedes ver el uso que está haciendo de tu CPU con top, por ejemplo

#Si quieres cambiar el porcentaje que aparece en la columna %CPU de top, puedes limitarlo a un 30% por ejemplo
sudo cpulimit --pid 1300 --limit 30

#Ahora, si lo monitorizas con top, podrás comprobar que se ha modificado

Isaac

Apasionado de la computación y la tecnología en general. Siempre intentando desaprender para apreHender.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

A %d blogueros les gusta esto:

Si continuas utilizando este sitio aceptas el uso de cookies. más información

Los ajustes de cookies de esta web están configurados para "permitir cookies" y así ofrecerte la mejor experiencia de navegación posible. Si sigues utilizando esta web sin cambiar tus ajustes de cookies o haces clic en "Aceptar" estarás dando tu consentimiento a esto.

Cerrar