ROCm | ||
---|---|---|
Información general | ||
Tipo de programa | API y bibliotecas GPGPU | |
Desarrollador | AMD | |
Lanzamiento inicial | 14 de noviembre de 2016 (7 años) | |
Licencia | Software libre y de código abierto | |
Información técnica | ||
Plataformas admitidas | GPU compatibles | |
Versiones | ||
Última versión estable | 5.3.0 ( 4 de octubre de 2022) | |
Enlaces | ||
ROCm[1] es una pila de software Advanced Micro Devices (AMD) para la programación de la unidad de procesamiento gráfico (GPU). ROCm abarca varios dominios: computación de uso 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 GPUs), OpenMP/Interfaz de paso de mensajes (MPI) (programación basada en la directiva), OpenCL.
ROCm es un software gratuito, libre y de código abierto (excepto los blobs de firmware de GPU[2]), se distribuye bajo varias licencias.
La primera pila de software GPGPU de ATI/AMD fue Close to Metal, que se convirtió en Stream.
ROCm se lanzó alrededor de 2016[3] con la Iniciativa Boltzmann.[4] La pila ROCm se basa en pilas de GPU AMD anteriores, algunas herramientas se remontan a GPUOpen, otras a la arquitectura de sistema heterogéneo (HSA).
HSA tenía como objetivo producir una representación intermedia independiente del hardware de nivel medio, que podría compilarse JIT en el hardware final (GPU, FPGA...) utilizando el finalizador apropiado. Este enfoque se eliminó para ROCm: ahora crea solo código de GPU, utilizando LLVM y su backend AMDGPU que se actualizó,[5] aunque todavía hay investigaciones sobre esa modularidad mejorada con LLVM MLIR.[6]
C++ AMP es una extensión del modelo de compilación y programación de C++ que permite la aceleración del código C++ en hardware de datos paralelos.[7]
ROCm como una pila abarca desde el controlador del kernel hasta las aplicaciones del usuario final. AMD tiene videos introductorios sobre el hardware AMD GCN,[8] y la programación ROCm[9] a través de su portal de aprendizaje.[10]
Una de las mejores introducciones técnicas sobre la pila y la programación ROCm/HIP se encuentra, hasta la fecha, en Reddit.[11]
ROCm está dirigido principalmente a GPU profesionales discretas,[12] pero el soporte no oficial incluye GPU de consumo de la familia Vega y RDNA2.
Las Unidades de Procesador Acelerado (APU) están "habilitadas", pero no son admitidas oficialmente. Tener ROCm funcional allí está involucrado.[13]
Los aceleradores AMD Instinct son los ciudadanos ROCm de primera clase, junto con la serie de GPU Radeon Pro para prosumidores: en su mayoría reciben soporte completo.
La única GPU de nivel de consumidor que tiene un soporte relativamente igual es, a partir de enero de 2022, la Radeon VII (GCN 5 - Vega).
Nombre de la serie deGPU | Southern Islands |
Sea Islands |
Volcanic Islands |
Arctic Islands/Polaris |
Vega | Navi 1X | Navi 2X |
---|---|---|---|---|---|---|---|
Lanzamiento | Enero 2012 | Sep 2013 | Junio 2015 | Junio 2016 | Junio 2017 | Julio 2019 | Nov 2020 |
Nombre comercial | Radeon HD 7000 | Radeon Rx 200 | Radeon Rx 300 | Radeon RX 400/500 | Radeon RX Vega/Radeon VII(7 nm) | Radeon RX 5000 | Radeon RX 6000 |
Soporte AMD | |||||||
Conjunto de instrucciones | Conjunto de instrucciones de GCN | Conjunto de instrucciones de RDNA | |||||
Microarquitectura | GCN 1.a gen | GCN 2.a gen | GCN 3.a gen | GCN 4.a gen | GCN 5.a gen | RDNA | RDNA 2 |
Tipo | Modelo de sombreado unificado | ||||||
ROCm | |||||||
OpenCL | 1.2 (en Linux: 1.1 (sin soporte de imagen) con Mesa 3D) | 2.0 (Controlador Adrenalin en Win7+) (en Linux: 1.1 (sin soporte de imagen) con Mesa 3D, 2.0 con controlador de AMD o AMD ROCm) |
2.0 | 2.1[14] | |||
Vulkan | 1.0 (Win 7+ or Mesa 17+) |
1.2 (Adrenalin 20.1, Linux Mesa 3D 20.0) | |||||
Modelo de sombreado | 5.1 | 5.1 6.3 |
6.4 | 6.5 | |||
OpenGL | 4.6 (en Linux: 4.6 (Mesa 3D 20.0)) | ||||||
Direct3D | 11 (11_1) 12 (11_1) |
11 (12_0) 12 (12_0) |
11 (12_1) 12 (12_1) |
11 (12_1) 12 (12_2) | |||
/drm/amdgpu
|
Experimental[15] |
El gerente de producto de AMD ROCm hizo un recorrido por la pila.[16]
Los principales consumidores de la pila son aplicaciones de aprendizaje automático y computación de alto rendimiento/GPGPU.
Varios marcos de aprendizaje profundo tienen un backend ROCm:[17]
ROCm está ganando una tracción significativa en el top 500.[19] ROCm se utiliza con las supercomputadoras exascala ElCapitan[20][21] y Frontier.
Parte del software relacionado se encuentra en el hub AMD Infinity.
A partir de la versión 3.0, Blender ahora puede usar núcleos de cómputo HIP para sus ciclos de renderizado.[22]
Julia tiene el paquete AMDGPU.jl,[23] 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 usa el compilador de Julia para generar LLVM IR directamente, que luego LLVM consume para generar código de dispositivo nativo. AMDGPU.jl usa la implementación HSA de ROCr para cargar código nativo en el dispositivo y ejecutarlo, de forma similar a como 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. Está prevista una futura integración con rocALUTION, rocSOLVER, MIOpen y algunas otras bibliotecas de ROCm.
El software ROCm actualmente se distribuye en docenas de repositorios públicos de GitHub. Dentro del meta-repositorio público principal, hay un manifiesto xml para cada lanzamiento oficial: usar git-repo, una herramienta de control de versiones construida sobre git, es la forma recomendada de sincronizar con la pila localmente.[24]
El lanzamiento de ROCm 5.1 es inminente, probablemente a mediados de febrero dado un lanzamiento menor cada mes.[17]
Área de aplicación | Publicación en GitHub |
---|---|
Nivel bajo (principalmente) | https://github.com/radeonopencompute |
Nivel medio (principalmente) | https://github.com/rocm-developer-tools |
Nivel Alto (principalmente) | https://github.com/rocmsoftwareplatform/ |
AMD comienza a distribuir aplicaciones en contenedores para ROCm, en particular aplicaciones de investigación científica reunidas en AMD Infinity Hub.[25]
AMD distribuye paquetes adaptados a varias distribuciones de Linux.
Existe un ROCm de empaquetado de ecosistemas de terceros en crecimiento.
Las distribuciones de Linux están empaquetando oficialmente (de forma nativa) ROCm, con varios grados de avance: Arch,[26] Gentoo,[27] Debian y Fedora,[28] GNU Guix, NixOS.
Hay paquetes de spack.[29]
Hay un componente de espacio de kernel, ROCk, y el resto (hay aproximadamente cien componentes en la pila) está hecho de módulos de espacio de usuario.
La política tipográfica no oficial es usar: mayúsculas ROC seguido de minúsculas para bibliotecas de bajo nivel, es decir ROCt, y lo contrario para las bibliotecas orientadas al usuario, es decir, rocBLAS.[30]
AMD está desarrollando activamente con la comunidad LLVM, pero la actualización no es instantánea y, a partir de enero de 2022, todavía está rezagada.[31] AMD todavía empaqueta oficialmente varias bifurcaciones LLVM[32][33][6] para partes que aún no están actualizadas – optimizaciones del compilador destinadas a permanecer patentadas, soporte de depuración, descarga de OpenMP...
Compatibilidad con bibliotecas implementadas como código de bits LLVM. Estos proporcionan varias utilidades y funciones para operaciones matemáticas, atómicas, consultas de parámetros de lanzamiento, lanzamiento del kernel en el dispositivo, etc.
El thunk es responsable de todo el pensamiento y las colas que van a la pila.
El tiempo de ejecución de ROC es diferente del tiempo de ejecución de lenguaje común de ROC en que no es lo mismo.
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 PAL en Windows. Solía poder enrutar entre diferentes compiladores como el compilador HSAIL. Ahora está siendo absorbido por las capas superiores de direccionamiento indirecto (HIP, OpenCL).
ROCm envía su cargador ICD de controlador de cliente instalable y una implementación de OpenCL[34] agrupada. A partir de enero de 2022, ROCm 4.5.2 incluye OpenCL 2.2 y está rezagado con respecto a la competencia.[35]
La implementación de AMD para sus GPU se llama HIPAMD. También hay una implementación de CPU principalmente para fines de demostración.
HIP construye un compilador `HIPCC` que envuelve a Clang y compila con LLVM open AMDGPU backend, o redirige al compilador NVIDIA.[36]
HIPIFY es una herramienta de compilación de fuente a fuente, traduce CUDA a HIP y viceversa, ya sea utilizando una herramienta basada en clang o un script Perl similar a sed.
Al igual que HIPIFY, GPUFORT es una herramienta que compila el código fuente en otras fuentes de lenguaje de tercera generación, lo que permite a los usuarios migrar de CUDA Fortran a HIP Fortran. También está en el repertorio de proyectos de investigación, más aún.[37]
Las bibliotecas de alto nivel de ROCm suelen ser consumidas directamente por el software de aplicación, como los marcos de aprendizaje automático. La mayoría de las siguientes bibliotecas se encuentran en la categoría General Matrix Multiply (GEMM), en la que sobresale la arquitectura GPU.
La mayoría de estas bibliotecas orientadas al usuario vienen en forma dual: hip para la capa de direccionamiento indirecto que puede enrutar al hardware de Nvidia y roc para la implementación de AMD.[38]
rocBLAS y hipBLAS son fundamentales en las bibliotecas de alto nivel, es la implementación de AMD para los subprogramas de álgebra lineal básica. Utiliza la biblioteca Tensile en privado.
Este par de bibliotecas constituye la implementación de LAPACK para ROCm y está fuertemente acoplado a rocBLAS.
ROCm es un competidor de pilas similares destinadas a la computación GPU: Nvidia CUDA e Intel OneAPI.
Nvidia es de código cercano hasta cuBLAS y bibliotecas de alto nivel. Nvidia vende la interfaz de Clang y su backend de GPU LLVM de ejecución de subprocesos paralelos (PTX) como Nvidia CUDA Compiler (NVCC). Hay una capa de código abierto encima, por ejemplo, RAPIDS.