ROCm [3] es una pila de software de Advanced Micro Devices (AMD) para la programación de unidades de procesamiento gráfico (GPU). ROCm abarca varios dominios: computación de propósito general en unidades de procesamiento gráfico (GPGPU), computación de alto rendimiento (HPC), computación heterogénea . Ofrece varios modelos de programación: HIP ( programación basada en núcleo de GPU ), OpenMP ( programación basada en directivas ) y OpenCL .
ROCm es un software libre, gratuito y de código abierto (excepto los blobs de firmware de GPU [4] ), y se distribuye bajo varias licencias. ROCm inicialmente significaba Radeon Open Compute platform ; sin embargo, debido a que Open Compute es una marca registrada, ROCm ya no es un acrónimo: es simplemente la pila de código abierto de AMD diseñada para computación de GPU.
La primera pila de software GPGPU de ATI /AMD fue Close to Metal , que se convirtió en Stream .
ROCm se lanzó alrededor de 2016 [5] con la Iniciativa Boltzmann . [6] La pila ROCm se basa en pilas de GPU AMD anteriores; algunas herramientas se remontan a GPUOpen y otras a la Arquitectura de sistema heterogéneo (HSA).
HSAIL [7] tenía como objetivo producir una representación intermedia de nivel medio, independiente del hardware, que pudiera compilarse mediante JIT en el hardware final (GPU, FPGA...) utilizando el finalizador adecuado. Este enfoque se abandonó para ROCm: ahora solo crea código de GPU, utilizando LLVM y su backend AMDGPU que se envió en sentido ascendente, [8] aunque todavía hay investigación sobre dicha modularidad mejorada con LLVM MLIR. [9]
ROCm como pila abarca desde el controlador del núcleo hasta las aplicaciones de usuario final. AMD tiene videos introductorios sobre el hardware AMD GCN [10] y la programación ROCm [11] a través de su portal de aprendizaje. [12]
Una de las mejores introducciones técnicas sobre la pila y la programación ROCm/HIP se encuentra, hasta la fecha, en Reddit. [13]
ROCm está dirigido principalmente a GPU profesionales discretas, [14] pero el soporte no oficial incluye la familia Vega y las GPU de consumo RDNA 2 .
Las unidades de procesamiento acelerado (APU) están "habilitadas", pero no cuentan con soporte oficial. Es necesario que ROCm funcione allí. [15]
Los aceleradores AMD Instinct son ciudadanos de primera clase de ROCm, junto con la serie de GPU Radeon Pro para prosumidores : en su mayoría cuentan con soporte completo.
La única GPU de consumo que cuenta con un soporte relativamente igualitario es, a partir de enero de 2022, la Radeon VII (GCN 5 - Vega).
Terry Deem, gerente de productos AMD ROCm, realizó un recorrido por la pila. [21]
Los principales consumidores de la pila son el aprendizaje automático y las aplicaciones de computación de alto rendimiento/GPGPU.
Varios marcos de aprendizaje profundo tienen un backend ROCm: [22]
ROCm está ganando terreno de manera significativa en el top 500. [ 24] ROCm se utiliza con las supercomputadoras Exascale El Capitan [25] [26] y Frontier .
Algunos programas relacionados se pueden encontrar en el centro AMD Infinity.
A partir de la versión 3.0, Blender puede utilizar núcleos de cómputo HIP para sus ciclos de renderizado . [27]
Julia tiene el paquete AMDGPU.jl, [28] que se integra con LLVM y selecciona componentes de la pila ROCm. En lugar de compilar código a través de HIP, AMDGPU.jl utiliza el compilador de Julia para generar LLVM IR directamente, que luego es consumido por LLVM para generar código nativo del dispositivo. AMDGPU.jl utiliza la implementación HSA de ROCr para cargar código nativo en el dispositivo y ejecutarlo, de manera similar a cómo HIP carga su propio código de dispositivo generado.
AMDGPU.jl también admite la integración con rocBLAS (para BLAS), rocRAND (para generación de números aleatorios) y rocFFT (para FFT) de ROCm. Se prevé una futura integración con rocALUTION, rocSOLVER, MIOpen y algunas otras bibliotecas de ROCm.
Las instrucciones de instalación para Linux y Windows se encuentran en la documentación oficial de AMD ROCm. El software de ROCm se encuentra actualmente distribuido en varios repositorios públicos de GitHub . Dentro del meta-repositorio público principal, hay un manifiesto XML para cada versión oficial: el uso de git-repo, una herramienta de control de versiones construida sobre Git , es la forma recomendada de sincronizar con la pila localmente. [29]
AMD comienza a distribuir aplicaciones en contenedores para ROCm, en particular aplicaciones de investigación científica reunidas en AMD Infinity Hub. [30]
AMD distribuye paquetes adaptados a varias distribuciones de Linux.
Existe un creciente ecosistema de terceros que empaqueta ROCm.
Las distribuciones de Linux están empaquetando oficialmente (de forma nativa) ROCm, con varios grados de avance: Arch Linux , [31] Gentoo, [32] Debian , Fedora , [33] GNU Guix y NixOS .
Hay paquetes spack. [34]
Hay un componente de espacio de kernel, ROCk, y el resto (hay aproximadamente cien componentes en la pila) está formado por módulos de espacio de usuario .
La política tipográfica no oficial es utilizar: ROC en mayúsculas y luego en minúsculas para bibliotecas de bajo nivel, es decir, ROCt, y lo contrario para bibliotecas orientadas al usuario, es decir, rocBLAS. [35]
AMD está desarrollando activamente con la comunidad LLVM, pero la actualización no es instantánea y, a enero de 2022, todavía está retrasada. [36] AMD todavía empaqueta oficialmente varias bifurcaciones de LLVM [37] [38] [9] para partes que aún no están actualizadas: optimizaciones del compilador destinadas a seguir siendo propietarias, soporte de depuración, descarga de OpenMP, etc.
Bibliotecas de soporte implementadas como código de bits LLVM. Estas proporcionan varias utilidades y funciones para operaciones matemáticas, operaciones atómicas, consultas de parámetros de lanzamiento, lanzamiento del kernel en el dispositivo, etc.
El thunk es responsable de todo el pensamiento y la puesta en cola que entra en la pila.
El entorno de ejecución ROC es un conjunto de API/bibliotecas que permiten el lanzamiento de núcleos de cómputo por parte de aplicaciones host. Es la implementación de AMD de la API de entorno de ejecución HSA. [39] Es diferente del entorno de ejecución de lenguaje común ROC.
El administrador de objetos de código ROCm se encarga de interactuar con la representación intermedia de LLVM .
Common Language Runtime es una capa de indirección que adapta las llamadas a ROCr en Linux y a PAL en Windows. Antes podía enrutar entre distintos compiladores, como el compilador HSAIL. Ahora está siendo absorbido por las capas de indirección superiores (HIP y OpenCL).
ROCm incluye su cargador de controlador de cliente instalable (ICD) y una implementación de OpenCL [40] en un mismo paquete. A partir de enero de 2022, ROCm 4.5.2 incluye OpenCL 2.2 y se queda atrás de la competencia. [41]
La implementación de AMD para sus GPU se llama HIPAMD. También existe una implementación de CPU principalmente con fines de demostración.
HIP crea un compilador «HIPCC» que envuelve Clang y compila con el backend AMDGPU abierto LLVM o redirecciona al compilador NVIDIA . [42]
HIPIFY es una herramienta de compilación de código fuente a código fuente. Traduce CUDA a HIP y viceversa, ya sea mediante una herramienta basada en Clang o un script Perl tipo sed.
Al igual que HIPIFY, GPUFORT es una herramienta que compila código fuente en otras fuentes de lenguajes de tercera generación, lo que permite a los usuarios migrar de CUDA Fortran a HIP Fortran. También se encuentra en el repertorio de proyectos de investigación, incluso más. [43]
Las bibliotecas de alto nivel de ROCm suelen ser utilizadas directamente por el software de aplicación, como los marcos de aprendizaje automático . La mayoría de las siguientes bibliotecas pertenecen a la categoría General Matrix Multiply (GEMM), en la que la arquitectura de GPU se destaca.
La mayoría de estas bibliotecas orientadas al usuario vienen en formato dual: hip para la capa de indirección que puede enrutar al hardware de Nvidia y roc para la implementación de AMD. [44]
RocBLAS y hipBLAS son bibliotecas centrales de alto nivel, es la implementación AMD para subprogramas de Álgebra Lineal Básica . Utiliza la biblioteca Tensile de forma privada.
Este par de bibliotecas constituye la implementación de LAPACK para ROCm y está fuertemente acoplado a rocBLAS.
ROCm compite con otras pilas de computación de GPU: Nvidia CUDA e Intel OneAPI .
El CUDA de Nvidia es de código cerrado, mientras que el ROCm de AMD es de código abierto. Hay software de código abierto creado sobre el CUDA de código cerrado, por ejemplo, RAPIDS.
CUDA puede ejecutarse en GPU de consumo, mientras que la compatibilidad con ROCm se ofrece principalmente para hardware profesional como AMD Instinct y AMD Radeon Pro .
Nvidia ofrece un frontend centrado en C/C++ y su backend GPU LLVM de ejecución de subprocesos paralelos (PTX) como el compilador Nvidia CUDA (NVCC).
Al igual que ROCm, oneAPI es de código abierto y todas las bibliotecas correspondientes están publicadas en su página de GitHub.
Unified Acceleration Foundation (UXL) es un nuevo consorcio tecnológico que trabaja en la continuación de la iniciativa OneAPI, con el objetivo de crear un nuevo ecosistema de software acelerador de estándares abiertos, estándares abiertos relacionados y proyectos de especificación a través de grupos de trabajo y grupos de interés especial (SIG). El objetivo competirá con CUDA de Nvidia. Las principales empresas detrás de él son Intel, Google, ARM, Qualcomm, Samsung, Imagination y VMware. [45]