Los sistemas informáticos se pueden catalogar por la forma en la que está diseñada la organización de su memoria RAM, y por tanto en dos grupos distintos: sistema UMA y sistemas NUMA. Os explicamos las diferencias básicas entre estas formas de organizar un sistema según la organización de memoria y cuáles son las ventajas y desventajas de cada tipo.
A la hora de diseñar un sistema, una de las primeras cosas que se llegan a colocar sobre la mesa de diseño es la forma en la que se organizará la memoria RAM, ya que esto no solo indicará cómo será la arquitectura del sistema, sino también el rendimiento del mismo, su coste de fabricación y la capacidad de expansión del mismo.
Organización de memoria RAM: UMA
UMA son las siglas de Uniform Memory Access y hace referencia a todos los sistemas donde la memoria RAM es un solo pozo compartido en cuanto al acceso por la CPU y el resto de procesadores del sistema. Este tipo de configuración es utilizada en especial en los SoC a día de hoy, donde los diferentes componentes comparten el acceso a la memoria.
El sistema UMA es también el utilizado en las consolas de videojuegos, en general es el sistema de memoria utilizado en todo sistema donde sus componentes se montan en una placa en común, donde el enrutamiento de dos tipos pozos de memoria diferenciados son una complicación sobre las vías y las líneas de comunicación que atraviesan la placa.
Es por tanto la forma más fácil de construir un sistema de memoria en cualquier tipo de ordenador, pero trae consigo una serie de problemas como es el hecho que al compartir el acceso a memoria se acaba creando un efecto de contención, en el que se crea una «lista de espera» para acceder a los datos, la cual solo puede ser paliado con el uso de tipos de memoria RAM con varios canales de acceso.
Organización de memoria RAM: NUMA
La organización de memoria NUMA o Non-Uniform Memory Access. Hace referencia los sistemas en los que se trabajan con varios pozos de memoria distintos en un mismo sistema. Es el caso del PC donde por ejemplo podemos ver como las tarjetas gráficas tienen su propia memoria diferente a la RAM principal del sistema.
Los sistemas NUMA no sufren el problema de la contención en el acceso a la memoria de los sistemas UMA, pero realmente de cara a comunicar los diferentes componentes del sistema entre sí resulta en un sistema muy complejo. El motivo de ello es que cada uno de los componentes necesitan tener mecanismos de acceso a la memoria RAM principal para la comunicación con la CPU, por ejemplo las GPU tienen unidades DMA que les permiten acceder a la RAM principal del sistema y realizar copia de ciertos datos de la RAM a la VRAM.
Este tipo de organización de memoria es utilizado cuando queremos crear un sistema con capacidades de expansión, para ellos son necesarios crear lo que se llaman puertos de expansión, los cuales sirven para la comunicación de la CPU del sistema con los sistemas de memoria RAM propios de cada componente que forman parte del sistema.
Direccionamiento frente a organización física
Uno de los ideales en PC es el sistema totalmente coherente de memoria, en el que el direccionamiento de los diferentes componentes en el mismo es común en todos ellos. Esto se traduce en que si modificamos la dirección, pongamos por ejemplo, F4. Entonces todos los componentes al dirigirse a la dirección de memoria F4 cualquier otro componente del PC tendría que hacer referencia a la misma dirección de memoria.
Uno podría pensar de entrada que debido a que los sistemas UMA tienen su memoria siempre compartida a nivel físico entonces será lo mismo a nivel de direccionamiento, ya que hablamos del mismo pozo de memoria a nivel físico. La realidad es bien distinta, ya que es necesario que los diferentes componentes sean coherentes en cuanto a memoria, lo que significa que tomando el ejemplo anterior si escribimos en la dirección F4 el valor 30 entonces todos los componentes sepan que allí haya un valor 30.
La forma de conseguir que todos los componentes de un SoC sean totalmente coherentes no es por tanto utilizar el mismo controlador de memoria, sino añadir justo antes de dicho controlador un último nivel de caché, el cual se encontraría más allá de la CPU, la GPU y otros componentes y sería visto por todos ellos como un último nivel de caché.
El hecho de añadir una caché de último nivel antes del controlador de memoria es propio de los sistemas PostPC, debido a que todos ellos se idearon para SoCs desde un inicio no existen programas que hagan copias de datos de un espacio a otro. En PC en cambio esto no es común y aunque Intel y AMD llevan años lanzando SoCs donde todos los componentes están unificados en un solo chip, el acceso en los diferentes elementos dentro del SoC no lo están y se aíslan partes de la RAM en exclusiva para un componente en concreto. Por ejemplo cuando tenemos una gráfica integrada y estamos asignando una cantidad de memoria a dicha gráfica lo que estamos haciendo es decirle a la CPU que su espació no lo puede tocar, ya que está fuera de su asignación.