ROCm
ROCm
| |
|---|---|
| Desenvolvedor | |
| AMD | |
| Lançamento inicial | |
| 14 de novembro de 2016 | |
| Versão estável | |
| 6.4.0 / 11 de abril de 2025[1] | |
| 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[2] | |
| 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[3] é 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[4]) 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.
Background
[editar | editar código]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[5] com a Boltzmann Initiative.[6] A pilha ROCm se baseia em pilhas de GPU AMD anteriores; algumas ferramentas remontam ao GPUOpen e outras à Heterogeneous System Architecture (HSA).
Heterogeneous System Architecture Intermediate Language
[editar | editar código]HSAIL[7] 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,[8] embora ainda haja pesquisas sobre essa modularidade aprimorada com LLVM MLIR.[9]
Habilidades de programação
[editar | editar código]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,[10] e programação ROCm[11] por meio de seu portal de aprendizagem.[12]
Uma das melhores introduções técnicas sobre a pilha e a programação ROCm/HIP, continua, até hoje, a ser encontrada no Reddit.[13]
Suporte de hardware
[editar | editar código]O ROCm é direcionado principalmente para GPUs profissionais discretas,[14] 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.[15]
GPUs de nível profissional
[editar | editar código]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).
GPUs de nível de consumidor
[editar | editar código]| 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[16] | ||||||||
| 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[19] | ||||
| 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[a]
|
Experimental[20] | |||||||
- ↑ DRM (Direct Rendering Manager) é um componente do Linux kernel.
Ecossistema de software
[editar | editar código]Recursos de aprendizagem
[editar | editar código]O gerente de produto AMD ROCm, Terry Deem, fez um tour pela pilha.[21]
Integração de terceiros
[editar | editar código]Os principais consumidores da pilha são aplicativos de aprendizado de máquina e computação de alto desempenho/GPGPU.
Aprendizado de máquina
[editar | editar código]Várias estruturas de aprendizagem profunda têm um backend ROCm:[22]
- PyTorch
- TensorFlow
- ONNX
- MXNet
- CuPy[23]
- MIOpen
- Caffe
- Iree (que usa LLVM Multi-Level Intermediate Representation (MLIR))
- lhama.cpp
Supercomputação
[editar | editar código]O ROCm está ganhando força significativa no top 500.[24] O ROCm é usado com os supercomputadores Exascale El Capitan[25][26] e Frontier.
Alguns softwares relacionados podem ser encontrados no AMD Infinity hub.
Outras interoperações de aceleração e gráficos
[editar | editar código]A partir da versão 3.0, o Blender agora pode usar kernels de computação HIP para seus ciclos de renderização.[27]
Outros idiomas
[editar | editar código]Julia
[editar | editar código]Julia tem o pacote AMDGPU.jl,[28] 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.
Distribuição de software
[editar | editar código]Oficial
[editar | editar código]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.[29]
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.[30]
A AMD distribui pacotes personalizados para diversas distribuições Linux.
Terceiro
[editar | editar código]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,[31] Gentoo,[32] Debian, Fedora,[33] GNU Guix e NixOS.
Componentes
[editar | editar código]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.[35]
A AMD está desenvolvendo ativamente com a comunidade LLVM, mas o upstreaming não é instantâneo e, em janeiro de 2022, ainda está atrasado.[36] A AMD ainda empacota oficialmente vários forks LLVM[37][38][9] 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.
Baixo nível
[editar | editar código]ROCk – Kernel driver
[editar | editar código]ROCm – Device libraries
[editar | editar código]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.
ROCt – Thunk
[editar | editar código]O thunk é responsável por todo o pensamento e enfileiramento que vão para a pilha.
ROCr – Runtime
[editar | editar código]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.[39] É diferente do ROC Common Language Runtime.
ROCm – CompilerSupport
[editar | editar código]O gerenciador de objetos de código ROCm é responsável por interagir com a representação intermediária do LLVM.
Nível médio
[editar | editar código]ROCclr Common Language Runtime
[editar | editar código]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).
OpenCL
[editar | editar código]O ROCm envia seu carregador de driver de cliente instalável (ICD) e uma implementação OpenCL[40] agrupados. Em janeiro de 2022, o ROCm 4.5.2 distribuiu o OpenCL 2.2 e ficou atrás da concorrência.[41]
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.
HIPCC
[editar | editar código]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.[42]
HIPIFY
[editar | editar código]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.
GPUFORT
[editar | editar código]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.[43]
De alto nível
[editar | editar código]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.[44]
rocBLAS / hipBLAS
[editar | editar código]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.
rocSOLVER / hipSOLVER
[editar | editar código]Este par de bibliotecas constitui a implementação LAPACK para ROCm e está fortemente acoplado ao rocBLAS.
Utilitários
[editar | editar código]- Ferramentas de desenvolvedor ROCm: depuração, rastreador, criador de perfil, interface de gerenciamento de sistema, conjunto de validação, gerenciamento de cluster.
- Ferramentas GPUOpen: analisador de GPU, visualizador de memória...
- Ferramentas externas: radeontop (visão geral do TUI)
Comparação com concorrentes
[editar | editar código]O ROCm compete com outras pilhas de computação de GPU: Nvidia CUDA e Intel OneAPI.
Nvidia CUDA
[editar | editar código]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).
Intel OneAPI
[editar | editar código]Assim como o ROCm, o oneAPI é de código aberto, e todas as bibliotecas correspondentes são publicadas em sua página do GitHub.
Fundação de Aceleração Unificada (UXL)
[editar | editar código]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.[45]
Ver também
[editar | editar código]- AMD Software – uma visão geral dos drivers, APIs e esforços de desenvolvimento da AMD.
- GPUOpen – pilha gráfica complementar da AMD
- AMD Radeon Software – canal de distribuição de software da AMD
Referências
- ↑ «ROCm 6.4.0 Release». GitHub. Consultado em 30 de abril de 2025
- ↑ «New HIP SDK helps democratize GPU Computing». 27 de julho de 2023. Cópia arquivada em 27 de julho de 2023
- ↑ «Question: What does ROCm stand for? · Issue #1628 · RadeonOpenCompute/ROCm». Github.com. Consultado em 30 de abril de 2025
- ↑ «Debian -- Details of package firmware-amd-graphics in buster». Packages.debian.org. Consultado em 30 de abril de 2025
- ↑ «AMD @ SC16: Radeon Open Compute Platform (ROCm) 1.3 Released, Boltzmann Comes to Fruition». anandtech.com. Consultado em 30 de abril de 2025
- ↑ «AMD @ SC15: Boltzmann Initiative Announced - C++ and CUDA Compilers for AMD GPUs». anandtech.com. Consultado em 30 de abril de 2025
- ↑ «HSA Programmer's Reference Manual: HSAIL Virtual ISA and Programming Model, Compiler Writer, and Object Format (BRIG)» (PDF). HSA Foundation. 2 de maio de 2018. Consultado em 30 de abril de 2025
- ↑ «User Guide for AMDGPU Backend — LLVM 13 documentation». Llvm.org. Consultado em 30 de abril de 2025
- ↑ a b «The LLVM Compiler Infrastructure». GitHub. 19 de janeiro de 2022
- ↑ «Introduction to AMD GPU Hardware». 12 de junho de 2020 – via www.youtube.com
- ↑ «Fundamentals of HIP Programming». Arquivado do original em 7 de fevereiro de 2023
- ↑ «ROCm™ Learning Center». AMD. Cópia arquivada em 12 de novembro de 2021
- ↑ «AMD ROCm / HCC programming: Introduction». 26 de dezembro de 2018
- ↑ «AMD Documentation - Portal». Consultado em 30 de abril de 2025. Cópia arquivada em 2 de outubro de 2022
- ↑ «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 dezembro de 2021
- ↑ «ROCm Getting Started Guide v5.2.3». Cópia arquivada em 26 de setembro de 2022
- ↑ «HOW-TO: Stable Diffusion on an AMD GPU». 23 de setembro de 2022
- ↑ «Any update on 5700 Xt support?». GitHub
- ↑ «AMD Radeon RX 6800 XT Specs». TechPowerUp. Consultado em 30 de abril de 2025
- ↑ Larabel, Michael (7 de dezembro de 2016). «The Best Features of the Linux 4.9 Kernel». Phoronix. Consultado em 30 de abril de 2025
- ↑ «ROCm presentation». HPCwire.com. 6 de julho de 2020. Consultado em 30 de abril de 2025
- ↑ «AMD Introduces Its Deep-Learning Accelerator Instinct MI200 Series GPUs». Infoq.com. Consultado em 30 de abril de 2025
- ↑ «Using CuPy on AMD GPU (experimental)»
- ↑ «AMD Chips Away at Intel in World's Top 500 Supercomputers as GPU War Looms». 16 de novembro 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 fevereiro de 2021
- ↑ «Blender 3.0 takes support for AMD GPUs to the next level. Beta support available now!». Gpuopen.com. 15 de novembro de 2021. Consultado em 30 de abril de 2025
- ↑ «AMD ROCm ⋅ JuliaGPU». juliagpu.org
- ↑ «ROCm Installation v4.3 — ROCm 4.5.0 documentation». Rocmdocs.amd.com. Consultado em 30 de abril de 2025
- ↑ «Running Scientific Applications on AMD Instinct Accelerators Just Got Easier». HPCwire.com. 18 de outubro de 2021. Consultado em 30 de abril de 2025
- ↑ «ROCm for Arch Linux». Github.com. 17 de janeiro de 2022. Consultado em 30 de abril de 2025
- ↑ «Gentoo Linux Packages Up AMD ROCm, Makes Progress On RISC-V, LTO+PGO Python». Phoronix.com. Consultado em 30 de abril de 2025
- ↑ «Fedora & Debian Developers Look At Packaging ROCm For Easier Radeon GPU Computing Experience». Phoronix.com. Consultado em 30 de abril de 2025
- ↑ Gamblin, Todd; LeGendre, Matthew; Collette, Michael R.; Lee, Gregory L.; Moody, Adam; de Supinski, Bronis R.; Futral, Scott (15 de novembro de 2015). «The Spack Package Manager: Bringing Order to HPC Software Chaos» – via GitHub
- ↑ «20211221 Packaging session notes and small update». debian-ai@lists.debian.org (Lista de grupo de correio) (em inglês)
- ↑ «[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 janeiro de 2022
- ↑ «The LLVM Compiler Infrastructure». GitHub. 10 de janeiro de 2022
- ↑ «HSA Runtime Programmer's Reference Manual» (PDF). HSA Foundation. 2 de maio de 2018. Consultado em 30 de abril de 2025
- ↑ «Khronos OpenCL Registry - The Khronos Group Inc». www.khronos.org
- ↑ «List of OpenCL Conformant Products - The Khronos Group Inc». www.khronos.org. 3 de fevereiro de 2022
- ↑ «Figure 3. HIPCC compilation process illustration. The clang compiler». Consultado em 30 de abril de 2025. Cópia arquivada em 24 de janeiro de 2022
- ↑ «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 (Maio de 2021). ROCm Library Support & Profiling Tools (PDF). AMD
- ↑ «Exclusive: Behind the plot to break Nvidia's grip on AI by targeting software». Reuters. Consultado em 30 de abril de 2025
Ligações externas
[editar | editar código]- «ROCm official documentation». AMD. 10 de fevereiro de 2022. Cópia arquivada em 10 de fevereiro de 2022
- «ROCm Learning Center». AMD. 25 de janeiro de 2022. Cópia arquivada em 8 de fevereiro de 2022
- «ROCm official documentation on the github super-project». AMD. 25 de janeiro de 2022
- «ROCm official documentation - pre 5.0». AMD. 19 de janeiro de 2022
- «GPU-Accelerated Applications with AMD Instinct Accelerators & AMD ROCm Software» (PDF). AMD. 25 de janeiro de 2022. Cópia arquivada (PDF) em 22 de março de 2022
