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. 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.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. 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.

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.

Véase también 

 General-purpose computing on graphics processing units (GPGPU)
 Non-Uniform Memory Access (NUMA)
 OpenMP
 Memoria compartida
 Zero-copy

Referencias

Enlaces externos 

  by Vinod Tipparaju at SC13 in November 2013
 HSA and the software ecosystem
 2012 – HSA by Michael Houston
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 . 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.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 . 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++ 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 . 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ón19 de la línea principal del núcleo Linux , lanzada elde febrero de 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ónde IOMMU de AMD , fue aceptado en la versión principal del núcleo Linux versión14 . Se ha anunciado el soporte integrado para plataformas HSA para el lanzamiento de " Sumatra " de OpenJDK , previsto para 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ón0 incluye un perfilador de HSA . Soporte de hardware AMD Para febrero de solo las APU de la serie A " Kaveri " de AMD ( consulte los procesadores de escritorio " Kaveri " y los procesadores móviles " Kaveri " ) y la PlayStationde Sony permitieron que la GPU integrada accediera a la memoria mediante la versiónde IOMMU de AMD . Las APU anteriores ( Trinity y Richland ) incluían la funcionalidad IOMMU de la versión pero solo para el uso de una GPU externa conectada a través de PCI Express . Las APU Carrizo y Bristol Ridge posteriores atambién incluyen la versiónde 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 HSA1 . Ade ARM no ha anunciado el soporte de software que usaría esta característica de hardware . Vea se también General-purpose computing on graphics processing units ( GPGPU ) Non-Uniform Memory Access ( NUMA ) OpenMP Memoria compartida Zero-copy Referencias Enlaces externos by Vinod Tipparaju at SC13 in November HSA and the software ecosystem – HSA by Michael Houston