Arquitecturas y organización de procesadores
Sumar una matriz recorriéndola por columnas en lugar de por filas puede bajar la tasa de aciertos de la caché del 87 % al 0 %. El algoritmo es el mismo; lo que cambia es el orden.
01Arquitectura y organización
Hay dos maneras de mirar un procesador. La arquitectura es el contrato con el software: el conjunto de instrucciones, los registros visibles, los modos de direccionamiento, el modelo de memoria. La organización (o microarquitectura) es cómo se cumple ese contrato en el silicio: cuántas etapas tiene el pipeline, qué cachés hay, cuántas instrucciones se ejecutan a la vez. Dos procesadores con la misma arquitectura, como un Cortex-M0 y un Cortex-M7, ejecutan el mismo código con organizaciones y rendimientos muy distintos. La visión general de CPU, memoria y buses está en el sistema computacional de Informática I y en arquitectura de microprocesadores, de la tecnicatura.
La primera decisión de organización es cómo llegan instrucciones y datos. En la arquitectura de von Neumann comparten memoria y bus; en la Harvard, tienen memorias y buses separados y se pueden leer a la vez. Casi todos los procesadores actuales son Harvard modificados: una sola memoria principal, pero cachés separadas de instrucciones y de datos.
02El conjunto de instrucciones
| CISC | RISC | |
|---|---|---|
| Instrucciones | Muchas, algunas complejas, de largo variable | Pocas y simples, de largo fijo (32 bits) |
| Acceso a memoria | Casi cualquier instrucción puede operar sobre memoria | Solo las de carga y almacenamiento (load/store) |
| Registros | Pocos, con usos especiales | Muchos de propósito general (32 en RISC-V) |
| Ejemplos | x86, 8051 | ARM, RISC-V, AVR, MIPS |
La simplicidad de RISC es lo que permite segmentar la ejecución con eficiencia: todas las instrucciones pasan por las mismas etapas y tardan lo mismo en cada una. Los procesadores x86 modernos traducen internamente sus instrucciones complejas a microoperaciones de tipo RISC.
03La ecuación del rendimiento
El compilador y el conjunto de instrucciones deciden \( N_{instr} \); la organización decide el CPI; la tecnología y la profundidad del pipeline deciden el reloj. Comparar procesadores por su frecuencia de reloj solamente ignora los otros dos factores.
04Segmentación
Un pipeline divide la ejecución en etapas, y cada etapa trabaja sobre una instrucción distinta a la vez, como una línea de montaje. El clásico de cinco etapas: búsqueda (IF), decodificación y lectura de registros (ID), ejecución (EX), acceso a memoria (MEM) y escritura del resultado (WB). Idealmente termina una instrucción por ciclo, y el reloj puede ser hasta cinco veces más rápido que sin segmentar.
| Riesgo | Causa | Solución |
|---|---|---|
| Estructural | Dos etapas necesitan el mismo recurso | Duplicar el recurso: memorias separadas de instrucciones y datos |
| De datos | Una instrucción necesita un resultado que todavía no se escribió | Adelantamiento (forwarding) desde las etapas posteriores; si no alcanza, una burbuja |
| De control | Un salto se resuelve recién en EX, con instrucciones ya buscadas detrás | Predicción de saltos; si falla, se descartan las instrucciones buscadas |
05Jerarquía de memoria y caché
Un procesador ejecuta una instrucción por nanosegundo, y una DRAM tarda decenas de nanosegundos en responder. La solución es una jerarquía: una memoria pequeña y rápida, la caché, guarda copias de lo usado recientemente. Funciona porque los programas tienen localidad: temporal (lo que se usó se vuelve a usar) y espacial (después de una dirección se usa la siguiente). Por eso la caché trae líneas enteras de 32 o 64 bytes.
La dirección se divide en tres campos: el desplazamiento elige el byte dentro de la línea, el índice elige el conjunto donde puede estar, y la etiqueta se compara para saber si la línea guardada es la buscada. En una caché de correspondencia directa cada línea tiene un solo lugar posible; en una asociativa de n vías, n lugares.
Los fallos tienen tres causas: obligatorios (el primer acceso a una línea), de capacidad (el programa usa más datos de los que caben) y de conflicto (líneas que compiten por el mismo conjunto aunque sobre lugar en otros). Los últimos dependen de las direcciones, y el mismo algoritmo puede ser rápido o lento según cómo recorre los datos.
Una caché de datos con reemplazo LRU recibe la secuencia de direcciones de un programa corto. La franja de arriba muestra los primeros 512 accesos (verde, acierto; rojo, fallo) y la grilla, qué arreglo ocupa cada línea al terminar. Se supone 1 ciclo por acierto y 100 por fallo.
06Más allá de una instrucción por ciclo
| Técnica | Qué hace | Dónde |
|---|---|---|
| Superescalar | Varias instrucciones por ciclo, con ejecución fuera de orden | Procesadores de computadoras y teléfonos |
| SIMD | Una instrucción opera sobre varios datos a la vez | Extensiones vectoriales para audio, video y redes neuronales |
| Multinúcleo | Varios procesadores completos en un chip, con cachés compartidas | Casi todo lo que no es un microcontrolador simple |
| DSP | Multiplicación y acumulación en un ciclo y direccionamiento circular | Filtros digitales y procesamiento de señales |
07En el laboratorio
Escribir en C la suma de una matriz de 2048 × 2048 recorrida por filas y por columnas, medir los tiempos en una computadora y explicar la diferencia con la caché.
En un microcontrolador con contador de ciclos, medir cuántos ciclos tarda un lazo y compararlo con el código ensamblador que generó el compilador.
Dibujar el diagrama de un pipeline de cinco etapas para una secuencia de seis instrucciones con dos dependencias de datos, con y sin adelantamiento, y contar los ciclos.
08Errores frecuentes
- Comparar procesadores solo por el reloj. El CPI y la cantidad de instrucciones pesan igual.
- Recorrer una matriz en contra de cómo está guardada. En C se guarda por filas; recorrerla por columnas puede multiplicar el tiempo.
- Usar tamaños y separaciones potencia de dos sin pensar. Hacen coincidir los índices de caché y provocan fallos de conflicto.
- Confundir arquitectura con organización. Un mismo binario ARM corre en procesadores muy distintos.
09Autoevaluación
¿Cómo se divide una dirección de 32 bits en una caché directa de 4 KB con líneas de 32 B?
5 bits de desplazamiento, 7 de índice (128 líneas) y 20 de etiqueta.
¿Qué tiempo medio de acceso da una tasa de fallos del 2 % con 1 ciclo de acierto y 80 de penalidad?
\( 1 + 0{,}02 \cdot 80 = 2{,}6 \) ciclos.
Un programa pasa de CPI 2 a CPI 1,2, pero el reloj baja de 1 GHz a 800 MHz. ¿Mejora?
Sí: el tiempo por instrucción pasa de 2 ns a 1,5 ns.
¿Qué tipo de fallo elimina aumentar la asociatividad?
Los de conflicto. Los de capacidad necesitan una caché más grande, y los obligatorios, líneas más largas o precarga.
10Para ampliar
- David A. Patterson y John L. Hennessy. Computer Organization and Design: RISC-V Edition. 2.ª ed., Morgan Kaufmann, 2020. El texto de curso: conjunto de instrucciones, pipeline y jerarquía de memoria sobre RISC-V.
- John L. Hennessy y David A. Patterson. Computer Architecture: A Quantitative Approach. 6.ª ed., Morgan Kaufmann, 2017. El nivel siguiente: paralelismo de instrucciones, cachés avanzadas y aceleradores.
- Sarah L. Harris y David Harris. Digital Design and Computer Architecture: RISC-V Edition. Morgan Kaufmann, 2021. Construye un procesador RISC-V completo en HDL, desde las compuertas.