# EPIC (informática)

Procesamiento de instrucciones explícitamente en paralelo (del inglés EPIC: Explicitly Parallel Instruction Computing) es un paradigma de programación que comenzó a investigarse a principios de los años 80 y se convirtió en una patente estadounidense 4,847,755 (Gordon Morrison, et. al). Este paradigma también se conoce como arquitecturas de Independencia. Fue utilizado por Intel y HP para el desarrollo de la arquitectura de Intel IA-64 y se ha implementado en la línea de procesadores de servidor Intel Itanium e Itanium 2. El objetivo de EPIC era aumentar la capacidad de los microprocesadores para ejecutar instrucciones de software en paralelo mediante el uso del compilador, en lugar de la compleja circuitería en cápsula (die), para identificar y aprovechar las oportunidades para la ejecución en paralelo. Esto permitiría escalar el rendimiento más rápidamente en los futuros diseños de procesadores, sin tener que recurrir a frecuencias de reloj cada vez más altas, las cuales se han convertido desde ese momento en una problemática importante debido a problemas de alimentación y refrigeración.

## Más allá de VLIW

Las arquitecturas EPIC añaden numerosas características para paliar las deficiencias de VLIW:
* Cada grupo de instrucciones de software múltiples recibe el nombre de paquete (bundle en inglés). Cada uno de los paquetes contiene información que indica si algún paquete subsiguiente depende de este conjunto de operaciones. Con esta habilidad, se pueden construir implementaciones posteriores que envíen varios paquetes en paralelo. El compilador se encarga de calcular la información de dependencia de modo que libere al hardware de la tarea de ejecutar comprobaciones sobre la dependencia de operandos.
* Se utiliza una instrucción de carga especulativa como un tipo de búsqueda anticipada de datos. Esta búsqueda anticipada aumenta las probabilidades de éxito de encontrar los datos requeridos en la caché primaria para las cargas normales.
* Así mismo, una instrucción de carga de comprobación ayuda a las cargas especulativas mediante la comprobación de que una carga no depende de un almacenamiento anterior.
La arquitectura EPIC también incluye un cajón desastre de conceptos sobre arquitecturas para aumentar el ILP (paralelismo en el nivel de instrucciones):
* Se utiliza la ejecución de saltos predicados para reducir el número de ocurrencias de los saltos y para incrementar la ejecución especulativa de instrucciones. Gracias esta característica, las condiciones de los saltos se convierten en registros de predicados que se utilizan para terminar los resultados de instrucciones ejecutadas desde la parte del salto que se desprecia.
* Las excepciones retardadas (mediante el uso de un bit Not-A-Thing, Negación de algo, dentro de los registros de propósito general) también permiten una mayor ejecución especulativa incluso después de posibles excepciones.
* El uso de archivos de registro de arquitectura muy amplios elimina la necesidad de renombrar los registros.
* Instrucciones de salto de múltiples direcciones.
La arquitectura IA-64 añadió, asimismo, la rotación de registros: un concepto de procesamiento digital de señales útil para el despliegue de bucles y la segmentación de software.

## Investigación y desarrollo en proceso

* El proyecto del grupo IMPACT de la Universidad de Illinois en Urbana-Champaign dirigido por Wen-mei Hwu se ha convertido en la fuente de gran parte de la investigación de mayor repercusión llevada a cabo sobre este tema.
* La arquitectura PlayDoh de los laboratorios HP es otro de los mayores proyectos de investigación.
* Gelato.org es una comunidad de desarrollo de código abierto en la que investigadores comerciales y académicos trabajan para desarrollar compiladores más eficaces para las aplicaciones de Linux ejecutadas en servidores Itanium.