# Heterogeneous System Architecture

Heterogeneous System Architecture (HSA) es un conjunto de especificaciones entre proveedores que permite la integración de CPU y GPU en el mismo bus, con memoria compartida y tareas. La HSA está desarrollando la HSA Foundation, que incluye (entre muchos otros) AMD y ARM. El objetivo declarado de la plataforma es reducir la latencia de comunicación entre las CPU, las GPU y otros dispositivos informáticos, y hacer que estos diversos dispositivos sean más compatibles desde la perspectiva de un programador.$^{:3}$ aliviando al programador de la tarea de planear el movimiento de datos entre las memorias disjuntas de los dispositivos (como se debe hacer actualmente con OpenCL o CUDA).
CUDA y OpenCL, así como la mayoría de los lenguajes de programación bastante avanzados, pueden usar HSA para aumentar su rendimiento de ejecución. La computación heterogénea se utiliza ampliamente en dispositivos de sistema en chip, como tabletas, teléfonos inteligentes, otros dispositivos móviles y consolas de videojuegos. HSA permite a los programas utilizar el procesador de gráficos para cálculos de punto flotante sin memoria o programación por separado.

## Razones

La razón detrás de HSA es aliviar la carga de los programadores cuando descargan cálculos a la GPU. Originalmente impulsado únicamente por AMD y llamado FSA, la idea se amplió para abarcar otras unidades de procesamiento además de las GPU, como los DSP de otros fabricantes.
* Pasos realizados al descargar cálculos a la GPU en un sistema que no es HSA
* Pasos realizados al descargar cálculos a la GPU en un sistema que no es HSA
* Pasos realizados al descargar cálculos a la GPU en un sistema HSA, utilizando la funcionalidad HSA
* Pasos realizados al descargar cálculos a la GPU en un sistema HSA, utilizando la funcionalidad HSA
Las GPU modernas son muy adecuadas para realizar single instruction, multiple data (SIMD) y single instruction, multiple threads (SIMT), mientras que las CPU modernas todavía se están optimizando para la bifurcación. etc.

## Visión general

Originalmente introducido por sistemas integrados como el Cell Broadband Engine, compartir la memoria del sistema directamente entre múltiples actores del sistema hace que la informática heterogénea sea más común. La informática heterogénea en sí misma se refiere a sistemas que contienen múltiples unidades de procesamiento: unidades de procesamiento central (CPU), unidades de procesamiento de gráficos (GPU), procesadores de señal digital (DSP) o cualquier tipo de circuitos integrados específicos de la aplicación (ASIC). La arquitectura del sistema permite que cualquier acelerador, por ejemplo un procesador de gráficos, funcione con el mismo nivel de procesamiento que la CPU del sistema.
Entre sus características principales, HSA define un espacio de dirección virtual unificado para dispositivos informáticos: cuando las GPU tradicionalmente tienen su propia memoria, separada de la memoria principal (CPU), HSA requiere que estos dispositivos compartan tablas de página para que los dispositivos puedan intercambiar datos compartiendo punteros. Esto debe ser respaldado por unidades de administración de memoria personalizadas.$^{:6–7}$ Para hacer posible la interoperabilidad y también para facilitar varios aspectos de la programación, HSA pretende ser independiente de ISA tanto para CPU como para aceleradores, y para admitir lenguajes de programación de alto nivel.
Hasta ahora, las especificaciones HSA cubren:

### Capa intermedia HSA

HSA Intermediate Layer (HSAIL), un conjunto de instrucciones virtuales para programas paralelos
* Similar a la representación intermedia LLVM y SPIR (utilizado por OpenCL y Vulkan)
* Finalizado a una instrucción específica establecida por un compilador JIT
* Tomar decisiones tardías sobre qué núcleo(s) debe ejecutar una tarea
* Explícitamente paralelo
* Soporta excepciones, funciones virtuales y otras funciones de alto nivel
* Soporte para depuración

### Modelo de memoria de HSA

* compatible con los modelos de memoria C++ 11, OpenCL, Java y .NET
* Consistencia relajada
* Diseñado para admitir tanto lenguajes administrados (por ejemplo, Java) como no administrados (por ejemplo, C)
* Facilitará el desarrollo de compiladores de terceros para una amplia gama de productos heterogéneos programados en Fortran, C++, C++ AMP, Java y otros.

### Despachador y tiempo de ejecución de HSA

* Diseñado para habilitar colas de tareas heterogéneas: una cola de trabajos por núcleo, distribución de trabajo en colas, equilibrio de carga mediante work stealing
* Cualquier núcleo puede programar el trabajo para sí mismo o para cualquier otro
* Reducción significativa de los gastos generales del trabajo de programación para un núcleo
Los dispositivos móviles son una de las áreas de aplicación de la HSA, en la cual se obtiene una mayor eficiencia energética.

### Diagramas bloque

Los diagramas de bloques a continuación proporcionan ilustraciones de alto nivel sobre cómo opera la HSA y cómo se compara con las arquitecturas tradicionales.
* Arquitectura estándar con una discreta GPU conectada al bus PCI Express. Zero-copy entre la GPU y la CPU no es posible debido a las distintas memorias físicas.
* Arquitectura estándar con una discreta GPU conectada al bus PCI Express. Zero-copy entre la GPU y la CPU no es posible debido a las distintas memorias físicas.
* HSA brinda memoria virtual unificada y facilita el envío de punteros a través de PCI Express en lugar de copiar toda la información.
* HSA brinda memoria virtual unificada y facilita el envío de punteros a través de PCI Express en lugar de copiar toda la información.
* En la memoria principal particionada, una parte de la memoria del sistema se asigna exclusivamente a la GPU. Como resultado, la operación de copia cero no es posible.
* En la memoria principal particionada, una parte de la memoria del sistema se asigna exclusivamente a la GPU. Como resultado, la operación de copia cero no es posible.
* Memoria principal unificada, posible gracias a una combinación de GPU y CPU habilitadas para HSA. Como resultado, es posible realizar operaciones de copia cero.
* Memoria principal unificada, posible gracias a una combinación de GPU y CPU habilitadas para HSA. Como resultado, es posible realizar operaciones de copia cero.
* Tanto la MMU de la CPU como la IOMMU de la GPU deben cumplir con las especificaciones de hardware de la HSA.
* Tanto la MMU de la CPU como la IOMMU de la GPU deben cumplir con las especificaciones de hardware de la HSA.

## Soporte de software

Algunas de las características específicas de HSA implementadas en el hardware deben ser compatibles con el núcleo del sistema operativo y los controladores de dispositivo específicos. Por ejemplo, el soporte para las tarjetas gráficas AMD Radeon y AMD FirePro, y las APU basadas en Graphics Core Next (GCN), se fusionaron en la versión 3.19 de la línea principal del núcleo Linux, lanzada el 8 de febrero de 2015. Programs do not interact directly with amdkfd, but queue their jobs utilizing the HSA runtime. Esta primera implementación, conocida como amdkfd, se centra en las APU "Kaveri" o "Berlin" y funciona junto con el controlador de gráficos Radeon kernel existente.
Además, amdkfd admite cola heterogénea (HQ), que tiene como objetivo simplificar la distribución de trabajos computacionales entre múltiples CPU y GPU desde la perspectiva del programador. El soporte para la administración de memoria heterogénea (HMM), adecuado solo para hardware de gráficos con la versión 2 de IOMMU de AMD, fue aceptado en la versión principal del núcleo Linux versión 4.14.
Se ha anunciado el soporte integrado para plataformas HSA para el lanzamiento de "Sumatra" de OpenJDK, previsto para 2015.
AMD APP SDK es el kit de desarrollo de software patentado de AMD que apunta a la computación paralela, disponible para Microsoft Windows y Linux. Bolt es una biblioteca de plantillas C ++ optimizada para computación heterogénea.
GPUOpen comprende un par de otras herramientas de software relacionadas con HSA. CodeXL versión 2.0 incluye un perfilador de HSA.

## Soporte de hardware
### AMD

Para febrero de 2015, solo las APU de la serie A "Kaveri" de AMD (consulte los procesadores de escritorio "Kaveri" y los procesadores móviles "Kaveri") y la PlayStation 4 de Sony permitieron que la GPU integrada accediera a la memoria mediante la versión 2 de IOMMU de AMD. Las APU anteriores (Trinity y Richland) incluían la funcionalidad IOMMU de la versión 2, pero solo para el uso de una GPU externa conectada a través de PCI Express.
Las APU Carrizo y Bristol Ridge posteriores a 2015 también incluyen la versión 2 de la funcionalidad IOMMU para la GPU integrada.

### ARM

La microarquitectura Bifrost de ARM, como se implementó en el Mali-G71, es totalmente compatible con las especificaciones de hardware de HSA 1.1. A 2016 de 6, ARM no ha anunciado el soporte de software que usaría esta característica de hardware.