AMD oversætter Nvidias supercomputer-trick til C++ og AMD's gpu'er

14. december 2016 kl. 13:237
Nvidias CUDA har gjort Nvidias gpu'er til fast inventar i supercomputere, men nu får AMD's mulighed for at komme med i kapløbet.
Artiklen er ældre end 30 dage
Manglende links i teksten kan sandsynligvis findes i bunden af artiklen.

AMD har for nylig frigivet version 1.0 af et værktøj, der kan give AMD lidt af det tabte terræn tilbage inden for HPC, high performance computing. Her har Nvidia haft en fordel takket være CUDA, der har gjort det nemmere at skrive kode, der udnyttede Nvidias grafikprocessorer til tunge udregninger.

Derfor har mange af de største supercomputere i dag grafikkort fra Nvidia, men i løbet af 2016 har AMD arbejdet på værktøjet HIP.

HIP kan bruges til at oversætte kode skrevet til CUDA til C++. CUDA fungerer som et ekstra lag, der kan bruges sammen med C, C++ og Fortran, som skal oversættes til CUDA.

AMD's HIP går i meget overordnede træk den anden vej og kan oversætte eksisterende CUDA-kode til C++. Det betyder, at man kan arbejde i ren C++ hele vejen i forløbet, hvis man ønsker det.

Artiklen fortsætter efter annoncen

Fordelen for AMD er imidlertid, at den resulterende C++ kode kan afvikles på både Nvidias og AMD's grafikprocessorer. Det kan lade sig gøre, fordi begge hardwareplatforme understøtter OpenCL. I princippet kunne man derfor blot skrive i OpenCL, men CUDA er på få år blevet det foretrukne redskab, så for at bygge videre på dét arbejde, har AMD altså udviklet HIP.

Samtidig kan man altså skrive al sin kode i C++ og dermed udnytte nogle af de funktioner og biblioteker, som CUDA mangler understøttelse for.

Der er tale om et open source-redskab, som stadig er under udvikling, og man skal ifølge AMD være forberedt på at skulle lave visse finjusteringer af sin CUDA-kode for at opnå optimal ydelse.

7 kommentarer.  Hop til debatten
Denne artikel er gratis...

...men det er dyrt at lave god journalistik. Derfor beder vi dig overveje at tegne abonnement på Version2.

Digitaliseringen buldrer derudaf, og it-folkene tegner fremtidens Danmark. Derfor er det vigtigere end nogensinde med et kvalificeret bud på, hvordan it bedst kan være med til at udvikle det danske samfund og erhvervsliv.

Og der har aldrig været mere akut brug for en kritisk vagthund, der råber op, når der tages forkerte it-beslutninger.

Den rolle har Version2 indtaget siden 2006 - og det bliver vi ved med.

Debatten
Log ind eller opret en bruger for at deltage i debatten.
settingsDebatindstillinger
7
15. december 2016 kl. 14:19

Iøvrigt, når man kan køre OpenCL opgaver på low-power FPGA'er, er AMD GPU'ere så overhovedet interessante til OpenCL?

FPGA'er er i forhold til GPUer væsentligt dyrere at anskaffe, ikke lige så udbredte, ikke lige så fleksible, og ikke velegnede til samme typer opgaver. F.eks. har GPUer større og hurtigere arbejdslager end du selv kan syntetisere på en FPGA. En FPGA er primært smart hvis du kan formulere dit problem som en meget lang pipeline, med kommunikation i registre. Derudover tager det enormt lang tid at syntetisere et FPGA-layout, uanset om kildeteksten er i OpenCL eller VHDL.

5
15. december 2016 kl. 08:39

Hvis du bygger en supercomputer med AMD-komponenter, så lur mig om ikke du også kan få AMD til at levere en ordentlig driver. Det er jo OpenGL-delen af driveren der er virkelig kompliceret, og den er ikke vigtig her. En fornuftig OpenCL-driver er ikke lige så svær at lave. Min erfaring med GPGPU på Linux er at AMD er en anelse nemmere at have med at gøre.

At NVIDIA til tider er hurtigere end AMD skyldes nok bare at deres hardware er bedre. NVIDIAs OpenCL-understøttelse er ikke så dårlig som folk som regel går og siger - de bruger jo samme kodegenerator som til CUDA. Problemet med NVIDIAs OpenCL-understøttelse er at de kun understøtter ældre udgaver, og at deres mere avancerede udviklingsværktøjer slet ikke understøtter det.

4
14. december 2016 kl. 21:58

Derefter forsvinder historien ind i AMDs labyrint af forladte projekter og forvirrende forkortelser.

De fleste super computere kører alligevel Linux og AMD/Radeon har desværre aldrig rigtigt leveret hverken opensource eller proproetære drivere til Linux som var ret meget værd. De sidste benchmarks jeg har set på Phoronix viste at Nvidia outperformede AMD på OpenCL opgaver. Så er det ikke så underligt at AMD ikke bliver valgt til super computerene.

3
14. december 2016 kl. 19:57

Men det må jo så være fordi de også har lavet et værktøj til at oversætte fra C++ til OpenCL. Men fremgår ikke rigtigt af artiklen.

Nej, det er et værktøj til at lave (semi-)automatisk oversættelse af CUDA C++ (en dialekt af C++ med nogle NVIDIA GPU-udvidelser) til HIP, som er en anden C++-dialekt med nogle andre GPU-udvidelser[0]. Det er ikke en oversættelse til ren OpenCL.

Et værktøj som dette er af kritisk betydning for AMD, da langt det meste GPGPU-kode desværre er skrevet i CUDA C++.

Personligt synes jeg at det er helt hul i hovedet at bruge et sprog som C++ til en massivt parallel maskine, men det er åbenbart hvad folk vil have.

[0]: Det er lidt mere kompliceret. På en NVIDIA-platform kan HIP C++ omdannes til CUDA C++ med nogle headerdefinitioner, og på en AMD-platform kan det omdannes til noget der hedder HCC C++. Derefter forsvinder historien ind i AMDs labyrint af forladte projekter og forvirrende forkortelser.

2
14. december 2016 kl. 16:50

Hvis AMD rent faktisk har lavet et værktøj der kan lave optimerede oversættelser fra C++ til OpenCL vil det være noget af et scoop. Så det kunne være rart hvis det blev uddybet.

Det største problem ved at skrive optimeret kode til OpenCL og CUDA er jo netop at der skal lægges en del arbejde i at arrangere data og beregninger i en rækkefølge som passer med stream processesorene i et grafik kort. Selvom man har en opgave som umiddelbart er parallelliserbar er det jo ikke nødvendigvis sikkert at den også eksekveres optimalt på en GPU.

1
14. december 2016 kl. 16:29

CUDA fungerer som et ekstra lag, der kan bruges sammen med C, C++ og Fortran, som skal oversættes til CUDA.

Den sætning giver ikke rigtigt mening.

Fordelen for AMD er imidlertid, at den resulterende C++ kode kan afvikles på både Nvidias og AMD's grafikprocessorer. Det kan lade sig gøre, fordi begge hardwareplatforme understøtter OpenCL

Men det må jo så være fordi de også har lavet et værktøj til at oversætte fra C++ til OpenCL. Men fremgår ikke rigtigt af artiklen.

Samtidig kan man altså skrive al sin kode i C++ og dermed udnytte nogle af de funktioner og biblioteker, som CUDA mangler understøttelse for.

Men CUDA mangler jo ikke understøttelse da det er den foretrukne platform. Eller hur? Generelt virker denne artikkel som om at den er skrevet af en person der ikke har kendskab til problemstillingen.