Un procesador de barril es una CPU que cambia entre subprocesos de ejecución en cada ciclo . Esta técnica de diseño de CPU también se conoce como multiprocesamiento temporal "intercalado" o "de grano fino" . A diferencia del multiprocesamiento simultáneo en las arquitecturas superescalares modernas , generalmente no permite la ejecución de múltiples instrucciones en un ciclo.
Al igual que en la multitarea preventiva , a cada subproceso de ejecución se le asigna su propio contador de programa y otros registros de hardware ( el estado arquitectónico de cada subproceso ). Un procesador de barril puede garantizar que cada subproceso ejecutará una instrucción cada n ciclos, a diferencia de una máquina multitarea preventiva , que normalmente ejecuta un subproceso de ejecución durante decenas de millones de ciclos, mientras que todos los demás subprocesos esperan su turno.
Una técnica llamada ralentización C puede generar automáticamente un diseño de procesador de barril correspondiente a partir de un diseño de procesador monotarea. Un procesador de barril de n vías generado de esta manera actúa de forma muy similar a n copias de multiprocesamiento independientes del procesador monotarea original, cada una de las cuales funciona aproximadamente a 1/ n de la velocidad original. [ cita requerida ]
Uno de los primeros ejemplos de procesador de barril fue el sistema de procesamiento de E/S de las supercomputadoras de la serie CDC 6000. Estas ejecutaban una instrucción (o una parte de una instrucción) de cada uno de los 10 procesadores virtuales diferentes (llamados procesadores periféricos) antes de volver al primer procesador. [1] De la serie CDC 6000 leemos que "Los procesadores periféricos se implementan colectivamente como un procesador de barril. Cada uno ejecuta rutinas independientemente de los demás. Son un predecesor vago del dominio del bus o del acceso directo a la memoria ".
Una de las motivaciones de los procesadores de barril era reducir los costos de hardware. En el caso de las PPU CDC 6x00, la lógica digital del procesador era mucho más rápida que la memoria central, por lo que en lugar de tener diez procesadores separados, hay diez unidades de memoria central separadas para las PPU, pero todas comparten el mismo conjunto de lógica del procesador.
Otro ejemplo es el Honeywell 800 , que tenía 8 grupos de registros, lo que permitía hasta 8 programas simultáneos. Después de cada instrucción, el procesador (en la mayoría de los casos) cambiaba al siguiente programa activo en la secuencia. [2]
Los procesadores de barril también se han utilizado como procesadores centrales a gran escala. El Tera MTA (1988) fue un diseño de procesador de barril a gran escala con 128 subprocesos por núcleo. [3] [4] La arquitectura MTA ha experimentado un desarrollo continuo en productos sucesivos, como el Cray Urika-GD , presentado originalmente en 2012 (como YarcData uRiKA) y destinado a aplicaciones de minería de datos. [5]
Los procesadores de barril también se encuentran en sistemas integrados, donde son particularmente útiles por su rendimiento determinista de subprocesos en tiempo real .
Un ejemplo temprano es la versión de “CPU dual” del COP400 de cuatro bits que introdujo National Semiconductor en 1981. Este microcontrolador de un solo chip contiene dos CPU aparentemente independientes que comparten instrucciones, memoria y la mayoría de los dispositivos de E/S. En realidad, las CPU duales son un único procesador de barril de dos subprocesos. Funciona duplicando ciertas secciones del procesador (las que almacenan el estado arquitectónico ), pero sin duplicar los principales recursos de ejecución, como la ALU , los buses y la memoria. Se establecen estados arquitectónicos separados con A (acumuladores), B (registros de puntero), C (indicadores de acarreo), N (punteros de pila) y PC (contadores de programa) duplicados. [6]
Otro ejemplo es el XMOS XCore XS1 (2007), un procesador de barril de cuatro etapas con ocho subprocesos por núcleo. (Los procesadores más nuevos de XMOS también tienen el mismo tipo de arquitectura). El XS1 se encuentra en dispositivos Ethernet, USB, de audio y control, y en otras aplicaciones donde el rendimiento de E/S es crítico. Cuando el XS1 se programa en el lenguaje "XC", se puede implementar un acceso directo a la memoria controlado por software .
Los procesadores de barril también se han utilizado en dispositivos especializados, como el procesador de E/S de red de ocho subprocesos Ubicom IP3023 (2004). Algunos microcontroladores de 8 bits de Padauk Technology cuentan con procesadores de barril con hasta 8 subprocesos por núcleo.
Un procesador monotarea pasa mucho tiempo inactivo, sin hacer nada útil cuando se produce una falla de caché o una interrupción en la secuencia de procesamiento . Las ventajas de utilizar procesadores de barril en lugar de procesadores monotarea incluyen:
Los procesadores de barril tienen algunas desventajas.
{{cite web}}
: CS1 maint: copia archivada como título ( enlace )