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.[1]​ 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.[2]:3[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).[4]

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.[5]​ 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.[6]​ HSA permite a los programas utilizar el procesador de gráficos para cálculos de punto flotante sin memoria o programación por separado.[7]

RazonesEditar

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

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 HSAEditar

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 HSAEditar

  • 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 HSAEditar

  • 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 bloqueEditar

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. 
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. 
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.[8]​ 
Tanto la MMU de la CPU como la IOMMU de la GPU deben cumplir con las especificaciones de hardware de la HSA. 

Soporte de softwareEditar

 
Las GPU de AMD contienen ciertas unidades funcionales adicionales destinadas a ser utilizadas como parte de HSA. En Linux, el controlador de kernel amdkfd proporciona el soporte requerido.[9]

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.[10]​ Programs do not interact directly with amdkfd, but queue their jobs utilizing the HSA runtime.[11]​ 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.[12]

Se ha anunciado el soporte integrado para plataformas HSA para el lanzamiento de "Sumatra" de OpenJDK, previsto para 2015.[13]

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.[14]

GPUOpen comprende un par de otras herramientas de software relacionadas con HSA. CodeXL versión 2.0 incluye un perfilador de HSA.[15]

Soporte de hardwareEditar

AMDEditar

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.[cita requerida]

Las APU Carrizo y Bristol Ridge posteriores a 2015 también incluyen la versión 2 de la funcionalidad IOMMU para la GPU integrada.[cita requerida]

ARMEditar

La microarquitectura Bifrost de ARM, como se implementó en el Mali-G71,[16]​ 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énEditar

ReferenciasEditar

  1. Tarun Iyer (30 de abril de 2013). «AMD Unveils its Heterogeneous Uniform Memory Access (hUMA) Technology». Tom's Hardware. 
  2. George Kyriazis (30 de agosto de 2012), Heterogeneous System Architecture: A Technical Review, AMD, archivado desde el original el 28 de marzo de 2014, consultado el 26 de junio de 2018 .
  3. «What is Heterogeneous System Architecture (HSA)?». AMD. Archivado desde el original el 21 de junio de 2014. Consultado el 23 de mayo de 2014. 
  4. Joel Hruska (26 de agosto de 2013). «Setting HSAIL: AMD explains the future of CPU/GPU cooperation». ExtremeTech. Ziff Davis. 
  5. Linaro. «LCE13: Heterogeneous System Architecture (HSA) on ARM». slideshare.net.  |autor= y |apellido= redundantes (ayuda)
  6. «Heterogeneous System Architecture: Purpose and Outlook». gpuscience.com. 9 de noviembre de 2012. Archivado desde el original el 1 de febrero de 2014. Consultado el 24 de mayo de 2014. 
  7. «Heterogeneous system architecture: Multicore image processing using a mix of CPU and GPU elements». Embedded Computing Design. Consultado el 23 de mayo de 2014. 
  8. «Kaveri microarchitecture». SemiAccurate. 15 de enero de 2014. 
  9. Michael Larabel (21 de julio de 2014). «AMDKFD Driver Still Evolving For Open-Source HSA On Linux». Phoronix. Consultado el 21 de enero de 2015.  |autor= y |apellido= redundantes (ayuda)
  10. «Linux kernel 3.19, Section 1.3. HSA driver for AMD GPU devices». kernelnewbies.org. 8 de febrero de 2015. Consultado el 12 de febrero de 2015. 
  11. «HSA-Runtime-Reference-Source/README.md at master». github.com. 14 de noviembre de 2014. Consultado el 12 de febrero de 2015. 
  12. «Linux Kernel 4.14 Announced with Secure Memory Encryption and More». 13 de noviembre de 2017. 
  13. Alex Woodie (26 de agosto de 2013). «HSA Foundation Aims to Boost Java’s GPU Prowess». HPCwire.  |autor= y |apellido= redundantes (ayuda)
  14. «Bolt on github». 
  15. AMD GPUOpen (19 de abril de 2016). «CodeXL 2.0 includes HSA profiler». Archivado desde el original el 27 de junio de 2018. Consultado el 26 de junio de 2018.  |autor= y |apellido= redundantes (ayuda)
  16. «ARM Bifrost GPU Architecture». 30 de mayo de 2016. 

Enlaces externosEditar