La mayor limitación al rendimiento en cualquier procesador de la actualidad viene por parte de memoria, la cual ha mejorado a una velocidad mucho más lenta que los procesadores. ¿A que es debida esta diferencia en la evolución de procesadores y memoria? Es por ello que hemos decidido explicaros los motivos por los cuales existe esta cuello de botella entre la RAM y la CPU.
En los primeros ordenadores personales la RAM era mucho más rápida en velocidad que las CPU, un caso muy conocido es el del MOS 6502 en el que los accesos a la memoria se compartían con el sistema de vídeo de los mismos, pero con el paso del tiempo la situación se fue revirtiendo hasta el punto en que la memoria principal del sistema pasó a ser un cuello de botella para el rendimiento obligando a la implementación de la memoria caché con tal de paliar ese problema.
Si miramos cualquier gráfico de la evolución de la RAM y las CPU en cuanto a rendimiento veremos que la distancia entre los procesadores y la memoria ha ido aumentando con el paso del tiempo y es cada vez mayor. Las pregunta son, ¿existe una explicación para este fenómeno y una solución?
El porqué del cuello de botella entre CPU y RAM
La pirámide de la jerarquía de memoria es clara, los elementos de memoria más cercanos a las unidades de ejecución dan mejor rendimiento que los lejanos, dicho de otra manera, si un dato se encuentra en uno de estos primeros niveles de la jerarquía entonces este se resolverá en menos ciclos de reloj.
En cambio, cuanto más alejado se esté de ellos el rendimiento bajará por la mayor distancia que ha de recorrer el cableado. Es en ese punto donde advertimos que la memoria de acceso aleatorio no se encuentra dentro del procesador, lo cual es el motivo principal para que exista el cuello de botella entre la CPU y la RAM.
La distancia entre la CPU y la RAM nos puede parecer a nuestra vista pequeña, pero a la vista del procesador es muy alta, por lo que la única forma de compensarlo sería hacer que la memoria fuese a velocidades mucho más altas que el procesador. Hay que tener en cuenta que cuando la CPU hace una petición de acceso a la memoria se abre una ventana de oportunidad para la transferencia de los datos. La clave estaría en reducir el tiempo de comunicación entre ambos elementos. Lo cual sobre el papel parece fácil, sin embargo, no lo es en absoluto.
Aumentar la cantidad de pines es una mala solución económica, ya que no reduce la distancia del cableado entre ambas partes y haría mayor el tamaño del procesador y la memoria. Es más, la única ventaja estaría en poder disminuir el consumo por el mismo ancho de banda, pero no las latencias.
¿Por qué no se puede aumentar la velocidad de la RAM?
Transmitir la información a grandes distancias ocasiona un problema por el hecho que el cableado añade resistencia a medida que aumenta la distancia. Es por este motivo que transmitir información desde las cachés tiene un consumo alto con la RAM. Para contar lo que consume la transferencia de datos utilizamos los Julios por bit, o Joules en inglés, y dado que estos por segundo equivalen a vatios podemos saber la energía que se consume.
Ahora bien, aumentar la velocidad de reloj de la RAM es el otro problema, en todo semiconductor con una señal de reloj el consumo es la velocidad de reloj por la capacitancia y el voltaje al cuadrado. La capacitancia es una constante que depende del nodo de fabricación, en cambio el voltaje aumenta de manera lineal con la velocidad de reloj (hasta topar con los muros de tensión). El resultado final es que aumentar la velocidad de reloj aumentaría los consumos energéticos de la RAM a niveles estratosféricos, lo que haría que la temperatura subiese hasta la estratosfera y la memoria dejase de funcionar.
Recientemente, han aparecido nuevos métodos como el 3DIC que permiten interconectar la RAM de manera cercana al procesador, en estos casos la baja latencia es debido a la cercanía y no hace falta aumentar la velocidad de reloj. Es más, se basan en una gran cantidad de interconexiones para mantener una tasa baja de ciclos de reloj, para que así la interfaz no se sobrecaliente y no provocar un ahogamiento termal con el procesador. Esto elimina los cuellos de botella en este sentido, pero crea otros distintos como la capacidad o el coste, algo que se paliará en el futuro.