Ir para o conteúdo

ROCm

Origem: Wikipédia, a enciclopédia livre.
ROCm
ROCm
Desenvolvedor
AMD
Lançamento inicial
14 de novembro de 2016; há 9 anos
Versão estável
6.4.0 / 11 de abril de 2025; há 7 meses[1]
Repositório
Meta-repository
github.com/ROCm/ROCm
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.amd.com/en/products/software/rocm.html

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 Não Current
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] Não Yes[17] Yes Yes[18] Yes
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] Yes
  1. 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]

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 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]

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.

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.

Existem pacotes Spack.[34]

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).

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.

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 é 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.[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

  1. «ROCm 6.4.0 Release». GitHub. Consultado em 30 de abril de 2025 
  2. «New HIP SDK helps democratize GPU Computing». 27 de julho de 2023. Cópia arquivada em 27 de julho de 2023 
  3. «Question: What does ROCm stand for? · Issue #1628 · RadeonOpenCompute/ROCm». Github.com. Consultado em 30 de abril de 2025 
  4. «Debian -- Details of package firmware-amd-graphics in buster». Packages.debian.org. Consultado em 30 de abril de 2025 
  5. «AMD @ SC16: Radeon Open Compute Platform (ROCm) 1.3 Released, Boltzmann Comes to Fruition». anandtech.com. Consultado em 30 de abril de 2025 
  6. «AMD @ SC15: Boltzmann Initiative Announced - C++ and CUDA Compilers for AMD GPUs». anandtech.com. Consultado em 30 de abril de 2025 
  7. «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 
  8. «User Guide for AMDGPU Backend — LLVM 13 documentation». Llvm.org. Consultado em 30 de abril de 2025 
  9. a b «The LLVM Compiler Infrastructure». GitHub. 19 de janeiro de 2022 
  10. «Introduction to AMD GPU Hardware». 12 de junho de 2020 – via www.youtube.com 
  11. «Fundamentals of HIP Programming». Arquivado do original em 7 de fevereiro de 2023 
  12. «ROCm™ Learning Center». AMD. Cópia arquivada em 12 de novembro de 2021 
  13. «AMD ROCm / HCC programming: Introduction». 26 de dezembro de 2018 
  14. «AMD Documentation - Portal». Consultado em 30 de abril de 2025. Cópia arquivada em 2 de outubro de 2022 
  15. «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 
  16. «ROCm Getting Started Guide v5.2.3». Cópia arquivada em 26 de setembro de 2022 
  17. «HOW-TO: Stable Diffusion on an AMD GPU». 23 de setembro de 2022 
  18. «Any update on 5700 Xt support?». GitHub 
  19. «AMD Radeon RX 6800 XT Specs». TechPowerUp. Consultado em 30 de abril de 2025 
  20. Larabel, Michael (7 de dezembro de 2016). «The Best Features of the Linux 4.9 Kernel». Phoronix. Consultado em 30 de abril de 2025 
  21. «ROCm presentation». HPCwire.com. 6 de julho de 2020. Consultado em 30 de abril de 2025 
  22. «AMD Introduces Its Deep-Learning Accelerator Instinct MI200 Series GPUs». Infoq.com. Consultado em 30 de abril de 2025 
  23. «Using CuPy on AMD GPU (experimental)» 
  24. «AMD Chips Away at Intel in World's Top 500 Supercomputers as GPU War Looms». 16 de novembro de 2020 
  25. «El Capitan Supercomputer Detailed: AMD CPUs & GPUs to Drive 2 Exaflops of Compute» 
  26. «Livermore's el Capitan Supercomputer to Debut HPE 'Rabbit' Near Node Local Storage». 18 de fevereiro de 2021 
  27. «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 
  28. «AMD ROCm ⋅ JuliaGPU». juliagpu.org 
  29. «ROCm Installation v4.3 — ROCm 4.5.0 documentation». Rocmdocs.amd.com. Consultado em 30 de abril de 2025 
  30. «Running Scientific Applications on AMD Instinct Accelerators Just Got Easier». HPCwire.com. 18 de outubro de 2021. Consultado em 30 de abril de 2025 
  31. «ROCm for Arch Linux». Github.com. 17 de janeiro de 2022. Consultado em 30 de abril de 2025 
  32. «Gentoo Linux Packages Up AMD ROCm, Makes Progress On RISC-V, LTO+PGO Python». Phoronix.com. Consultado em 30 de abril de 2025 
  33. «Fedora & Debian Developers Look At Packaging ROCm For Easier Radeon GPU Computing Experience». Phoronix.com. Consultado em 30 de abril de 2025 
  34. 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 
  35. «20211221 Packaging session notes and small update». debian-ai@lists.debian.org (Lista de grupo de correio) (em inglês) 
  36. «[Debian official packaging] How is ROCm LLVM fork still needed? · Issue #2449 · ROCm-Developer-Tools/HIP». GitHub 
  37. «Aomp - V 14.0-1». GitHub. 22 de janeiro de 2022 
  38. «The LLVM Compiler Infrastructure». GitHub. 10 de janeiro de 2022 
  39. «HSA Runtime Programmer's Reference Manual» (PDF). HSA Foundation. 2 de maio de 2018. Consultado em 30 de abril de 2025 
  40. «Khronos OpenCL Registry - The Khronos Group Inc». www.khronos.org 
  41. «List of OpenCL Conformant Products - The Khronos Group Inc». www.khronos.org. 3 de fevereiro de 2022 
  42. «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 
  43. «AMD Publishes Open-Source "GPUFORT" as Newest Effort to Help Transition Away from CUDA» 
  44. 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 
  45. «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]