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.
Background 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).
Heterogeneous System Architecture Intermediate Language 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.
Habilidades de programação 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.
Suporte de hardware 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.
GPUs de nível profissional 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 Nome da série de GPUSouthernIslandsSeaIslandsVolcanicIslandsArcticIslands/PolarisVegaNavi 1XNavi 2XLançadoJaneiro de 2012Setembro de 2013Junho de 2015Junho de 2016Junho de 2017Julho de 2019novembro de 2020Nome de marketingRadeon HD 7000Radeon Rx 200Radeon Rx 300Radeon RX 400/500Radeon RX Vega/Radeon VII(7 nm)Radeon RX 5000Radeon RX 6000Suporte AMD colspan="3" colspan=4 Conjunto de instruçõesConjunto de instruções GCNConjunto de instruções RDNAMicroarquitetura GCN 1st gen GCN 2nd gen GCN 3rd gen GCN 4th gen GCN 5th genRDNARDNA 2TipoUnified shader modelROCm colspan=3 colspan=1 colspan=1 colspan=1 colspan=2 OpenCL1.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.02.1Vulkan1.0(Win 7+ ou Mesa 17+)1.2 (Adrenalin 20.1, Linux Mesa 3D 20.0)Shader model5.15.16.36.46.5OpenGL4.6 (no Linux: 4.6 (Mesa 3D 20.0))Direct3D11 (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 colspan=2 colspan=5
Ecossistema de software Recursos de aprendizagem O gerente de produto AMD ROCm, Terry Deem, fez um tour pela pilha.
Integração de terceiros Os principais consumidores da pilha são aplicativos de aprendizado de máquina e computação de alto desempenho/GPGPU.
Aprendizado de máquina Várias estruturas de aprendizagem profunda têm um backend ROCm:
PyTorch TensorFlow ONNX MXNet CuPy MIOpen Caffe Iree (que usa LLVM Multi-Level Intermediate Representation (MLIR)) lhama.cpp
Supercomputação 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.
Outras interoperações de aceleração e gráficos A partir da versão 3.0, o Blender agora pode usar kernels de computação HIP para seus ciclos de renderização.
Outros idiomas Julia 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.
Distribuição de software Oficial 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.
Terceiro 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.
Componentes 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.
Baixo nível ROCk Kernel driver
ROCm Device libraries 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 O thunk é responsável por todo o pensamento e enfileiramento que vão para a pilha.
ROCr Runtime 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.
ROCm CompilerSupport O gerenciador de objetos de código ROCm é responsável por interagir com a representação intermediária do LLVM.
Nível médio ROCclr Common Language Runtime 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
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.
HIP Heterogeneous Interface for Portability 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 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 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 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.
De alto nível 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 / hipBLAS 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 Este par de bibliotecas constitui a implementação LAPACK para ROCm e está fortemente acoplado ao rocBLAS.
Utilitários 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 O ROCm compete com outras pilhas de computação de GPU: Nvidia CUDA e Intel OneAPI.
Nvidia CUDA
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
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) 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.
Ver também 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
Ligações externas
Categoria:Supercomputadores Categoria:Computação paralela Categoria:Aprendizagem de máquina Categoria:Placas de vídeo Categoria:Computação concorrente Categoria:Interface de programação de aplicações