CUDA
CUDA é uma plataforma de computação paralela proprietária e interface de programação de aplicações (API) desenvolvida pela empresa de tecnologia americana Nvidia que permite que software utilize certos tipos de unidades de processamento gráfico (GPUs) para processamento de propósito geral acelerado, ampliando significativamente sua utilidade em computação científica e de alto desempenho. A CUDA foi criada pela Nvidia a partir de 2004 e foi oficialmente lançada em 2007. Quando foi introduzida pela primeira vez, o nome era um acrônimo para Compute Unified Device Architecture, mas a Nvidia posteriormente abandonou o uso comum do acrônimo e raramente o expande atualmente.
A unidade de processamento gráfico (GPU), como um processador de computador especializado, atende às demandas de tarefas intensivas de computação de gráficos 3D de alta resolução em tempo real. Em 2012, as GPUs evoluíram para sistemas multi-core altamente paralelos permitindo a manipulação eficiente de grandes blocos de dados. Este design é mais eficaz do que unidades centrais de processamento (CPUs) de propósito geral para algoritmos em situações onde o processamento de grandes blocos de dados é feito em paralelo, como: As origens da CUDA remontam ao início dos anos 2000, quando Ian Buck, um estudante de doutorado em ciência da computação na Universidade Stanford, começou a experimentar o uso de GPUs para fins além da renderização de gráficos. Buck tornou-se interessado em GPUs durante seus estudos de graduação na Universidade de Princeton, inicialmente através de jogos eletrônicos. Após a formatura, ele estagiou na Nvidia, ganhando maior exposição à arquitetura de GPU. Em Stanford, ele construiu um equipamento de jogos 8K usando 32 placas gráficas GeForce, originalmente para testar os limites do desempenho gráfico em jogos como Quake e Doom. No entanto, seus interesses mudaram para explorar o potencial das GPUs para computação paralela de propósito geral.
Imagem: Dominic's pics · BY · Openverse
A tabela a seguir oferece uma descrição não exata para a ontologia da estrutura CUDA.
A plataforma CUDA é acessível a desenvolvedores de software através de bibliotecas aceleradas por CUDA, diretivas de compilador como OpenACC, e extensões para linguagens de programação padrão da indústria, incluindo C, C++, Fortran e Python. Programadores C/C++ podem usar 'CUDA C/C++', compilado para PTX com nvcc (compilador C/C++ baseado em LLVM da Nvidia) ou pelo próprio clang. Programadores Fortran podem usar 'CUDA Fortran', compilado com o compilador PGI CUDA Fortran da The Portland Group. Programadores Python podem usar a biblioteca cuPyNumeric para acelerar aplicações em GPUs Nvidia. Além de bibliotecas, diretivas de compilador, CUDA C/C++ e CUDA Fortran, a plataforma CUDA suporta outras interfaces computacionais, incluindo OpenCL do Khronos Group, DirectCompute da Microsoft, OpenGL Compute Shader e C++ AMP. Wrappers de terceiros também estão disponíveis para Python, Perl, Fortran, Java, Ruby, Lua, Common Lisp, Haskell, R, MATLAB, IDL, Julia, e suporte nativo em Mathematica.
Imagem: ER0L · BY · Openverse
CUDA tem várias vantagens sobre a computação de propósito geral tradicional em GPUs (GPGPU) usando APIs gráficas:
Imagem: ER0L · BY · Openverse
Este código de exemplo em C++ carrega uma textura de uma imagem em uma matriz na GPU: Abaixo está um exemplo dado em Python que calcula o produto de duas matrizes na GPU. As ligações não oficiais da linguagem Python podem ser obtidas do PyCUDA. Ligações adicionais em Python para simplificar operações de multiplicação de matrizes podem ser encontradas no programa pycublas. enquanto CuPy substitui diretamente o NumPy:
Imagem: Dominic's pics · BY · Openverse
Nota sobre notação: a capacidade de computação X.Y também é escrita SMXY ou sm_xy (por exemplo, 10.3 como SM103 ou sm_103) no software profissional da Nvidia e no código que a Nvidia contribuiu para o LLVM. Abaixo está uma tabela das capacidades de computação CUDA suportadas com base na versão do SDK CUDA e microarquitetura, listadas por nome de código: Nota: CUDA SDK 10.2 é o último lançamento oficial para macOS, pois o suporte não estará disponível para macOS em versões mais recentes. Capacidade de computação CUDA por versão com semicondutores GPU associados e modelos de placa GPU (separados por suas várias áreas de aplicação):
Imagem: Dominic's pics · BY · Openverse
Nota: Uma GPU com uma capacidade de computação maior é capaz de executar código PTX destinado a uma GPU de uma faixa menor de capacidades de computação. No entanto, é possível compilar o código CUDA de uma forma que funcione apenas em uma família específica (mesmo "X") de GPUs; se o código existente for compilado dessa maneira, será necessária a recompilação para que ele funcione em uma GPU mais nova.
Tipos de dados
Nota: Quaisquer linhas ausentes ou entradas vazias refletem a falta de informações sobre aquele item exato.
Tensor cores
Nota: Quaisquer linhas ausentes ou entradas vazias refletem a falta de informações sobre aquele item exato.
Arquitetura do multiprocessador
Para mais informações, leia o Guia de Programação Nvidia CUDA C++.
Imagem: Dominic's pics · BY · Openverse
CUDA compete com outras pilhas de computação GPU: Intel OneAPI e AMD ROCm. Enquanto a CUDA da Nvidia é de código fechado, a OneAPI da Intel e a ROCm da AMD são de código aberto.
Intel OneAPI
oneAPI é uma iniciativa baseada em padrões abertos, criada para apoiar o desenvolvimento de software para múltiplas arquiteturas de hardware. As bibliotecas oneAPI devem implementar especificações abertas que são discutidas publicamente pelos Grupos de Interesse Especial, oferecendo a possibilidade de qualquer desenvolvedor ou organização implementar suas próprias versões das bibliotecas oneAPI. Originalmente feita pela Intel, outros adotantes de hardware incluem Fujitsu e Huawei. A Fundação de Aceleração Unificada (UXL) é um novo consórcio de tecnologia que trabalha na continuação da iniciativa OneAPI, com o objetivo de criar um novo ecossistema de software acelerador de padrão aberto, projetos de padrões abertos relacionados e especificações através de Grupos de Trabalho e Grupos de Interesse Especial (SIGs). O objetivo é oferecer alternativas abertas à CUDA da Nvidia. As principais empresas por trás disso são Intel, Google, ARM, Qualcomm, Samsung, Imagination e VMware.
AMD ROCm
ROCm é uma pilha de software de código aberto para programação de unidade de processamento gráfico (GPU) da Advanced Micro Devices (AMD).


