UMA (Uniform Memory Access) es una arquitectura de memoria utilizada en sistemas multiprocesador donde todos los procesadores comparten un único espacio de direcciones de memoria principal y tienen el mismo tiempo de acceso a cualquier ubicación de memoria. Esto implica que la latencia de acceso a memoria es uniforme para todos los procesadores, independientemente de la ubicación de los datos o del procesador que los solicite. Típicamente, se logra mediante un bus de memoria compartido y un controlador de memoria centralizado que arbitra los accesos.
Esta arquitectura es común en sistemas de gama baja a media con un número limitado de CPUs, como las estaciones de trabajo modernas y muchos servidores de un solo socket o de pocos sockets. Por ejemplo, la mayoría de las arquitecturas de PC basadas en Intel o AMD con múltiples núcleos en un solo chip (multicore CPUs) operan bajo un modelo UMA para la memoria principal compartida por esos núcleos. También se encuentra en sistemas Symmetric Multiprocessing (SMP) de menor escala donde la simplicidad de la gestión de memoria supera las limitaciones de escalabilidad del bus compartido.
Para un arquitecto de sistemas, UMA simplifica enormemente la programación y la gestión de la concurrencia, ya que no hay necesidad de considerar la localidad de los datos para optimizar el rendimiento de acceso a memoria. Sin embargo, su principal desventaja es la escalabilidad: a medida que aumenta el número de procesadores, el bus de memoria compartido se convierte rápidamente en un cuello de botella, limitando el rendimiento general del sistema. Esto lleva a los arquitectos a considerar NUMA (Non-Uniform Memory Access) para sistemas de mayor escala, donde la latencia de acceso a memoria varía y requiere una gestión de datos más consciente de la topología para optimizar el rendimiento.