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 es un software gratuito, libre y de código abierto (excepto los blobs de firmware de GPU[2]), se distribuye bajo varias licencias. AntecedentesLa 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éneoHSA 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.2C++ 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ónROCm 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 hardwareROCm 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 profesionalLos 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
Ecosistema de softwareRecursos de aprendizajeEl gerente de producto de AMD ROCm hizo un recorrido por la pila.[16] Integración de tercerosLos principales consumidores de la pila son aplicaciones de aprendizaje automático y computación de alto rendimiento/GPGPU. Aprendizaje automáticoVarios marcos de aprendizaje profundo tienen un backend ROCm:[17]
SupercomputaciónROCm 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áficosA partir de la versión 3.0, Blender ahora puede usar núcleos de cómputo HIP para sus ciclos de renderizado.[22] Otros idiomasJuliaJulia 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 softwareOficialEl 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]
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. TercerosExiste 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] ComponentesHay 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 bajoROCk – Controlador del núcleoROCm – Bibliotecas de dispositivosCompatibilidad 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 – ThunkEl thunk es responsable de todo el pensamiento y las colas que van a la pila. ROCr – Tiempo de ejecuciónEl 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 compiladorEl administrador de objetos de código ROCm se encarga de interactuar con la representación intermedia de LLVM. Nivel medioTiempo de ejecución de lenguaje común de ROCclrCommon 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). OpenCLROCm 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. HICCHIP construye un compilador `HIPCC` que envuelve a Clang y compila con LLVM open AMDGPU backend, o redirige al compilador NVIDIA.[36] HIPIFICARHIPIFY 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. GPUFORTAl 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 altoLas 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 / hipBLASrocBLAS 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 / hipSOLVEREste par de bibliotecas constituye la implementación de LAPACK para ROCm y está fuertemente acoplado a rocBLAS. Utilidades
Comparación con los competidoresROCm es un competidor de pilas similares destinadas a la computación GPU: Nvidia CUDA e Intel OneAPI. NVIDIA CUDANvidia 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 OneAPIVéase también
Referencias
Enlaces externos
|