Skip to main content
ryzen-amd

AMD Ryzen en profundidad

Ryzen ha llegado. Por fin tenemos un procesador de AMD que puede competir con lo que Intel tiene en el mercado. Después de varios años de bulldozer y derivados, AMD ha tirado a la basura esa arquitectura tan a la Pentium 4 para volver con un diseño más competitivo.

El primer producto que hemos visto basado en esa nueva arquitectura es la serie de procesadores Ryzen 7 de 8 núcleos repartidos en dos estructuras llamadas CCX. Un CCX o Compute Complex es un poco como los SM en los procesadores gráficos. Estructuras autosuficientes con varios núcleos en su interior que se puede replicar para conseguir más prestaciones. En la imagen del DIE de Ryzen proporcionada por AMD se pueden ver a izquierda y derecha dos estructuras idénticas entre ellas que se componen de 4 núcleos cada una:

CCX y núcleos DIE Ryzen
CCX y núcleos DIE Ryzen

En este caso cada CCX tiene además 8MB de caché de nivel 3 y 512KB de caché de nivel 2. El reparto de núcleos, cachés y CCX cobrará más importancia cuando nos metamos más de lleno en otros productos derivados de Ryzen como los recién presentados Ryzen 5 que comentaré más adelante. Pero ahora vamos con los temas más profundos que Ryzen trae como novedades

XFR o Extended Frequency Range

El XFR es en esencia una extensión del turbo que es habitual hoy en día en procesadores y procesadores gráficos. En escenarios en donde todos los principales limitantes (consumo, voltaje o temperatura) tienen margen, a la CPU se le permite escalar su frecuencia por encima de su capacidad normal de turbo. Al igual que con el turbo habitual, XFR tiene la capacidad de asignar velocidades de reloj diferentes según el número de núcleos que se estén utilizando en un monento dado.

Por ejemplo para el Ryzen 1800X las velocidades de reloj son las siguientes: 3,6GHZ para todos los núcleos, 4GHZ para un solo núcleo, 3,7GHZ de XFR para todos los núcleos y 4,1GHZ XFR para un núcleo.

La capacidad que tendría de escalar el XFR dependerá de cada modelo de procesador. Actualmente para el 1800X solo hay disponible un bin de XFR (un bin es un salto de 100mhz) tanto para un funcionamiento de todos los núcleos como para un solo núcleo.

dLDO o digital Low-DropOut voltage regulator

Esto es un regulador interno de voltaje un poco al estilo de lo que tiene Intel con FIVR aunque su implementación es diferente. Cuando Intel integró su FIVR en el DIE de Haswell se econtró con dificultades a la hora de gestionar la temperatura del propio FIVR, lo que hizo que en diseños posteriores tuviesen que sacar el FIVR de vuelta al chipset externo al DIE mientras encontraban la solución a ese problema.

Para evitar esto, en AMD han basado su regulador de voltaje en reguladores que se llaman básicamente como indica el título de esta sección. Digital Low-DropOut voltage regulator o dLDO que contrasta con el circuito de tipo ultra-high speed switching que usaba Intel para su FIVR.

Para añadir granularidad en el control del voltaje en diferentes partes del procesador, AMD ha metido su propio dLDO en diferentes partes del procesador (núcleos, cachés, data fabric…) y cada uno de esos dLDO se puede controlar individualmente.

El CCX y la frecuencia

Ryzen es algo diferente en lo que a este tema se refiere si lo comparamos con diseños anteriores. El núcleo, la caché de nivel 1 y la caché de nivel 2 tienen frecuencias de funcionamiento relacionadas entre sí, como viene siendo habitual pero al contrario que en otros diseños, en este caso la caché de nivel 3 también tiene una frecuencia de reloj dependiente de las otras cachés y el núcleo. Como en cada CCX la caché de nivel 3 es compartida por los 4 núcleos, esta caché tendrá  que estar sincronizada con el núcleo que esté funcionando a más velocidad en ese CCX en un momento dado. En condiciones normales todos los núcleos dentro de un CCX vienen a funcionar a la misma frecuencia, pero no siempre tiene por qué ser el caso.

El multiplicador de CPU efectivo con el que se calcula la frecuencia está compuesto de dos variables: CPUFID y CPUDFSId. CPUFID es un valor entero que va de 16 a 255. CPUDFSId es un valor en coma flotante que va de 1 a 6. Dado el divisor natural entre 8 de CPUDFSId, sus ajustes son siempre de 0,125 en 0,125. Por lo tanto, el multiplicador efectivo se produce con la siguiente fórmula: ((CPUFID / (CPUDFSId / 8)) / 4).

En casos en los que los núcleos dentro de un CCX están funcionando a frecuencias de reloj diferentes, el multiplicador se vuelve algo más complicado. Si todos los PStates (Performance State.  Especifica el multiplicador y voltaje de la CPU para un estado determinado) tienen el mismo valor CPUDFSId , el multiplicador efectivo se puede calcular con esta fórmula:  CPUFID núcleo objetivo / (1 + (( CPUFID núcleo más veloz –  CPUFID núcleo objetivo) /  CPUFID núcleo más veloz)). Por ejemplo si el núcleo más veloz tiene en ese momento un multiplicador de 36,0x (CPUFID = 144 y CPUDFSId = 1) y el multiplicador objetivo para otros núcleos es 32,0x (CPUFID = 128 y CPUDFSId = 1), entonces 128 / (1 + ((144 – 128) / 144)) = 115.2 (28.8x). Se podrían aplicar otras restricciones o limitaciones, dependiendo de los valores de CPUDFSId y la frecuencia.

La sincronización del data fabric dice que cada CCX habilitado debe tener el mismo número de núcleos activos en cada momento. Las configuraciones permitidas actualmente son 1 (1:0), 2 (2:0 o 1:1), 3 (3:0), 4 (4:0 o 2:2), 6 (3:3), 8 (4:4).

El data fabric

En Ryzen el northbridge se ha renombrado a data fabric. La frecuencia de funcionamiento del data fabric está siempre relacionada con la frecuencia a la que opera la controladora de memoria en un ratio de 1:2. Esto significa que la frecuencia de la memoria que se instalará en la placa base afectará directamente al rendimiento del data fabric. Es por ello que en algunos casos se podría apreciar que el rendimiento de Ryzen escala muy bien con el uso de memorias de más velocidad.

En muchos de estos casos el aumento de rendimiento que se podría apreciar por el cambio de memorias por otras más rápidas en Ryzen vendrá principalmente por el aumento de rendimiento del data fabric asociado a ello y no tanto por el propio aumento de velocidad de la memoria.

SMU o System Management Unit

El SMU tiene una funcionalidad similar al PMU en los procesadores de Intel, aunque para el caso de Ryzen hay bastantes diferencias si lo comparamos con el SMU de diseños anteriores de AMD.

Con el procesador de Stock, Ryzen tiene todas las opciones de gestión de energía activadas y el SMU es el que se encarga de todo. La gestión de energía incluye límites de energía, voltaje y temperatura así como de power gating (apagar regiones de un CCX).

Pero si quieres hacer overclock a la CPU, la cosa cambia. Los de AMD han metido un modo especial de funcionamiento del Ryzen, llamémoslo “modo OC” que deshabilita todos los limitadores y protecciones, excepto la protección de temperatura, en cuanto se activa este modo de funcionamiento.

El “modo OC” se activa automáticamente cuando el usuario modifica la frecuencia base (Pstate P0) de la CPU. El SMU avisa de la activación del “modo OC” enviando un código de diagnóstico especial a la placa base.

Entender el escalado de frecuencias y sus voltajes así como su voltaje efectivo es bastante dificil. Al contrario que en otros diseños, en este caso el turbo y el XFR son completamente invisibles. De hecho se le llaman oficialmente “PStates fantasma”. Esto significa que al contrario que con diseños anteriores, estos PStates no están definidos en los habituales registros MSR y por lo tanto no se pueden ver o modificar desde el punto de vista del usuario. La única forma que el usuario tiene de saber que el turbo y el XFR está ahí es viendo directamente su funcionamiento y viendo directamente el escalado del voltaje.

El escalado de voltaje epecificado en los PStates también puede llegar a ser confuso. Esto se debe a que en un modo normal de funcionamiento ( sin overclock) el SMU controla automáticamente el voltaje a través de las controladoras de voltaje.

Por ejemplo, el estado P0 puede indicar 1,37500V de voltaje mientras que el voltaje efectivo mientras el procesador se encuentra en ese estado puede ser de 1,26250V. Esto no es un fallo. Al contrario, es el funcionamiento normal de este procesador. Básicamente el voltaje espeficicado en el MSR es el límite alto de ese estado y el SMU automáticamente añadirá de forma dinámica un offset negativo a ese valor, reduciendo el voltaje efectivo. Cuánto de negativo será ese offset varía dependiendo de la carga y la temperatura.

Durante el “modo OC” el SMU desactiva las controladoras de voltaje y los offsets de voltaje. Esto puede crear la ilusión de que el consumo de energía aumenta enormemente con el overclock de un procesador Ryzen. Esto técnicamente es cierto ya que dejas de contar con esos offsets y el voltaje es la variable que más afecta al consumo de un procesador.

Una de las mayores desventajas de hacer overclock a un procesador Ryzen es que en ese “modo OC” también se desactivarán tanto el turbo como el XFR. Esto quiere decir que a menos que seas capaz mediante overclock de alcanzar la velocidad de XFR, estarás perdiendo rendimiento single core comparado con el estado por defecto del procesador.

SMT o Simultaneous MultiThreading

Llevamos mucho tiempo viendo procesadores de Intel capaces de manejar el doble de hilos que núcleos hay en el procesador. Esto que Intel llama comercialmente HyperThreading es lo que AMD acaba de implementar por primera vez en sus procesadores.

El SMT se basa en intentar mejorar la eficiencia del procesador estudiando qué partes pueden estar infrautilizadas en un momento dado. Metiendo más hilos de ejecución en un núcleo, se puede jugar con instrucciones ejecutándose en paralelo y consiguiendo más rendimiento de ese núcleo en el caso de que esas instrucciones no acaben compitiendo por los mismos recursos del procesador o que resulte que esos hilos son uno dependiente del otro.

Hay muchas formas de implementar SMT en un procesador. En procesadores de cara al consumidor solemos ver un SMT más contenido que en diseños para servidores ya que en el caso de procesadores para el consumidor final se suele tener más en cuenta la latencia que el throughput a la hora de diseñar el SMT.

AMD SMT
Esquema de AMD con los recursos dedicados al SMT

AVX o Extensiones Vectoriales Avanzadas

Una de las metas que tuvo AMD con Ryzen era la de hacer un procesador que fuese lo suficientemente pequeño como para poder cubrir toda su gama de productos, desde ultraportátiles hasta servidores. Con esto se ahorran los diseños en paralelo con Ryzen como los núcleos Jaguar o Puma. AMD calcula que en el proceso de 14nm LPP de GlobalFoundries que utiliza actualmente un CCX Ryzen mide 44 milímetros cuadrados. Los 4 núcleos de Intel skylake para hacernos una idea rondan los 49 milímetros cuadrados y eso teniendo en cuenta que los procesos de fabricación de Intel suelen ser más densos que los de la competencia.

AVX es una extensión del juego de instrucciones x86 que permite hacer operaciones de coma flotante de 256 bits. Actualmente Intel tiene algunos procesadores de muy alta gama y de servidores que permiten hacer operaciones AVX de 512 bits. Este juego de instrucciones es muy potente en su campo pero tiene como contrapartida que es bastante exigente tanto en consumo como en temperatura y área del DIE que hay que dedicar para incluir este juego de instrucciones.

Para simplificar la implementación de AVX, con Ryzen se ha optado por coger una instrucción AVX 256 y dividirla en 2 instrucciones. Se pierde la capacidad de procesar una instrucción AVX cada ciclo de reloj ya que en este caso necesitarías dos pero a cambio no tienes por qué complicar tanto ni las unidades de cálculo de coma flotante ni las rutas por dentro del procesador para mover datos tan “anchos”. Hablando estrictamente de rendimiento queda claro que en este apartado Ryzen va a posicionarse por detrás de Intel.

Ryzen 5

Muchas gamas de procesadores surgen de problemas de fabricación de procesadores de gamas más altas. Este es el caso de Ryzen 5. No suele ser una buena técnica empresarial que en casos como este en los que fabricas un procesador de 8 núcleos, si te sale un núcleo mal tires los otros 7 a la basura. Hay técnicas para aprovechar lo que no ha salido del todo bien fabricado y con Ryzen 5 podemos ver una de esas técnicas.

En esta gama de procesadores hay dos miembros que parecen ser bastante parecidos sobre el papel pero sus diferencias vienen por cómo ha sido aprovechado ese Ryzen 7 mal fabricado.

El 1500X tiene 4 núcleos y una caché de nivel 3 de 16MB

El 1400X tiene 4 núcleos y una caché de nivel 3 de 8MB

Al principio del artículo comentaba que un CCX estaba compuesto de 4 núcleos y 8MB de nivel 3. Esto ya nos puede dar pistas de qué es lo que ha pasado para que salga cada uno de esos dos procesadores.

En el caso del 1500X nos encontramos con dos CCX activos pero que en cada CCX hay dos núcleos desactivados. Al estar dos CCX funcionando, hay un acceso a los 16MB de caché de nivel 3 que proporcionarían esos dos CCX.

En el caso del 1400X algo habrá pasado en uno de los dos CCX de ese anteriormente Ryzen 7 que se ha tenido que desactivar ese CCX entero y es por eso por lo que, aún teniendo los mismos 4 núcleos que el 1500X, en este caso solo hay acceso a 8MB de caché de nivel 3. Por decirlo de una forma más simple, un 1400X es básicamente medio Ryzen 7.

Y en resumen esto es un poco todo. He intentado centrarme en los aspectos técnicos de Ryzen que son más complicados de encontrar en medios más generalistas. Si tienes alguna duda, no dudes en preguntar.

 

Deja un comentario

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