ROCm | |
|---|---|
| Desenvolvedor | |
| AMD | |
| Lançamento inicial | |
| 14 de novembro de 2016 | |
| Versão estável | |
| 6.4.0 / 11 de abril de 2025 | |
| Repositório | |
| Meta-repository github | |
| Escrito em | |
| C, C++, Python, Fortran, Julia | |
| Middleware | |
| HIP | |
| Motor | |
| AMDgpu kernel driver, HIPCC, um Compilador baseado em LLVM | |
| Sistema operacional | |
| Linux, Windows | |
| Plataforma | |
| GPUs suportadas | |
| Antecessor | |
| Close to metal, Stream, HSA | |
| Tamanho | |
| <2 GiB | |
| Tipo | |
| Bibliotecas e APIs GPGPU | |
| Licença | |
| Licença MIT | |
| Site | |
| www |
ROCm é uma pilha de software da Advanced Micro Devices (AMD) para programação de unidades de processamento gráfico (GPU). O ROCm abrange vários domínios, incluindo computação de uso geral em unidades de processamento gráfico (GPGPU), computação de alto desempenho (HPC) e computação heterogênea. Ele oferece vários modelos de programação: HIP (programação baseada em GPU-kernel), OpenMP (programação baseada em diretivas) e OpenCL.
O ROCm é um software livre, livre e de código aberto (exceto os blobs de firmware da GPU) e é distribuído sob várias licenças. ROCm inicialmente significava Radeon Open Compute platform ; no entanto, como Open Compute é uma marca registrada, ROCm não é mais uma sigla — é simplesmente a pilha de código aberto da AMD projetada para computação de GPU.
A primeira pilha de software GPGPU da ATI /AMD foi Close to Metal, que se tornou Stream.
O ROCm foi lançado por volta de 2016 com a Boltzmann Initiative. A pilha ROCm se baseia em pilhas de GPU AMD anteriores; algumas ferramentas remontam ao GPUOpen e outras à Heterogeneous System Architecture (HSA).
HSAIL teve como objetivo produzir uma representação intermediária de nível médio, independente de hardware, que pudesse ser compilada JIT para o hardware eventual (GPU, FPGA...) usando o finalizador apropriado. Esta abordagem foi abandonada para o ROCm: agora ele constrói apenas código GPU, usando LLVM e seu backend AMDGPU que foi upstreamed, embora ainda haja pesquisas sobre essa modularidade aprimorada com LLVM MLIR.
O ROCm como uma pilha abrange desde o driver do kernel até os aplicativos do usuário final. A AMD tem vídeos introdutórios sobre hardware AMD GCN, e programação ROCm por meio de seu portal de aprendizagem.
Uma das melhores introduções técnicas sobre a pilha e a programação ROCm/HIP, continua, até hoje, a ser encontrada no Reddit.
O ROCm é direcionado principalmente para GPUs profissionais discretas, mas o suporte não oficial inclui a família Vega e GPUs de consumidor RDNA 2.
Unidades de Processador Aceleradas (APU) são "habilitadas", mas não são oficialmente suportadas. Ter ROCm funcional está envolvido.
Os aceleradores AMD Instinct são cidadãos de primeira classe do ROCm, juntamente com a série de GPUs Radeon Pro para consumidores finais: eles geralmente contam com suporte total.
A única GPU de nível de consumidor que tem suporte relativamente igual é, desde janeiro de 2022, a Radeon VII (GCN 5 - Vega).
| Nome da série de GPU | Southern Islands |
Sea Islands |
Volcanic Islands |
Arctic Islands/Polaris |
Vega | Navi 1X | Navi 2X | |
|---|---|---|---|---|---|---|---|---|
| Lançado | Janeiro de 2012 | Setembro de 2013 | Junho de 2015 | Junho de 2016 | Junho de 2017 | Julho de 2019 | novembro de 2020 | |
| Nome de marketing | 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 | |
| Suporte AMD | ||||||||
| Conjunto de instruções | Conjunto de instruções GCN | Conjunto de instruções RDNA | ||||||
| Microarquitetura | GCN 1st gen | GCN 2nd gen | GCN 3rd gen | GCN 4th gen | GCN 5th gen | RDNA | RDNA 2 | |
| Tipo | Unified shader model | |||||||
| ROCm | ||||||||
| OpenCL | 1.2 (no Linux: 1.1 (sem suporte a imagens) com Mesa 3D) | 2.0 (driver Adrenalin no Win7+) (no Linux: 1.1 (sem suporte a imagens) com Mesa 3D, 2.0 com drivers AMD ou AMD ROCm) |
2.0 | 2.1 | ||||
| Vulkan | 1.0 (Win 7+ ou Mesa 17+) |
1.2 (Adrenalin 20.1, Linux Mesa 3D 20.0) | ||||||
| Shader model | 5.1 | 5.1 6.3 |
6.4 | 6.5 | ||||
| OpenGL | 4.6 (no 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 | |||||||
O gerente de produto AMD ROCm, Terry Deem, fez um tour pela pilha.
Os principais consumidores da pilha são aplicativos de aprendizado de máquina e computação de alto desempenho/GPGPU.
Várias estruturas de aprendizagem profunda têm um backend ROCm:
O ROCm está ganhando força significativa no top 500. O ROCm é usado com os supercomputadores Exascale El Capitan e Frontier.
Alguns softwares relacionados podem ser encontrados no AMD Infinity hub.
A partir da versão 3.0, o Blender agora pode usar kernels de computação HIP para seus ciclos de renderização.
Julia tem o pacote AMDGPU.jl, que se integra com LLVM e seleciona componentes da pilha ROCm. Em vez de compilar o código por meio do HIP, o AMDGPU.jl usa o compilador de Julia para gerar o LLVM IR diretamente, que depois é consumido pelo LLVM para gerar o código do dispositivo nativo. AMDGPU.jl usa a implementação HSA do ROCr para carregar código nativo no dispositivo e executá-lo, semelhante a como o HIP carrega seu próprio código de dispositivo gerado.
O AMDGPU.jl também suporta integração com rocBLAS (para BLAS) da ROCm, rocRAND (para geração de números aleatórios) e rocFFT (para FFTs). Está planejada a integração futura com rocALUTION, rocSOLVER, MIOpen e algumas outras bibliotecas ROCm.
As instruções de instalação para Linux e Windows são fornecidas na documentação oficial do AMD ROCm. O software ROCm está atualmente distribuído em vários repositórios públicos do GitHub. No principal meta-repositório público, há um manifesto XML para cada lançamento oficial: usar o git-repo, uma ferramenta de controle de versão construída sobre o Git, é a maneira recomendada de sincronizar com a pilha localmente.
A AMD começa a distribuir aplicações em contêineres para o ROCm, principalmente aplicações de pesquisa científica reunidas no AMD Infinity Hub.
A AMD distribui pacotes personalizados para diversas distribuições Linux.
Há um ecossistema de terceiros crescente que empacota o ROCm.
As distribuições Linux estão oficialmente empacotando (nativamente) o ROCm, com vários graus de avanço: Arch Linux, Gentoo, Debian, Fedora, GNU Guix e NixOS.
Existem pacotes Spack.
Há um componente do espaço do kernel, o ROCk, e o restante — há aproximadamente cem componentes na pilha — é feito de módulos do espaço do usuário.
A política tipográfica não oficial é usar: ROC maiúsculo, ROC minúsculo a seguir para bibliotecas de baixo nível, ou seja, ROCt, e o contrário para bibliotecas voltadas para o usuário, ou seja, rocBLAS.
A AMD está desenvolvendo ativamente com a comunidade LLVM, mas o upstreaming não é instantâneo e, em janeiro de 2022, ainda está atrasado. A AMD ainda empacota oficialmente vários forks LLVM para partes que ainda não foram disponibilizadas – otimizações do compilador destinadas a permanecer proprietárias, suporte de depuração, descarregamento de OpenMP, etc.
Bibliotecas de suporte implementadas como bitcode LLVM. Eles fornecem vários utilitários e funções para operações matemáticas, atômicas, consultas para parâmetros de inicialização, inicialização de kernel no dispositivo, etc.
O thunk é responsável por todo o pensamento e enfileiramento que vão para a pilha.
O ROC runtime é um conjunto de APIs/bibliotecas que permite o lançamento de kernels de computação por aplicativos host. É a implementação da API de tempo de execução HSA da AMD. É diferente do ROC Common Language Runtime.
O gerenciador de objetos de código ROCm é responsável por interagir com a representação intermediária do LLVM.
O Common Language Runtime é uma camada de indireção que adapta chamadas para ROCr no Linux e PAL no Windows. Ele costumava ser capaz de rotear entre diferentes compiladores, como o compilador HSAIL. Agora ele está sendo absorvido pelas camadas de indireção superiores (HIP e OpenCL).
O ROCm envia seu carregador de driver de cliente instalável (ICD) e uma implementação OpenCL agrupados. Em janeiro de 2022, o ROCm 4.5.2 distribuiu o OpenCL 2.2 e ficou atrás da concorrência.
A implementação da AMD para suas GPUs é chamada de HIPAMD. Há também uma implementação de CPU, principalmente para fins de demonstração.
O HIP cria um compilador `HIPCC` que envolve o Clang e compila com o backend AMDGPU aberto do LLVM ou redireciona para o compilador NVIDIA.
HIPIFY é uma ferramenta de compilação de fonte para fonte. Ele traduz CUDA para HIP e vice-versa, usando uma ferramenta baseada em Clang ou um script Perl semelhante ao sed.
Assim como o HIPIFY, o GPUFORT é uma ferramenta que compila código-fonte em outras fontes de linguagem de terceira geração, permitindo que os usuários migrem do CUDA Fortran para o HIP Fortran. Está também no repertório dos projetos de investigação, ainda mais.
As bibliotecas de alto nível do ROCm geralmente são consumidas diretamente pelo software de aplicação, como estruturas de aprendizado de máquina. A maioria das bibliotecas a seguir está na categoria General Matrix Multiply (GEMM), na qual a arquitetura de GPU se destaca.
A maioria dessas bibliotecas voltadas para o usuário vem em formato duplo: hip para a camada de indireção que pode rotear para o hardware Nvidia e roc para a implementação AMD.
rocBLAS e hipBLAS são centrais em bibliotecas de alto nível, é a implementação AMD para subprogramas de álgebra linear básica. Ele usa a biblioteca Tensile de forma privada.
Este par de bibliotecas constitui a implementação LAPACK para ROCm e está fortemente acoplado ao rocBLAS.
O ROCm compete com outras pilhas de computação de GPU: Nvidia CUDA e Intel OneAPI.
O CUDA da Nvidia é de código fechado, enquanto o AMD ROCm é de código aberto. Há software de código aberto criado sobre o CUDA de código fechado, por exemplo, o RAPIDS.
CUDA pode ser executado em GPUs de consumo, enquanto o suporte ROCm é oferecido principalmente para hardware profissional, como AMD Instinct e AMD Radeon Pro.
A Nvidia fornece um frontend centrado em C/C++ e seu backend de GPU LLVM Parallel Thread Execution (PTX) como o Nvidia CUDA Compiler (NVCC).
Assim como o ROCm, o oneAPI é de código aberto, e todas as bibliotecas correspondentes são publicadas em sua página do GitHub.
A Unified Acceleration Foundation (UXL) é um novo consórcio de tecnologia que está trabalhando na continuação da iniciativa OneAPI, com o objetivo de criar um novo ecossistema de software acelerador de padrão aberto, padrões abertos relacionados e projetos de especificação por meio de Grupos de Trabalho e Grupos de Interesse Especial (SIGs). O objetivo será competir com o CUDA da Nvidia. As principais empresas por trás disso são Intel, Google, Arm, Qualcomm, Samsung, Imagination e VMware.