Arquitectura de la computadora: ¿cómo funciona el soporte de hardware para el acceso a la memoria no alineado en los procesadores modernos?

Un procesador realiza un acceso a la memoria en términos de una carga o una instrucción de almacenamiento.

En la mayoría de las arquitecturas (x86 / ARM / POWER), las instrucciones de carga / almacenamiento admiten el acceso a diferentes tamaños de bytes (1 byte / 2 byte / 4 byte / 8 byte / 16 byte normalmente)

Un acceso a memoria no alineado es una carga / almacén que está intentando acceder a una ubicación de dirección que no está alineada con el tamaño de acceso .

Por ejemplo: una instrucción de carga que intenta acceder a 4 bytes desde la dirección 0x1 es un acceso no alineado. Esto generalmente se divide en dos operaciones internas como se muestra en el siguiente diagrama y se fusiona en una. (Referencia: Mi presentación sobre la ejecución de almacén de carga de compartición de diapositivas)

Tenga en cuenta que en el caso de sistemas con cachés, también puede haber casos de direcciones que cruzan un límite de línea de caché (también conocido como acceso desalineado ) y algunas veces los accesos también pueden cruzar un límite de página.

Entonces también puede tener otras complejidades, como la mitad del acceso a la memoria se encuentra en la memoria caché, mientras que la otra mitad se pierde en la memoria caché. La unidad de ejecución del almacén de carga junto con los controladores de caché se ocupa de estas complejidades, pero en resumen sigue el mismo principio básico de fusionar dos accesos

Algunas arquitecturas (como Intel x86) también tienen interrupciones de alineación que ayudan a detectar el acceso a la memoria sin alinear.

Los controladores de memoria son un tema muy complejo y esto es solo una descripción general. Además, al no trabajar en un subsistema de arquitectura de memoria en particular, no puedo decir con certeza cómo lo hace alguno en particular. Pero me arriesgaré a adivinar. También hay miles de formas diferentes de hacer cualquier cosa, por lo que esto puede ser correcto o no, dependiendo de la arquitectura, el procesador y varias compensaciones de diseño.

Hay (como mínimo) dos escenarios que quizás desee abordar. El primero es un subconjunto no alineado del tamaño de direccionamiento predeterminado de la memoria y el segundo es un superconjunto no alineado del tamaño de memoria direccionable predeterminado. La mayoría de la memoria es byte direccionable. Incluso si hay un bus 4B u 8B, tendrá selecciones de bytes. Pero el subsistema de memoria del procesador solo puede admitir 4, 8 o un tamaño de acceso de memoria mayor, generalmente para permitir un mayor ancho de banda. Esto es diferente al tamaño de página de la memoria. Y es diferente aún para la memoria fuera de caché frente a la memoria principal. Sería diferente para la memoria de una CPU que la memoria de una GPU, pero todos necesitan hacer cosas similares.

Hagamos un ejemplo hipotético simple. Tal vez tiene una estructura de datos que es una matriz de bytes y desea trabajar en un solo byte o en una colección más grande de bytes.

Supongamos que desea un solo byte de un conjunto más grande de memoria direccionable. El controlador de memoria buscará el tamaño mínimo direccionable, digamos 4B, y enmascarará todo menos el byte que desee y lo cambiará al byte menos significativo del bus de datos para transferirlo a un registro para el procesador.

Del mismo modo, si desea un número de bytes mayor, pero no alineado, y supone que esos bytes abarcan el rango mínimo direccionable del controlador de memoria, tal vez 4B, el controlador de memoria solicitaría las dos palabras y haría la alineación necesaria.

Los procesadores integrados pueden admitir una granularidad más fina que las arquitecturas de servidor (o no, dependiendo de la combinación de servidor / chipset). He trabajado en diseños que abordan palabras o palabras de 64B o ‘palabras’ de 4kB y en un nivel y trabajo en bytes o bits en otro. Depende en gran medida de su aplicación y procesador. Pero los ciclos son baratos en las tuberías de memoria, que son profundas, por lo que gastarán los ciclos en la alineación. Agregue memoria virtual, TLB y hay otra capa de indirección que el controlador debe administrar. Por otro lado, las estructuras de datos eficientes en la memoria permiten un acceso eficiente a la memoria que puede eliminar ‘burbujas’ en la obtención de datos de la memoria.

Los accesos de memoria no alineados generan dos accesos alineados y una operación de fusión. Esto puede hacerse a nivel del controlador de caché o dividiendo el acceso en varias microoperaciones.

More Interesting

¿La informática de 128 bits se convertirá alguna vez en la corriente principal?

¿Puedo triplicarme en ingeniería informática, ingeniería eléctrica e ingeniería aeroespacial?

¿Es el diseño instructivo una opción viable para una licenciatura en ingeniería informática en la India?

Soy estudiante de informática (2º año). ¿En qué idiomas o campos debo concentrarme para poder ganar un buen dinero en el futuro?

¿Es buena la ingeniería informática en Pallotti, Nagpur?

¿Por qué las CPU son más importantes en el renderizado final que las GPU?

¿Cómo es la electrónica y la ingeniería informática? ¿Debería preferirlo a TI en KIIT?

Lamento haber elegido estudiar Ingeniería de Producción en una buena universidad en lugar de CS (Lo que más me gusta) en una mediocre. ¿Cómo puedo redimirme?

¿Cuál fue su camino profesional hacia su trabajo como ingeniero informático?

¿Los ingenieros informáticos juegan con las nuevas tecnologías todo el tiempo?

¿Cuál es la mejor manera de lidiar con mis conferencias? Estoy estudiando ingeniería informática.

¿Qué temas debo aprender en informática y programación?

En términos de ingeniería informática, ¿está bien asistir a una universidad de bajo rango para mi licenciatura si planeo tener una maestría y un doctorado de una universidad de alto rango como MIT en el futuro?

¿Cómo es una típica entrevista de PSU (para un estudiante de ingeniería informática)?

¿Cómo es ir a estudiar ingeniería informática en Finlandia?