ARQUITECTURAS SUPERESPECULATIVAS La ejecución especulativa es la ejecución de código por parte del procesador que no tiene por qué ser necesaria a priori. La ejecución especulativa no es más que una optimización. Sólo es útil cuando la ejecución previa requiere menos tiempo y espacio que el que requeriría la ejecución posterior, siendo este ahorro lo suficientemente importante como para compensar el esfuerzo gastado en caso de que el resultado de la operación nunca llegue a usarse. Hay dos líneas: Microarquitecturas con búsquedas de hasta 32 instr (anchura), buffer de reordenación de 128, y colas de almacenamiento de 128 entradas para varias configuraciones de memoria. Utilización de modelos de dependencia débil para conseguir prestaciones superescalares de hasta 19 instrucciones por ciclo (IPC) puntuales y 9 IPC de media en el test SPEC-95. 32
MULTI-THREADING El paradigma de multihilo ha llegado a ser más popular a medida que los esfuerzos para llevar más adelante el paralelismo a nivel de instrucción se han atascado desde finales de los años 1990.
Hardware Support para threads: SuperThreading HyperThreading Simultaneous Multi Threading (SMT) 33
SINGLE-THREADED PROCESSOR El procesador proporciona la ilusión de la ejecución concurrente. Front-end: fetching/decoding/reordering. Execution core: ejecución real. Múltiples programas en la memoria, pero sólo uno se ejecuta en cada momento. Time-slicing via context switching. 34
SIMPLIFIED EXAMPLE CPU 35 Front-end Execution Core (Back-end) El front-end puede emitir 4 instrucciones simultáneas al execution core. 4-stage pipeline. El execution core tiene 8 unidades funcionales. Cada una: 6-stage pipeline.
36 El front-end está a punto de emitir 2 instrucciones. En el ciclo siguiente se emitirán 3. En el siguiente 1, etc. Un hardware complejo se encarga de decidir la siguiente instrucción en ser emitida. SIMPLIFIED EXAMPLE CPU Front-end Execution Core
37 En el ciclo actual, 2 unidades funcionales están siendo usadas. En el siguiente sólo una, etc. Los huecos en blanco son pipeline “bubbles”: oportunidades perdidas para hacer algo útil, debido a un mal paralelismo a nivel de instrucciones SIMPLIFIED EXAMPLE CPU Front-end Execution Core
BLOCK MULTI-THREADING 38 RAM CPU 4 threads en memoria. En la arquitectura tradicional, sólo se ejcuta el rojo. Cuando el thread rojo se atasca o termina, se pasa a otro thread. Coarse-grained multithreading.
SINGLE-THREADED SMP (SYMMETRIC MULTI-PROCESSING) 2 threads se ejecutan a la vez, pero en CPUs distintas. Se dobla el número de burbujas. Doble velocidad y doble gasto. 39
INTERLEAVED MULTI-THREADING. SUPER-THREADING Fine-grained o time-sliced multithreading. Principio: el procesador puede ejecutar más de un thread al mismo tiempo. Requiere mejor hardware. Menor gasto. En cada etapa del front-end solo se puede ejecutar un thread. 40
SIMULTANEOUS MULTI-THREADING. HYPER-THREADING Principio: el procesador puede ejecutar más de un hilo a la vez, incluso dentro del mismo ciclo de reloj! Requiere hardware aún más complejo. En el esquema: sólo dos threads se ejecutan simultáneamente. Desde el punto de vista operativo, hay dos procesadores "lógicos“. 41
TRACE (MULTISCALAR) PROCESSORS La idea es utilizar un trace processor que consiste en múltiples cores de ejecución en un chip, cada uno de los cuales ejecuta simultáneamente una traza diferente del código.
Todos excepto uno de los cores ejecutan trazas especulativas utilizando predicción de saltos para seleccionar las trazas. La idea es que 4 cores de procesamiento puedan ejecutar 16 o más instrucciones por ciclo si cada core ejecuta 4 instrucciones por ciclo. 42
VECTOR (IRAM) PROCESSORS Los Intelligen Random-Access Memory processors trabajan sobre tecnologías de acceso a memoria DRAM, en la hipótesis de que el cuello de botella en el futuro estará en el sistema de memoria.
Buscan construir multiprocesadores escalables empotrados en un único chip con arrays de memoria de gran escala. Al meter la memoria en el chip aumenta el ancho de banda de acceso a la memoria lo que permitiría un procesamiento vectorial más barato. Para ejecutar código vectorial el código tiene que ser vectorizable. 43
SINGLE-CHIP MULTIPROCESSORS (MULTICORE) Buscan meter en un chip entre 4 y 16 procesadores monocore avanzados. Cada uno de los procesadores está fuertemente acoplados con una cache pequeña de 1er nivel, y todos los procesadores comparten una cache de 2º nivel. Los procesadores pueden colaborar en tareas paralelas o ejecutar tareas independientes. Requiere código con paralelismo explícito para aprovechar todo el potencial. 44
RAW (CONFIGURABLE) PROCESSORS Buscan explotar el paralelismo masivo dentro del chip, con cientos de procesadores muy simples, cada uno con una cierta lógica reconfigurable. La ejecución paralela y las comunicaciones se reordenan por software para su control y coordinación. Esto elimina las interfaces del juego de instrucciones ya que la arquitectura es replicada directamente para su exposición al compilador. El compilador adapta el hardware a cada aplicación. 45
Página anterior | Volver al principio del trabajo | Página siguiente |