La mayoría de los datos navegarán a través de la jerarquía de memoria de manera predeterminada, pero se pueden incorporar excepciones en la computadora; Puedo pensar en al menos tres ejemplos.
Extensiones de transmisión SIMD (SSE) en CPU x86 y sus sucesores
Los programas de usuario pueden acceder a las operaciones de SSE: si no confía en que su compilador las inserte, se pueden programar explícitamente utilizando un conjunto de intrínsecos que son un poco más convenientes que la inyección de un ensamblaje escrito a mano.
- ¿Es normal que Windows 10 esté usando más de 3 GB de RAM?
- ¿Por qué necesitamos RAM? ¿La ROM en sí misma no es suficiente?
- ¿Debo comprar una Macbook Air con 128 GB o 256 GB? ¿Y qué diferencia tendría tener 4 GB de RAM en lugar de 8 GB de RAM?
- ¿Cuáles son los diferentes problemas (problemas) relacionados con el diseño de RAM estática?
- Cada vez que enciendo mi computadora, se crea un svchost.exe dentro de la carpeta temporal en C: que se inicia aleatoriamente y consume el 30% de la CPU con un uso considerable de RAM. ¿Cómo termino esto?
La familia _mm_store de intrínsecos generalmente escribe en ubicaciones de memoria (alineadas) a través del caché, pero también vienen en versiones de _mm_stream coincidentes. El último omite los cachés, excepto para actualizar las copias que ya se almacenaron en caché, de modo que pueda escribir datos que no volverá a utilizar sin el efecto secundario de llenar innecesariamente la jerarquía de memoria.
Contadores de rendimiento
En primer lugar, algunos datos no provienen de la memoria, las CPU modernas recopilan métricas de su propio comportamiento, como su número de instrucciones enteras y operaciones de punto flotante retiradas, temperatura de operación, consumo de energía, etc.
Este tipo de datos puede aparecer en registros de propósito especial para que los programas lo lean sin tocar su espacio de direcciones. La condición de la CPU no es parte del estado lógico del programa, por lo que no se aplica la jerarquía de memoria.
Memoria del depósito atómico en la línea SGI Origin
Este caso puede estar listo para los libros de historia en este momento, pero las máquinas SGI Origin se diseñaron como multiprocesadores de memoria compartida grandes (en ese momento), lo que hizo que fuera natural incluir soporte arquitectónico para la sincronización.
IRIX lucía un conjunto adicional de llamadas gratuitas / asignadas, permitía que los programas de usuario obtuvieran fragmentos de una memoria de depósito atómico separada, que admitía un conjunto de operaciones que garantizaban la atomicidad entre todas las CPU del sistema. Poner partes de esa memoria en cachés locales solo habría producido los problemas de consistencia que se diseñó para evitar en primer lugar, por lo que las transferencias omitieron el almacenamiento en caché en ambas direcciones.
Debe haber una gran cantidad de otros ejemplos, estos son justo lo que se me ocurrió.
De todos modos, no es absolutamente necesario que todos los datos sigan la jerarquía de memoria, pero los programas que hacen uso de funciones para omitirla probablemente están haciendo algo específico del sistema que afecta su portabilidad a otras computadoras.