ROCm

ROCm (Radeon Open Compute platform) on Advanced Micro Devices (AMD) tarkvaralahenduste kogum graafikaprotsessori (GPU) programmeerimiseks. See hõlmab mitmeid valdkondi, sealhulgas üldotstarbeline andmetöötlus graafikaprotsessoritel (GPGPU), suure jõudlusega andmetöötlus (HPC) ja heterogeenne andmetöötlus.

ROCm võimaldab kasutada mitmesuguseid programmeerimismudeleid: HIP (GPU kernelipõhine programmeerimine), OpenMP liides (MPI) (direktiivipõhine programmeerimine) ja OpenCL (raamistik heterogeensete ehk eri tüüpi protsessoreid sisaldavate süsteemide programmeerimiseks).

ROCm-i kasutatakse nii suure võimsusega andmetöötluses, tehisintellektisüsteemides, teadusarvutustes ning raalprojekteerimises (CAD).[1]

AMD (varem ATI) esimene tarkvaralahenduste pakett oli Close to Metal (CTM), millest kasvas välja Streami tarkvaraarenduskomplekt.

CTM andis arendajatele ligipääsu graafikaprotsessori paralleelsete arvutuselementide käsustikule ja mälule. CTM läks mööda graafikakesksetest DirectX ja OpenGL rakendusliidestest ning lasi arendajatel vahetult kontrollida stream-protsessorite, aritmeetika-loogika elementide ning mälukontrollerite tööd. CTM järglane Stream toodi turule 2007. aastal. Stream sisaldas ka kõrgema tasema tööriistu utiliseerimaks AMD graafikaprotsessorite riistvara.

2008. aastal teatas AMD, et loobub CTM platformi arendamisest ja hakkab toetama vabavaralisi DirectX11 ning OpenCL platforme. AMD madalatasemeline lähenemisviis oli üks põhjuseid, miks paljud arendajad olid hakanud eelistama nVidia CUDA raamistikku. [2] Streamist sai sujuvalt AMD APP (Accelerated Parallel Processing) tarkvaraarenduskomplekt [3], kuid ka selle ametlik toetamine lõpetati mõned aastad hiljem, kui tuldi välja ROCm'iga.

ROCm toodi välja 2016. aastal [4] koos Boltzmanni initsiatiiviga [5]. ROCm stack põhineb varasematel AMD GPU stackidel, millest mõned pärinevad GPUOpenist, teised aga Heterogeneous System Architecture'ist (HSA).

OpenCL on raamistik, et käitada programme keskprotsessoritest, graafikaprotsessoritest, digitaalsetest signaaliprotsessoritest, FPGA-dest ning teistest protsessoritest või tarkvarakiirenditest. OpenCL sätestab programmeerimiskeele (C99, C++14 või C++17), mida seadmete programmeerimiseks kasutada ning rakendusliidesed, et käitada eelpoolmainitud seadmetel programme. OpenCL sisaldab standardset liidest paralleelarvutuste teostamiseks nii ülesande- kui ka andmepõhiselt.

OpenCLi töötas algselt välja Apple, see toodi turule 2009. aastal koos Mac OS X Snow Leopardiga. Praegu arendab seda mittetulunduslik tehnoloogiakonsortium Khronos Group, mille asutajateks olid näiteks ATI (praegu AMD) ja Intel. Hiljuti on Khronos ratifitseerinud ka SYCLi, kõrgema taseme programmeerimismudeli OpenCL-i jaoks, mis baseerub C++17-l, et tõsta koodi kirjutamise produktiivsust. Raamistiku viimane suurem uuendus, OpenCL 3.0 toodi välja 2020. aasta sügisel.[6]

OpenCL kasutab neljatasemelist mälu hierarhiat:

  • globaalne mälu: jagatud kõikide protsessorite vahel, kuid suure latentsusega
  • püsimälu: kirjutatav vaid host keskprotsessori poolt, kuid väikese latentsusega
  • lokaalne mälu: jagatud protsessorite rühma vahel
  • privaatmälu: ühe protsessori poolt ligipääsetav mälu

Üks OpenCLi tähtsamaid karakteristikuid on porditavus, mis saavutatakse läbi abstraktse mäluhalduse ja käivitusreegilistku (execution model). Samas ei pruugi jõudlus pärast portimist olla enam rahuldav, alternatiividega võrreldava jõudluse saavutamiseks on siiski vaja koodi riistvara-spetsiifiliselt optimeerida. 2011. aasta Delfti ülikooli uurimistöö käigus leiti, et CUDA programmide otsene implementatsioon OpenCLis on keskeltläbi 30% aeglasem, kuid pärast optimeerimist üpriski võrdväärne. [7]

OpenCL suudab ülesandeid jaga kesk- ja graafikaprotsessori vahel, mis tähendab, et arendajad saavad optimeerida tööjaotust vastavalt kummagi protsessori tugevustele. On uuritud masinõppe kasutamist jaotuse teostamiseks, et vältida optimeerimist programmide käitamise kaudu [8].

HSA ehk Heterogeneous System Architecture (heterogeenne süsteemi arhitektuur) on tootjateülene spetsifikatsioonikogum, mis võimaldab integreerida keskprotsessori ja graafikaprotsessori samale siinile, jagades mälu ning ülesandeid. Platformi eesmärk on vähendada suhtluse latentsust keskprotsessori ja teiste arvutusseadmete (eelkõige graafikaprotsessorite) vahel.

CUDA ja OpenCL toetavad HSA kasutamist, suurendamaks süsteemi võimekust. Algselt tuli HSA kasutusele manussüsteemides (PowerPC Cell, kasutati näiteks Playstation 3-es). Heterogeenne arvutamine on laialt kasutuses ühe kiibi süsteemides (nutiseadmed, mängukonsoolid). HSA lubab rakendustel kasutada graafikaprotsessorit ilma eraldi mäluta või ilma ressursijaotuseta. [9]

HSA võimaldab igal süsteemi arvutusseadmel töötada protsessoriga samal tasandil, HSA defineerib kõikide süsteemi arvutusseadmete jaoks ühtse virtuaalse aadressiruumi. HSA käsib seadmetel jagada oma virutaalmälu lehekülgesid, et seadmed saaksid viitasid jagades andmeid vahetada. HSA on loodud olema käsustiku suhtes ükskõikne ning toetama ka kõrgtaseme programmeerimiskeeli. [10]

Juurdepääs mälule ilma HSA-ta ja HSA-ga

GPUOpen on AMD poolt arendatav tarkvarapakett, mis on eelkõige suunatud arvutimängude visuaalefektide väljatöötamiseks, kuid see leiab kasutust ka teadusarvutustes. nVidia vastav tarkvarapakett on nVidia GameWorks. Erinevalt GameWorksist on GPUOpen aga osaliselt vabavaraline, AMD tahab sellega soosida tarkvara porditavust. [11]

GPUOpeni peamised komponendid on

  • TressFX
  • GeometryFX
  • DepthOfFieldFX
  • ShadowFX
  • FidelityFX

FidelityFX Super Resolution

[muuda | muuda lähteteksti]

FidelityFX Super Resolution (FSR) on tarkvaralahendus, mis võimaldab sisendpilti skaleerida kõrgema lahutusvõimega pildiks. FSR-i algse versiooniga tuldi välja 2021. aastal. FSR on täielikult vabavaraline.

FSR 1 on kaadriinformatsioonil põhinev skaleerija, mis kasutab Lanczose algoritmi. Kaadris kuvatavate objektide piirjoonte tuvastamiseks arvutatakse gradiendid ja võrreldakse neid naabergradientidega. Selle põhjal rekonstrueeritud pikslitele rakendatavad kaalud. FSR 1 rakendatakse kaadrile, millel on juba kasutatud sakitõrjet (inglise k anti-aliasing) ja toonikaardistamist (inglise k tone-mapping) ehk laia dünaamilise ulatusega kaader on kompressitud kuvaril kuvatava ulatusega kaadriks, samal ajal säilitades maksimaalselt detailsust.[12]

FSR 2 kasutab skaleerimisel samuti Lanczose algoritmi, kuid kasutab lisaks skaleeritavale kaadrile ka nihkevektoreid ja informatsiooni eelnevatest kaadritest. FSR 2 on nõudlikum kui FSR 1, samuti vajab see eraldi rakendusepoolset tuge. FSR 2 rakendatakse ajalise sakitõrje asemel (inglise k temporal anti-aliasing). Kõiki efekte, mis vajavad sügavuspuhvri andmeid tuleks rakendada enne FSR 2. [13]

FSR 3 võimaldab parandada pilti (rakendada sakitõrjet) ka lahutusvõimet suurendamata, lisaks on see versioon võimeline genereerima arvutuslikult uusi kaadreid (inglise k frame generation). Vältimaks liigset artefaktide teket, soovitab AMD kasutada kaadrite genereerimist vaid suurematel kaadrisagedustel kui 60. Siiski põhjustab kaadrite genereerimine paratamatult latentsust. Selle leevendamiseks on AMD loonud draiveri-tasemel tarkvara, Anti-Lag, kuid see töötab vaid AMD graafikaprotsessoritega.[14]

Riistvaraline ühilduvus

[muuda | muuda lähteteksti]

ROCm on peamiselt suunatud diskreetsetele tööjaama graafikaprotsessoritele, kuid mitteametlikult on toetatud ka Vega ja RDNA perekondade tavakasutajatele suunatud graafikaprotsessorid [15]. ROCm töötab keskprotsessoritega, mis toetavad PCIe atomics käske ehk näiteks AMD protsessorid alates esimese generatsiooni Zen perekonnast ja Inteli protsessorid Haswelli perekonnast.

Võimalused ja ühilduvus kolmandate osapoolte tarkvaradega

[muuda | muuda lähteteksti]

ROCmi kasutusala ulatub kerneli tasemel draiveritest kuni lõpp-kasutajale loodud rakendusteni. AMD on loonud tutvustavaid videoid ROCm tööriistadega programmeerimisega alustamiseks.

ROCm on sobilik teadusarvutuste rakendusteks, mis nõuavad suurt arvutusvõimsust ja mälumahtu. Seda kasutatakse laialdaselt sellistes valdkondades nagu molekulaardünaamika, kliimamodelleerimine ja astronoomia. Samuti saab ROCm-i kasutada ka visuaaltöötlusrakenduste jaoks, näiteks 3D-renderdamise ja graafiline disain. ROCm on ka hea valik andmeteaduse rakendusteks, mis hõlmavad masinõppe ja keeletöötluse ülesandeid.

Mitmed masinõppe raamistikud toetavad ROCm'i back-end-is, näiteks:

  • PyTorch
  • TensorFlow
  • ONNX
  • MXNet
  • CuPY
  • MIOpen
  • Caffe
  • Iree
  • LLaMA

GPU riistvarakiirendust kasutavad ROCm tarkvara toetavad rakendused on leitavad AMD kodulehelt [16]. Näiteks 3D-graafika tarkvara Blender toetab HIP arvutuskerneleid renderdamiseks [17]. Samuti on ROCm-OpenCL kasutatav DaVinci Resolve videotöötlustarkvaraga.

Ülesehitus

[muuda | muuda lähteteksti]

ROCm koosneb paljudest riistvaraga eri tasemel suhtlevatest komponentidest. Lihtsustatult võib need liigitada kolmeks.

Riistvaralähedased komponendid

[muuda | muuda lähteteksti]
  • ROCk – kerneli draiver
  • ROCm – seadme teegid
  • ROCt
  • ROCr
  • ROCm kompilaatori tugi

Keskmise taseme komponendid

[muuda | muuda lähteteksti]
  • ROCclr (Common Runtime Language)
  • OpenCL
  • HIP (Heterogeneous Interface for Portability)
  • HIPCC
  • HIPIFY
  • GPUFORT

Kõrgema taseme komponendid

[muuda | muuda lähteteksti]
  • rocBLAS & hipBLAS – AMD implementatsioon BLASi jaoks (Basic Algebra Subprograms)
  • rocSOLVER & hipSOLVER – LAPACKi (Linear Algebra Package) implementatsioon ROCm'i jaoks

Võrdlus alternatiividega

[muuda | muuda lähteteksti]

ROCm'i peamisteks alternatiivideks on nVidia arendatav CUDA ja Inteli algatatud OneAPI (UXL).

Erinevalt ROCm-ist ei ole CUDA avatud lähtekoodiga, kuigi CUDA baasil on kirjutatud avatud lähtekoodiga tarkvara. Samas on CUDA-l aga parem tugi tavakasutajatele suunatud GPU-de hulgas, ROCm-i tugi on suunatud eelkõige AMD Radeon Pro seeria graafikakaartidele ja AMD Instinct seeria masinõppeks loodud moodulitele. Praegu loetakse sektoris CUDA-t vaikimisi standardiks, kuid arendajad on väljendanud pahameelt nVidia tarkvara suletuse ja riistvarapiirangute üle.

ROCm-i puudujääkideks võrreldes CUDA-ga peetakse komponentide killustatust ja dokumentatsiooni puudulikust. Samuti on testimisel leitud, et ROCm on umbes 40% aeglasem kui CUDA (tulemused võivad olla kallutatud, sest testimisel kasutati nVidia graafikaprotsessorit)[18]. Teine suur puudujääk võrreldes CUDA-ga on ühtse käsustiku puudumine. NVidia CUDA pakett töötab peaaegu kõigil nVidia graafikaprotsessoritel, sest PTX (Parallel Thread Execution) suudab tõlkida koodi ühtsest käsustikust masinkoodi. AMD ROCm-i puhul tuleb aga teise graafikaprotsessori tarvis masinkood uuesti kompileerida.

Intel OneAPI (UXL)

[muuda | muuda lähteteksti]

Sarnaselt ROCm-iga on ka OneAPI avatud lähtekoodiga ning kättesaadav GitHubi keskkonnas. UXL on tehnoloogiakonsortsium, mille eesmärgiks on edasi arendada OneAPI-l põhinevat tarkvara võistlemaks nVidia CUDA-ga. Konsortsiumi taga on mitmed tehnoloogiahiiud: Intel, Google, ARM, Qualcomm, Samsung, Imagination, VMware.[19]

Vabavaraline ZLUDA portimistarkvara võimaldab kasutada CUDA tarkvarapaketi jaoks kirjutatud programme graafikaprotsessoril läbi AMD ROCm paketi. Kohati on võimalik saavutada otse CUDA peal jookustatavate masinatega sarnast jõudlust. [20]

  1. AMD, "AMD ROCm Software", 2024, https://github.com/ROCm/ROCm?tab=readme-ov-file
  2. T. Valich, 2008, "AMD Ditches Close-To-Metal, Focuses On DX11 And OpenCL", https://www.tomshardware.com/news/AMD-stream-processor-GPGPU,6072.html
  3. AMD, "APP SDK", 2013, https://web.archive.org/web/20140701140057/http://developer.amd.com/tools-and-sdks/opencl-zone/opencl-tools-sdks/amd-accelerated-parallel-processing-app-sdk/
  4. R. Smith, "AMD @ SC16: Radeon Open Compute Platform (ROCm) 1.3 Released, Boltzmann Comes to Fruition", 2016, https://www.anandtech.com/show/10831/amd-sc16-rocm-13-released-boltzmann-realized/
  5. R. Smith, "AMD @ SC15: Boltzmann Initiative Announced - C++ and CUDA Compilers for AMD GPUs", 2015, https://www.reuters.com/technology/behind-plohttps://www.anandtech.com/show/9792/amd-sc15-boltzmann-initiative-announced-c-and-cuda-compilers-for-amd-gpus
  6. Khronos, "OpenCL", https://www.khronos.org/opencl/
  7. J. Fang, A. L. Varbanescu, H. Sips, "A Comprehensive Performance Comparison of CUDA and OpenCL", IEEE International Parallel and Distributed Processing Symposium, 28, 2014
  8. D. Grewe, M. F. P. O'Boylr, "A Static Task Partitioning Approach for Heterogeneous Systems Using OpenCL", Lecture Notes in Computer Science, 6601, 2011
  9. J. Hruska, "Setting HSAIL: AMD explains the future of CPU/GPU cooperation", 2013, https://www.extremetech.com/gaming/164817-setting-hsail-amd-cpu-gpu-cooperation
  10. G. Kyriazis, "Heterogeneous System Architecture: A Technical Review", AMD, 2012, https://web.archive.org/web/20140328140823/http://amd-dev.wpengine.netdna-cdn.com/wordpress/media/2012/10/hsa10.pdf
  11. C. Angelini, "AMD GPUOpen: Doubling Down On Open-Source Development", 2015, https://www.tomshardware.com/news/amd-gpuopen-open-source-development,30750.html
  12. AMD, "FidelityFX Super Resolution 1", https://gpuopen.com/fidelityfx-superresolution/
  13. AMD, "FidelityFX Super Resolution 2", https://gpuopen.com/fidelityfx-superresolution-2/
  14. R. Leadbetter, "AMD reveals long-awaited FSR 3 tech and frame gen for every DX11/DX12 game", 2023, https://www.eurogamer.net/digitalfoundry-2023-amd-reveals-long-awaited-fsr-3-tech-and-frame-gen-for-every-dx11dx12-game
  15. AMD, "Compability Matrices", https://rocm.docs.amd.com/projects/radeon/en/latest/docs/compatibility.html
  16. AMD, https://www.amd.com/system/files/documents/gpu-accelerated-applications-catalog.pdf
  17. Blender, https://www.blender.org/download/releases/3-0/
  18. 1kg, "CUDA vs ROCm: The Ongoing Battle for GPU Computing Supremacy", 2024, https://medium.com/@1kg/cuda-vs-rocm-the-ongoing-battle-for-gpu-computing-supremacy-82eb916fbe18
  19. M. A. Cherney, "Behind the plot to break Nvidia's grip on AI by targeting software", 2024, https://www.reuters.com/technology/behind-plot-break-nvidias-grip-ai-by-targeting-software-2024-03-25/
  20. M. Zuhair, "AMD GPUs Now Indirectly Support NVIDIA CUDA Libraries With ROCm Using ZLUDA", 2024, https://wccftech.com/amd-gpus-now-indirectly-support-nvidia-cuda-libraries-with-rocm-using-zluda/