# Computación heterogénea

La computación heterogénea se refiere a sistemas que usan más de un tipo procesador. Son sistemas que ganan en rendimiento no solo por añadir el mismo tipo de procesadores, sino por añadir procesadores distintos. Normalmente, incorporando capacidades de procesado especializadas para realizar tareas particulares.
Normalmente la heterogeneidad en el contexto de la computación hace referencia a diferentes arquitecturas de conjuntos de instrucciones (ISA), donde el procesador principal tiene uno y el resto tienen otro. Normalmente una arquitectura muy diferente (quizás más de una), no solamente una microarquitectura diferente (el procesamiento de números de coma flotante es un caso especial no siempre heterogéneo). Por ejemplo, el ARM big.LITTLE es una excepción donde las ISAs de los núcleos son iguales y la heterogeneidad se refiere a la velocidad de diferentes microarquitecturas de la misma ISA, siendo más bien un sistema de multiprocesamiento simétrico (SMP).
Antiguamente la computación heterogénea significaba que diferentes ISAs tenían que ser controladas de forma distinta, mientras que en un ejemplo moderno, los sistemas de Arquitectura de Sistema Heterogéneo (HSA), eliminan la diferencia (para el usuario); usan múltiples tipos de procesador (normalmente CPUs y GPUs), en el mismo circuito integrado, para dar lo mejor de ambos mundos: el procesamiento general de la GPU (aparte de sus bien conocidas capacidades gráficas de renderizado en 3D, también puede realizar cálculos matemáticos intensivos con conjuntos de datos muy grandes), mientras que las CPUs pueden ejecutar el sistema operativo y realizar tareas en serie tradicionales.
El nivel de heterogeneidad en sistemas de computación moderna aumenta gradualmente y se incrementa en el área de los chips. El avance de las tecnologías de fabricación permite que los antiguos componentes se integren como partes de un system-on-chip, o SoC. Por ejemplo, muchos procesadores nuevos ahora incluyen una lógica integrada para interactuar con otros dispositivos (SATA, PCI, Ethernet, USB, RFID, Radios, UARTs, y controladores de memoria), así como unidades funcionales programables y aceleradores de hardware (GPUs, criptografía co-procesadores, procesadores de red programables, codificadores/descodificadores A/V, etc.).
Los hallazgos recientes muestran que un chip multiprocesador de ISA-heterogénea que aprovecha la diversidad ofrecida por múltiples ISAs, puede aumentar el rendimiento de la mejor arquitectura heterogénea con ISAs del mismo tipo en un 21% con un ahorro de consumo energético del 23%. El anuncio reciente de AMD sobre ARM y SoCs x86 conocido como Proyecto Skybridge sugiere un chip multiprocesador con una ISA heterogénea (ARM+x86).

## Retos en la computación heterogénea

Sistemas de computación heterogénea presentan nuevos retos no encontrados en los típicos sistemas homogéneos. La presencia de elementos de procesamiento múltiple incrementa todos los problemas relacionados con los sistemas homogéneos de procesamiento en paralelo, mientras que el nivel de heterogeneidad en el sistema puede introducir no-uniformidad en sistemas de desarrollo, prácticas de programación y en las capacidades del sistema global. Las áreas de heterogeneidad pueden incluir:
* ISA O arquitectura de conjunto de la instrucciones
** Los elementos de cómputo pueden tener arquitecturas de conjunto de instrucciones diferentes, llevando a una incompatibilidad binaria.
* ABI o aplicación interfaz binaria
** Los elementos de cómputo pueden interpretar la memoria de manera diferente. Esto puede incluir tanto endianness, convención de llamada y diseño de memoria, y depende tanto de la arquitectura como del compilador utilizado.
* API O interfaz de programación de aplicaciones
** Las librerías y los servicios del sistema operativo pueden no estar disponibles de forma uniforme para todos los elementos de cómputo.
* Implementación de Bajo-Nivel de las características del Lenguaje
** Características del lenguaje tales como funciones e hilos de ejecución, a menudo se implementan utilizando punteros a función, un mecanismo qué requiere abstracción o traducción adicionales cuando se utilizan en entornos heterogéneos.
* Interfaz de memoria y Jerarquía
** Los elementos de cómputo pueden tener diferentes estructuras de caché, protocolos de coherencia de caché, y el acceso a la memoria puede ser uniforme o no (NUMA). Se pueden encontrar diferencias en la habilidad para leer datos de longitud arbitraria. Algunos procesadores pueden realizar accesos de un byte de tamaño, de una palabra o en masa.
* Interconexión
** Los elementos de cómputo pueden tener diferentes formas de interconexión además de las interfaces básicas de memoria/bus. Esto puede incluir interfaces de red dedicada, dispositivos de acceso de memoria Directa (DMA), buzones, FIFOs, y memorias scratchpad, etc. Además, algunas porciones de un sistema heterogéneo pueden tener coherencia de caché, mientras que otros pueden requerir una implicación explícita del software para mantener la consistencia y la coherencia.
* Rendimiento
** Un sistema heterogéneo puede tener CPUs idénticas en términos de arquitectura, pero tener diferencias subyacentes en micro-arquitectura que conducen a varios niveles de rendimiento y consumo de energía.

## Plataformas de ejemplo

Se pueden encontrar plataformas de computación heterogénea en cada ámbito de la informática—desde servidores dedicados y máquinas de alto rendimiento de cálculo hasta dispositivos embebidos de bajo consumo como los móviles y tabletas.
* Informática de Rendimiento alto
** Cray XD1
** Ordenadores SRC SRC-6 y SRC-7
* Sistemas Embebidos (DSP y Plataformas Móviles)
** Texas Instruments OMAP
** Dispositivos analógicos Blackfin
** Nvidia Tegra
** Samsung Exynos
** Apple "A"
* Computación Reconfigurable
** Xilinx Plataforma FPGAs (Virtex-II Pro, Virtex 4 FX, Virtex 5 FXT) y Plataformas Zynq
** Intel "Stellarton" (Átom + Altera FPGA)
* Redes
** Procesadores de red Intel IXP
** Procesadores de red Netronome NFP
* Informática de Propósito general, Juegos, y Dispositivos de entretenimiento
** Intel Sandy Puente, Ivy Bridge, y CPUs Haswell
** APUs AMD
** IBM Cell, en Playstation 3
*** SpursEngine, una variante del procesador IBM Cell
** Emotion Engine, en Playstation 2