ROCm
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 | ||
---|---|---|
Información general | ||
Tipo de programa | API y bibliotecas GPGPU | |
Desarrollador | AMD | |
Lanzamiento inicial | 14 de noviembre de 2016 (8 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 es un software gratuito, libre y de código abierto (excepto los blobs de firmware de GPU[2]), se distribuye bajo varias licencias.
Antecedentes
editarLa 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).
Arquitectura del sistema heterogéneo
editarHSA 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]
Microsoft AMP C++ 1.2
editarC++ 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]
Habilidades de programación
editarROCm 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]
Soporte de hardware
editarROCm 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]
GPU de nivel profesional
editarLos 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).
GPU de nivel de consumidor
editarNombre 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] |
Ecosistema de software
editarRecursos de aprendizaje
editarEl gerente de producto de AMD ROCm hizo un recorrido por la pila.[16]
Integración de terceros
editarLos principales consumidores de la pila son aplicaciones de aprendizaje automático y computación de alto rendimiento/GPGPU.
Aprendizaje automático
editarVarios marcos de aprendizaje profundo tienen un backend ROCm:[17]
- PyTorch
- TensorFlow
- ONNX
- MXNet
- CuPy[18]
- MIAbierto
- Caffe
- Iree (que utiliza la representación intermedia multinivel LLVM (MLIR))
Supercomputación
editarROCm 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.
Otra aceleración e interoperación de gráficos
editarA partir de la versión 3.0, Blender ahora puede usar núcleos de cómputo HIP para sus ciclos de renderizado.[22]
Otros idiomas
editarJulia
editarJulia 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.
Distribución de software
editarOficial
editarEl 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.
Terceros
editarExiste 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]
Componentes
editarHay 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...
Nivel bajo
editarROCk – Controlador del núcleo
editarROCm – Bibliotecas de dispositivos
editarCompatibilidad 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.
ROCt – Thunk
editarEl thunk es responsable de todo el pensamiento y las colas que van a la pila.
ROCr – Tiempo de ejecución
editarEl 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.
ROCm – Soporte del compilador
editarEl administrador de objetos de código ROCm se encarga de interactuar con la representación intermedia de LLVM.
Nivel medio
editarTiempo de ejecución de lenguaje común de ROCclr
editarCommon 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).
OpenCL
editarROCm 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.
HICC
editarHIP construye un compilador `HIPCC` que envuelve a Clang y compila con LLVM open AMDGPU backend, o redirige al compilador NVIDIA.[36]
HIPIFICAR
editarHIPIFY 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.
GPUFORT
editarAl 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]
Nivel alto
editarLas 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 / hipBLAS
editarrocBLAS 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.
rocSOLVER / hipSOLVER
editarEste par de bibliotecas constituye la implementación de LAPACK para ROCm y está fuertemente acoplado a rocBLAS.
Utilidades
editar- Herramientas de desarrollo de ROCm: depuración, trazador, generador de perfiles, interfaz de administración del sistema, suite de validación, administración de clústeres.
- Herramientas GPUOpen: analizador de GPU, visualizador de memoria.
- Herramientas externas: radeontop (descripción general de TUI).
Comparación con los competidores
editarROCm es un competidor de pilas similares destinadas a la computación GPU: Nvidia CUDA e Intel OneAPI.
NVIDIA CUDA
editarNvidia 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.
Intel OneAPI
editarVéase también
editar- Software de AMD: una descripción general de los controladores, las API y los esfuerzos de desarrollo de AMD.
- GPUOpen: la pila de gráficos complementaria de AMD
- AMD Radeon Software: el canal de distribución de software de AMD
Referencias
editar- ↑ «Question: What does ROCm stand for? · Issue #1628 · RadeonOpenCompute/ROCm». Github.com. Consultado el 18 de enero de 2022.
- ↑ «Debian -- Details of package firmware-amd-graphics in buster». Packages.debian.org. Consultado el 18 de enero de 2022.
- ↑ «AMD @ SC16: Radeon Open Compute Platform (ROCm) 1.3 Released, Boltzmann Comes to Fruition». anandtech.com. Consultado el 19 de enero de 2022.
- ↑ «AMD @ SC15: Boltzmann Initiative Announced - C++ and CUDA Compilers for AMD GPUs». anandtech.com. Consultado el 19 de enero de 2022.
- ↑ «User Guide for AMDGPU Backend — LLVM 13 documentation». Llvm.org. Consultado el 18 de enero de 2022.
- ↑ a b «The LLVM Compiler Infrastructure». GitHub. 19 de enero de 2022.
- ↑ «C++ AMP : Language and Programming Model Version 1.2, December 2013».
- ↑ «Introduction to AMD GPU Hardware».
- ↑ «Fundamentals of HIP Programming». AMD.
- ↑ «ROCm™ Learning Center». AMD.
- ↑ «AMD ROCm / HCC programming: Introduction». 26 de diciembre de 2018.
- ↑ «AMD Documentation - Portal».
- ↑ «Here's something you don't see every day: PyTorch running on top of ROCm on a 6800M (6700XT) laptop! Took a ton of minor config tweaks and a few patches but it actually functionally works. HUGE!». 10 de diciembre de 2021.
- ↑ «AMD Radeon RX 6800 XT Specs». TechPowerUp. Consultado el 1 de enero de 2021.
- ↑ Larabel, Michael (7 de diciembre de 2016). «The Best Features of the Linux 4.9 Kernel». Phoronix. Consultado el 7 de diciembre de 2016.
- ↑ «ROCm presentation». HPCwire.com. 6 de julio de 2020. Consultado el 18 de enero de 2022.
- ↑ a b «AMD Introduces Its Deep-Learning Accelerator Instinct MI200 Series GPUs». Infoq.com. Consultado el 18 de enero de 2022.
- ↑ «Installation».
- ↑ «AMD Chips Away at Intel in World's Top 500 Supercomputers as GPU War Looms». 16 de noviembre de 2020.
- ↑ «El Capitan Supercomputer Detailed: AMD CPUs & GPUs to Drive 2 Exaflops of Compute».
- ↑ «Livermore's el Capitan Supercomputer to Debut HPE 'Rabbit' Near Node Local Storage». 18 de febrero de 2021.
- ↑ «Blender 3.0 takes support for AMD GPUs to the next level. Beta support available now!». Gpuopen.com. 15 de noviembre de 2021. Consultado el 18 de enero de 2022.
- ↑ «AMD ROCm ⋅ JuliaGPU». juliagpu.org.
- ↑ «ROCm Installation v4.3 — ROCm 4.5.0 documentation». Rocmdocs.amd.com. Consultado el 18 de enero de 2022.
- ↑ «Running Scientific Applications on AMD Instinct Accelerators Just Got Easier». HPCwire.com. 18 de octubre de 2021. Consultado el 25 de enero de 2022.
- ↑ «ROCm for Arch Linux». Github.com. 17 de enero de 2022. Consultado el 18 de enero de 2022.
- ↑ «Gentoo Linux Packages Up AMD ROCm, Makes Progress On RISC-V, LTO+PGO Python». Phoronix.com. Consultado el 18 de enero de 2022.
- ↑ «Fedora & Debian Developers Look At Packaging ROCm For Easier Radeon GPU Computing Experience». Phoronix.com. Consultado el 18 de enero de 2022.
- ↑ Gamblin, Todd (15 de noviembre de 2015). «The Spack Package Manager: Bringing Order to HPC Software Chaos».
- ↑ «20211221 Packaging session notes and small update» (en inglés), https://lists.debian.org/debian-ai/2021/12/msg00028.html, consultado el 2022-1-18.
- ↑ «[Debian official packaging] How is ROCm LLVM fork still needed? · Issue #2449 · ROCm-Developer-Tools/HIP». GitHub.
- ↑ «Aomp - V 14.0-1». GitHub. 22 de enero de 2022.
- ↑ «The LLVM Compiler Infrastructure». GitHub. 10 de enero de 2022.
- ↑ «Khronos OpenCL Registry - The Khronos Group Inc». www.khronos.org.
- ↑ «List of OpenCL Conformant Products - The Khronos Group Inc». www.khronos.org. 3 de febrero de 2022.
- ↑ «Figure 3. HIPCC compilation process illustration. The clang compiler».
- ↑ «AMD Publishes Open-Source "GPUFORT" as Newest Effort to Help Transition Away from CUDA».
- ↑ Maia, Julio; Chalmers, Noel; T. Bauman, Paul; Curtis, Nicholas; Malaya, Nicholas; McDougall, Damon; van Oostrum, Rene; Wolfe, Noah (May 2021). ROCm Library Support & Profiling Tools. AMD.
Enlaces externos
editar- «ROCm official documentation». AMD. 10 de febrero de 2022.
- «ROCm Learning Center». AMD. 25 de enero de 2022.
- «ROCm official documentation on the github super-project». AMD. 25 de enero de 2022.
- «ROCm official documentation - pre 5.0». AMD. 19 de enero de 2022.
- «GPU-Accelerated Applications with AMD Instinct Accelerators & AMD ROCm Software». AMD. 25 de enero de 2022.
- «AMD Infinity Hub». AMD. 25 de enero de 2022. — Docker containers para aplicaciones científicas.