Quina diferència hi ha entre CUDA i ROCm per a les aplicacions GPGPU?

Què aprendràs:

  • Diferències entre CUDA i ROCm.
  • Quins són els punts forts de cada plataforma?

Les unitats de processament de gràfics (GPU) estan dissenyades tradicionalment per gestionar tasques computacionals de gràfics, com ara processament i renderització d’imatges i vídeo, gràfics en 2D i 3D, vectorització i molt més. La informàtica de propòsit general a les GPU es va fer més pràctica i popular després de 2001, amb l’arribada dels shaders programables i del suport de coma flotant als processadors gràfics.

En particular, va implicar problemes amb matrius i vectors, inclosos vectors de dues, tres o quatre dimensions. Es van traduir fàcilment a una GPU, que actua amb velocitat nativa i suport en aquests tipus. Una fita important per a les GPU de propòsit general (GPGPU) va ser l’any 2003, quan un parell de grups de recerca van descobrir de manera independent enfocaments basats en GPU per a la solució de problemes generals d’àlgebra lineal en GPU que funcionaven més ràpidament que en CPU.

Evolució de la GPGPU

Els primers esforços per utilitzar les GPU com a processadors de propòsit general van requerir reformular els problemes computacionals en termes de primitives gràfics, que eren suportats per dues API principals per a processadors gràfics: OpenGL i DirectX.

Poc després els va seguir el CUDA de NVIDIA, que va permetre als programadors abandonar els conceptes gràfics subjacents per a conceptes informàtics d’alt rendiment més comuns, com ara OpenCL i altres marcs de gamma alta. Això significava que les canonades GPGPU modernes podien aprofitar la velocitat d’una GPU sense requerir una conversió completa i explícita de les dades a una forma gràfica.

NVIDIA descriu CUDA com una plataforma informàtica paral·lela i una interfície de programació d’aplicacions (API) que permet al programari utilitzar GPU específiques per al processament de propòsit general. CUDA és una capa de programari que dóna accés directe al conjunt d’instruccions virtuals de la GPU i elements computacionals paral·lels per executar nuclis informàtics.

Per no quedar-se fora, AMD va llançar la seva pròpia plataforma informàtica de propòsit general el 2016 anomenada Radeon Open Compute Ecosystem (ROCm). ROCm està dirigit principalment a GPU professionals discretes, com ara la línia Radeon Pro d’AMD. Tanmateix, el suport oficial és més expansiu i s’estén als productes de qualitat del consumidor, incloses les GPU de jocs.

A diferència de CUDA, la pila de programari ROCm pot aprofitar diversos dominis, com ara la GPGPU de propòsit general, la informàtica d’alt rendiment (HPC) i la informàtica heterogènia. També ofereix diversos models de programació, com ara HIP (programació basada en el nucli de GPU), OpenMP/Message Passing Interface (MPI) i OpenCL. Aquests també admeten microarquitectures, incloses RDNA i CDNA, per a una infinitat d’aplicacions que van des de la IA i la informàtica de punta fins a l’IoT/IIoT.

CUDA de NVIDIA

La majoria de les targetes de les sèries Tesla i RTX de NVIDIA estan equipades amb una sèrie de nuclis CUDA (Fig.1) dissenyat per fer front a diversos càlculs al mateix temps. Aquests nuclis són similars als nuclis de la CPU, però vénen empaquetats a la GPU i poden processar dades en paral·lel. Pot ser que hi hagi milers d’aquests nuclis incrustats a la GPU, cosa que els converteix en sistemes paral·lels increïblement eficients capaços de descarregar tasques centrades en la CPU directament a la GPU.

La informàtica paral·lela es descriu com el procés de desglossar problemes més grans en parts més petites i independents que es poden executar simultàniament per diversos processadors que es comuniquen mitjançant memòria compartida. A continuació, es combinen en finalitzar com a part d’un algorisme global. L’objectiu principal de la computació paral·lela és augmentar la potència de càlcul disponible per a un processament d’aplicacions i una resolució de problemes més ràpides.

Amb aquesta finalitat, l’arquitectura CUDA està dissenyada per funcionar amb llenguatges de programació com C, C++ i Fortran, facilitant l’ús dels recursos de la GPU als programadors paral·lels. Això contrasta amb les API anteriors com Direct3D i OpenGL, que requerien habilitats avançades en programació gràfica. Les GPU alimentades per CUDA també admeten marcs de programació com OpenMP, OpenACC, OpenCL i HIP compilant aquest codi a CUDA.

Com passa amb la majoria de les API, els kits de desenvolupament de programari (SDK) i les piles de programari, NVIDIA ofereix biblioteques, directrius del compilador i extensions per als populars llenguatges de programació esmentats anteriorment, cosa que fa que la programació sigui més fàcil i eficient. Aquests inclouen cuSPARCE, la compilació de temps d’execució NVRTC, GameWorks Physx, suport de GPU multi-instància MIG, cuBLAS i molts altres.

Una bona part d’aquestes piles de programari està dissenyada per gestionar aplicacions basades en IA, com ara aprenentatge automàtic i aprenentatge profund, visió per ordinador, IA conversacional i sistemes de recomanació.

Les aplicacions de visió per ordinador utilitzen l’aprenentatge profund per obtenir coneixement a partir d’imatges i vídeos digitals. Les aplicacions d’IA de conversa ajuden els ordinadors a entendre i comunicar-se mitjançant el llenguatge natural. Els sistemes de recomanació utilitzen imatges, llenguatge i els interessos de l’usuari per oferir resultats i serveis de cerca significatius i rellevants.

Els marcs d’aprenentatge profund accelerats per GPU ofereixen un nivell de flexibilitat per dissenyar i entrenar xarxes neuronals personalitzades i proporcionen interfícies per als llenguatges de programació d’ús habitual. Tots els principals marcs d’aprenentatge profund, com TensorFlow, PyTorch i altres, ja estan accelerats per la GPU, de manera que els científics de dades i els investigadors poden posar-se al dia sense programar la GPU.

L’ús actual de l’arquitectura CUDA que va més enllà de la IA inclou bioinformàtica, informàtica distribuïda, simulacions, dinàmica molecular, anàlisi mèdica (CTI, MRI i altres aplicacions d’escaneig d’imatges), xifratge i molt més.

Pila de programari ROCm d’AMD

ROCM d’AMD (Fig.2) La pila de programari és similar a la plataforma CUDA, només que és de codi obert i utilitza les GPU de l’empresa per accelerar les tasques computacionals. Les últimes targetes de les sèries Radeon Pro W6000 i RX6000 estan equipades amb nuclis de càlcul, acceleradors de raigs (Ray tracing) i processadors de flux que aprofiten l’arquitectura RDNA per al processament paral·lel, incloent GPGPU, HPC, HIP (model de programació semblant a CUDA). ), MPI i OpenCL.

Atès que l’ecosistema ROCm està format per tecnologies obertes, inclosos marcs (TensorFlow/PyTorch), biblioteques (MIOpen/Blas/RCCL), models de programació (HIP), interconnexions (OCD) i suport de nucli de Linux en flux ascendent, la plataforma s’optimitza de manera rutinària. per al rendiment i l’eficiència per a una àmplia gamma de llenguatges de programació.

El ROCm d’AMD està dissenyat per a l’escala, el que significa que admet la informàtica multi-GPU dins i fora de la comunicació del node servidor mitjançant l’accés directe a la memòria remot (RDMA), que ofereix la possibilitat d’accedir directament a la memòria de l’amfitrió sense intervenció de la CPU. Així, com més gran sigui la memòria RAM del sistema, més grans són les càrregues de processament que pot gestionar ROCm.

ROCm també simplifica la pila quan el controlador incorpora directament el suport de sincronització entre iguals RDMA, facilitant el desenvolupament d’aplicacions. A més, inclou ROCr System Runtime, que és independent del llenguatge i aprofita l’API Runtime HAS (arquitectura de sistema heterogènia), proporcionant una base per executar llenguatges de programació com HIP i OpenMP.

Igual que amb CUDA, ROCm és una solució ideal per a aplicacions d’IA, ja que alguns marcs d’aprenentatge profund ja admeten un backend de ROCm (per exemple, TensorFlow, PyTorch, MXNet, ONNX, CuPy i més). Segons AMD, qualsevol proveïdor de CPU/GPU pot aprofitar ROCm, ja que no és una tecnologia propietària. Això vol dir que el codi escrit en CUDA o una altra plataforma es pot portar al format HIP neutral per al proveïdor i, a partir d’aquí, els usuaris poden compilar el codi per a la plataforma ROCm.

L’empresa ofereix una sèrie de biblioteques, complements i extensions per millorar la funcionalitat de ROCm, inclosa una solució (HCC) per al llenguatge de programació C++ que permet als usuaris integrar CPU i GPU en un sol fitxer.

El conjunt de funcions per a ROCm és ampli i incorpora suport multi-GPU per a la memòria virtual de gra gruixut, la capacitat de processar concurrència i preempció, senyals HSA i atòmics, DMA i cues en mode d’usuari. També ofereix un carregador estandarditzat i formats d’objecte de codi, suport de compilació dinàmica i fora de línia, operació P2P multi-GPU amb suport RDMA, API de rastreig i recopilació d’esdeveniments i API i eines de gestió del sistema. A més d’això, hi ha un ecosistema de tercers que creix distribucions personalitzades de ROCm per a qualsevol aplicació en una multitud de sabors de Linux.

Conclusió

Aquest article és només una visió general senzilla de la plataforma CUDA de NVIDIA i la pila de programari ROCm d’AMD. Podeu trobar informació detallada, incloses guies, explicacions, biblioteques i molt més, als seus respectius llocs web enllaçats més amunt.

No hi ha cap plataforma superior en l’àmbit de la informàtica paral·lela; cadascuna proporciona un sistema excel·lent per al desenvolupament fàcil d’aplicacions en diverses indústries. Tots dos també són fàcils d’utilitzar amb menús intuïtius, elements de navegació, documentació accessible i materials educatius per a principiants.

Leave a Comment

Your email address will not be published. Required fields are marked *