» »

CUDA na splošno in zmogljivost

CUDA na splošno in zmogljivost

Dejan99 ::

Zdravo.

Za magistrsko nalogo s pomočjo genetskih algoritmov optimiziram neko vrsto skupinskega obnašanja (collective behaviour). Zadevo imamo napisano v c++, ki je paralelizirano s pomočjo OpenMP. V trenutni situaciji uporabljam i7 z 8 threadi in 2x xeon z 12 threadi (24 skupno) ločeno. Imam problem, da se kljub vsem paralelizacijam in ostalim optimizacijam vse skupaj izvaja precej počasi, recimo za eno kompletno evolucijo porabim od 7 do 9 ur, odvisno kateri cpu uporabljam. Trenutno imam toliko različnih kombinacij za poskusiti, da lahko zadeva teče več kot 1 mesec. Algoritem, ki ga uporabljam je mogoče brez težav porazdeliti tudi na 100 cpu-jev (100 core i7 @ 3,5ghz bi bil super :)). Razmišljal sem, da bi zadevo prepisal v cudo, na voljo imam 2x tesla k40 in pri sebi gtx 780. Zanima me, če ima kdo že kakšne izkušnje z paralelizacijo genetskih algoritmov na cudo, kakšne so pohitritve in s kakšnimi omejitvami se lahko srečam (če sploh so). Če bi prišli do 5x pohitritve bi bilo super. Zanimajo me predvsem lastne izkušnje. Hvala.

Lp.

ragezor ::

Ja ce lahko na easy paraleliziras algoritem bo GPU precej velika pohitritev saj ma grafa par tisoc threadov, ki se izvajajo naenkrat. Za koliko pa je odvisno od veliko faktorjev.

Probaj malo prirediti svoj trenutni program, da bo tekel na GPUju in ce vidis pohitritev ga optimiziraj naprej. Pa dobro je vedeti, da je vredno zrtvovati stevilo threadov (itak mas jih dovolj), da zoptimiziras memory access.

pegasus ::

Oglasi se na hpc.arctur.si, bomo gotovo kaj skupaj natuhtali.

terryww ::

a noben od stotih libov ni zadosten?
It is the night. My body's weak.
I'm on the run. No time to sleep.

krneki0001 ::

Sam sem se igral in z genetskim algoritmom reševal sudoku in trgovskega potnika na CUDA procesorjih.
Zadeva deluje. Kode pa na žalost nimam več.
Asrock X99 Extreme 4 | Intel E5-2683V4 ES | 64GB DDR4 2400MHz ECC |
Samsung 250GB M.2 | Asus 1070 TI | 850W Antec | LC Tank Buster

pegasus ::

Naj še kdo OpenCL pohvali - napišeš enkrat, teče na cpu, gpu, fpga. Plus HSA bombončki na ustreznem hardveru, ki jih na cudi zares še nekaj časa ne bo (softverski del je že pripravljen).

zee ::

Molekulska dinamika na CUDA leti ko sneta sekira. Vsaj 3-5x hitreje kot samo na CPUjih.
zee
Linux: Be Root, Windows: Re Boot
Giant Amazon and Google Compute Cloud in the Sky.

ragezor ::

pegasus je izjavil:

Naj še kdo OpenCL pohvali - napišeš enkrat, teče na cpu, gpu, fpga. Plus HSA bombončki na ustreznem hardveru, ki jih na cudi zares še nekaj časa ne bo (softverski del je že pripravljen).


kakor dobro se slisi, da tece vsepovsod je v realnosti najboljse, da pises kodo prav za hardware na katerem bos izvajal.

fujtajksel ::

Kako pa je kej v današnji oblačni dobi za tovrstne namene računica z najemom clustra?
Pa ima kdo kakšen pameten link na instant kriterije al je boljše it na ta velke proce al na GPU oz neko preglednico s primerjavo zmogljivosti tipičnih kartic? Okvirno se mi nekej sanja da so ta velki močnejši za FP računanje in da imajo zraven več cachea, ta mali pa imajo veliko več jeder...

zee ::

Odvisnoza kaj rabis, od kode, problema...

Kar je dobro zame racunskega biokemika, je lahko povsem neuporabni za nekoga, ki se ukvarja s cisto racunsko/kvantno kemijo.
zee
Linux: Be Root, Windows: Re Boot
Giant Amazon and Google Compute Cloud in the Sky.

66speeder66 ::

Ima kdo primerjavo v performansu na CUDI, recimo en thread na GPU-ju in en CPU, od oddane zahteve do izvedbe.

Tak sistem je kul samo za določene taske, ki ne zahtevajo preveč premikanj med GPU in CPU pomnilnikom. Ker pa programi/kalkulacije niso vedno najboljše izključno samo na GPU-ju ali na CPU-ju, temveč so velikokrat mešanica obeh svetov, so po mojem APU-ji še najboljša stvar. Tukaj pa OpenCL in AMD apu-ji blestijo.

pegasus ::

ragezor je izjavil:

kakor dobro se slisi, da tece vsepovsod je v realnosti najboljse, da pises kodo prav za hardware na katerem bos izvajal.
Kar pride v poštev samo takrat, ko rabiš absolutne performance. V realnem svetu je bottleneck programer in portanje kode iz enega čudnega hardvera na drugega, zato so "write once" rešitve zelo zaželjene. Kar poglej javo ;)

fujtajksel je izjavil:

Kako pa je kej v današnji oblačni dobi za tovrstne namene računica z najemom clustra?

Zelo dobra, pomisleki so pri strankah, ki so jim take zadeve ključen R&D in jih zato razumljivo skrbi varnost celote.

Pa ima kdo kakšen pameten link na instant kriterije al je boljše it na ta velke proce al na GPU oz neko preglednico s primerjavo zmogljivosti tipičnih kartic?
Case by case. Predvsem moraš najprej dobro razumeti potrebe aplikacije, da znaš svetovati najbolj primeren hardver znotraj nekega budgeta.

zee je izjavil:

Odvisnoza kaj rabis, od kode, problema...

Kar je dobro zame racunskega biokemika
A nimate biokemiki custom mašine "Anton"? ;) Nekaj sem že bral o dizajnu za Anton-2 ...

Zgodovina sprememb…

  • spremenil: pegasus ()

fujtajksel ::

Vem da je odvisno. Vem da se da tudi izgugljat. Npr
General-purpose computing on graphics processing units @ Wikipedia
http://www.eecs.berkeley.edu/~sangjin/2...
Je pa problem da z gugljem na hitro najdeš veliko solate, jaz pa prosim koga da bi pripel kakšno čimbolj uporabno referenco na to temo (seveda tudi na temo izbire GPU in programerskega okolja za GPU kot je začel OP).

ragezor ::

66speeder66 je izjavil:

Ima kdo primerjavo v performansu na CUDI, recimo en thread na GPU-ju in en CPU, od oddane zahteve do izvedbe.

Tak sistem je kul samo za določene taske, ki ne zahtevajo preveč premikanj med GPU in CPU pomnilnikom. Ker pa programi/kalkulacije niso vedno najboljše izključno samo na GPU-ju ali na CPU-ju, temveč so velikokrat mešanica obeh svetov, so po mojem APU-ji še najboljša stvar. Tukaj pa OpenCL in AMD apu-ji blestijo.


thread vs thread zmaga seveda cpu

ampak sploh nevem zakaj te zanima tale primerjava, ker bistvo GPUja je v paralelizaciji. pa seveda lahko kombiniras CPU in GPU v CUDA programih.

pegasus ::

66speeder66 je izjavil:

Ima kdo primerjavo v performansu na CUDI, recimo en thread na GPU-ju in en CPU, od oddane zahteve do izvedbe.
En thread? Se hecaš? En thread je cpu neprimerljivo hitrejši. Moč GPUjev je ravno v tem, da lahko naekrat furaš nekaj tisoč threadov.

Tak sistem je kul samo za določene taske, ki ne zahtevajo preveč premikanj med GPU in CPU pomnilnikom. Ker pa programi/kalkulacije niso vedno najboljše izključno samo na GPU-ju ali na CPU-ju, temveč so velikokrat mešanica obeh svetov, so po mojem APU-ji še najboljša stvar. Tukaj pa OpenCL in AMD apu-ji blestijo.
Da. CUDA se bo lahko znebila memory copy šele na power8 strojih z nvlinkom, medtem ko na namiznem kaveriju to dobiš že danes.

Če gledaš nvidia in intel tutoriale, se vsi močno fokusirajo na primere, kjer lahko problem v celoti poženeš na gpuju (oz. phiju), imaš samo en copy podatkov na accelerator in drug copy rezultatov nazaj dol. Ja, marsikaj se da tako rešit, a to ni univerzalna rešitev za vse.

Glede na to, da nvidia sedaj strašno pusha "deep learning" na gpujih, kjer so del zgodbe tudi genetski algoritmi, verjamem, da bo Op našel dovolj že izdelanih knjižnic ali vsaj odprtokodnih primerov za njegov primer.

Zgodovina sprememb…

  • spremenil: pegasus ()

66speeder66 ::

Ja en thread. Problem? Vem, da je precej hitrejši ampak vseeno. Se da dobiti podatke v tem stilu?

Senitel ::

Če pogledaš i7 4790k teče pri 4GHz in mulss ima latency 5 clockov. GeForce Titan X teče na 1GHz in ima mul latency 6 clockov. V štartu bo torej CPU več kot 4x hitrejši. Za začetek.

Randomness ::

Če pogledaš i7 4790k teče pri 4GHz in mulss ima latency 5 clockov.
Verjetno si mislil mulps in bolj kot latency te zanima throughput, ki meri 0.5 cikla na Haswell arhitekturi.

Zgodovina sprememb…

Dejan99 ::

Ste se pa razpisali. No odločil sem se, da zadevo poskusno prepišem v Cudo. Algoritem lahko s trenutno konfiguracijo porazdelim na 500 threadov.

@pegasus: Uporaba super računalnika je res tempting, vendar zaenkrat bom poskusil s Cudo.

Lp.

Senitel ::

500 threadov je zelo malo za GPU. To ti ne bo zafilalo GTX 780 "by a long shot". Imaš povsem custom kodo ali lahko uporabljaš kakšen že obstoječ library?

Randomness je izjavil:

Če pogledaš i7 4790k teče pri 4GHz in mulss ima latency 5 clockov.
Verjetno si mislil mulps in bolj kot latency te zanima throughput, ki meri 0.5 cikla na Haswell arhitekturi.

Ne v bistvu sem mislil kar mulss. Ker je pogoj "en thread", se mi zdi za začetek primerjava enega enostavnega single precision float množenja na mestu. Ja, v bistvu te bolj zanima throughput ampak potem prideš v še bolj ekstremno primerjavo. Jasno imaš na CPU potem mulps in CPU bo iz enega threada lahko izvajal več inštrukcij (kot si omenil dva neodvisna mulps torej throughput 0.5), ki bodo razliko prevagali še bolj v korist CPU-ja.
Po drugi strani jo pa lahko prevagaš tudi v drugo stran in če imaš vsaj 18432 mul-ov, ki jih bo Titan X lahko mlel praktično sočasno, bo single threaded prednost CPU-ja skopnela hitreje kot lahko rečeš keks...

Dejan99 ::

Senitel je izjavil:

500 threadov je zelo malo za GPU. To ti ne bo zafilalo GTX 780 "by a long shot". Imaš povsem custom kodo ali lahko uporabljaš kakšen že obstoječ library?

Koda je več ali manj custom, uporabljam samo en matematičen library (GLM) za simulacijo (računanje z vektorji, etc). Vidim, da imam na voljo cca. 2300 cuda cores. Načeloma bi lahko vzporedno izvajal enake eksperimente, ker moram v vsakem primeru narediti vsaj 10 ponovitev.

Randomness ::

Po drugi strani jo pa lahko prevagaš tudi v drugo stran in če imaš vsaj 18432 mul-ov, ki jih bo Titan X lahko mlel praktično sočasno, bo single threaded prednost CPU-ja skopnela hitreje kot lahko rečeš keks...
Se strinjam.

Senitel ::

Dejan99 je izjavil:

Koda je več ali manj custom, uporabljam samo en matematičen library (GLM) za simulacijo (računanje z vektorji, etc). Vidim, da imam na voljo cca. 2300 cuda cores. Načeloma bi lahko vzporedno izvajal enake eksperimente, ker moram v vsakem primeru narediti vsaj 10 ponovitev.

Ne razmišljat, da rabiš 2304 threadov. Da boš res zapolnil GPU boš potreboval 14000+ threadov (in potem imam že vprašanje, če bo 3GB dovolj? :)).

pegasus ::

Op, preden se zgubiš v vendor specific rešitvah, si oglej vsaj še OpenMP 4.0 in OpenACC.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

C++/CUDA - vprašanje

Oddelek: Programiranje
111409 (1111) srus
»

ARM dobil 64 bitov (strani: 1 2 )

Oddelek: Novice / Procesorji
5118483 (12437) trnvpeti
»

AMD je predstavil novi zverini

Oddelek: Novice / Grafične kartice
4919772 (17295) Nummy
»

Napovedan prevajalnik CUDA C za x86

Oddelek: Novice / Procesorji
154725 (3646) noraguta
»

Nvidia zanika podkupovanje razvijalcev iger (strani: 1 2 )

Oddelek: Novice / Grafične kartice
5818589 (16973) Bor H

Več podobnih tem