üzenetek

hozzászólások


Enton
(addikt)
Blog

ÖÖÖ. Aham. Na majd ha lesz egy kis időm, akkor értelmezem, valahogy korán van még ehhez.
Végülis ez a példaprogi mit is akar csinálni, vagyis mit csinálna?


sghc_toma
(senior tag)
Blog

ezt csinalja a peldaprogi:

"... a BLAS csomag SAXPY függvényét fogjuk megvalósítani. A SAXPY fog két vektort, az elsőt megszorozza egy skalárral, majd az eredményt hozzáadja a második vektorhoz (y = a * x + y)."

konkretan veletlenszeruen general ket float vektort (x, y), meg egy float skalart (a), ezeket feltolti a VGA memoba, majd a GPU elvegzi rajtuk a SAXPY-t.. vegul visszaolvassa az eredmenyt a rendszermemoba, es osszehasonlitja egy CPU-s szamolas eredmenyevel..


DarkByte
(addikt)
Blog

Huh, csak érjek haza és elolvasom. Épp foglalkoztat a téma :K :R


tobal
(tag)
Blog

Köszi szépen az írást, fasza lett. Bár per pill nekem nincs rá szükségem, ha majd egyszer vmi számításigényes projectem lesz, biztos hasznát veszem.
Kérdés: nVidia kártyákkal is megy? Mert ugye nekik ott a CUDA, és nem tom, h adnak-e OpenCL támogatást. Köszi


pmheros
(senior tag)

Mély víz csak úszóknak ! :K


DarkByte
(addikt)
Blog

Az angol doksiba már bele futottam, de megint sikerült rájönnöm arra hogy ha valamit meg akarok csinálni, nem árt alaposan átgondolni hogyan is illeszthető rá az API -ra. Semmit sem ér a lineáris kód portolása egy az egyben, jól meg kell tudni fogni hol párhuzamosítható a feladat. Azt hiszem inkább ne akarjak nekifogni egyelőre a Vorbis kodeket portolni OpenCL -be. :D Egyébként Windows alatt lehet már használni OpenCL -t úgy hogy ki is használja a GPU -t? :F Laposban a GPU CUDA képes szóval talán van hozzá OpenCL illesztés, max. nem Windows -on.

[ Szerkesztve ]


Sanyix
(őstag)
Blog

Elvileg az ati és nvidia driver is tudja az opencl-t.

Én még asszem várok az opencl api-nak a mondjuk java-s apijára :D


sghc_toma
(senior tag)
Blog

tobal (#4): persze, megy nVidia-val, Macbook (Pro) -kban is nV kartyak vannak..
DarkByte (#6): Windows-os OpenCL tamogatasrol nem tudok semmit, mikor utoljara neztem, csak valami kiszivargott beta dolgok voltak..
Sanyix (#7): keszulget Java binding OCL-hez: [link].. btw, van .NET, es C++ wrapper is..


Elijah Baley
(tag)
Blog

Egészen értelmesnek hangzik" a dolog :D . Klassz cikk, még a végén hasznát is veszem :C


janos666
(nagyúr)
Blog

Nem akarod a kis tesztprogidat exeként is belökni? Viccből szívesen megnézném lefut-e, de ennyiért nincs kedvem felrakni egy fordítót, és legyártani...
Vagy windowson futót még nem tudsz csinálni az eddigi cuccokkal?

[ Szerkesztve ]


sghc_toma
(senior tag)
Blog

feltennem en, csak nem tudom foditani.. Windows-ra legjobb tudomasom szerint csak beta SDK-k vannak mind ATI, mind nVidia reszrol.. regisztralni kene, de nincs kedvem fel kilometeres regisztracios lapokat kitoltogetni :) ja, meg jelenleg csak virtualis gepen van Win-em, azt is telepiteni kene.. azert hetvegen lehet, hogy raszanom magam..


janos666
(nagyúr)
Blog

Hát ja, ezért nem akarom magamnak lefordítani (kivéve, hogy nekem dualbootban van win7 és ubuntu, semmi virtualizálás, és persze nincs semmi Mac még véletlen se)
Ha valaki megtette már, az linkelhetné. :D

[ Szerkesztve ]


viszta99
(tag)

HÁT VALAMI HASONLÓ !


JanR
(addikt)
Blog

Kegyetlen jo iras. Masodjara mar valamit meg is ertettem belole :D
De ha hazaerek, meg parszor alaposabban atolvasom!
Koszi :R


tlac
(nagyúr)

ez kedvcsinálónak tényleg nagyon jó, kár, hogy most nincs rá szükségem :)

részletesen nem olvastam át, de nem láttam, hogy írtál volna róla, hogy vannak ezek a compute unit-ok, ezek milyen műveletekre képesek vagy mennyit lehet belőlük elérni?
úgy tudom, hogy az nvidia-nál és ati-nál különbözőek a felépítésük, az ati-nál sokkal több van, de egyszerűbbek, ezek a különbségek hogyan vannak kezelve opencl-ben?


sghc_toma
(senior tag)
Blog

JanR (#14): kosz szepen!

tlac (#15):
jo, hogy kerdezted ezt a dolgot, mert egy kicsit elcsesztem a cikkben.. mentsegemre legyen szolva, hogy az Apple doksiban is el van rontva, illetve az OpenCL eszkoz infokat lekerdezve is rossz adatokat kapok..

a cikkben ezt irtam a Compute Unit-okrol:
Az OpenCL eszköz (device) az a hardver, amin a párhuzamos feldolgozás történik. Ezekben a hardverekben több, úgynevezett számolási egység (compute unit) van - tulajdonképpen ezek hajtják végre az utasításokat. Például egy videokártya minden stream processzora, és egy CPU minden magja is egy számolási egység.

nos, ez igy nem igaz, itt a Compute Unit-ot ki kell cserelni Processing Element-re.. a Compute Unit a Processing Element-ek egy csoportja (az nVidia multiprocessor-nak hivja, es egy multiprocesszor 8 darab procit tartalmaz).. nagyjabol az a helyzet, hogy egy work-group work-item-jeit futtatja egy compute unit.. az, hogy ez konkretan hogyan van megoldva, implementacio-fuggo, nVidia kartyakra a CUDA doksiban szepen le van irva, hogy is tortenik ez.. gondolom ATI-eknak is van valami dokumentaciojuk, nekem csak nVidiam van, igy csak azzal foglalkoztam..

tehat OCL-ben te be tudod allitani a work-group meretet, illetve a work-item-ek szamat; az, hogy ez konkretan hogyan kerul kiosztasra a CU-k/PE-k kozt, az OpenCL runtime dolga..

// cikk atirasa folyamatban...

[ Szerkesztve ]


tlac
(nagyúr)

kösz
tehát a Compute Unit-okkal már le van kezelve a hardverből adódó shaderes különbségek


sghc_toma
(senior tag)
Blog

igen, a hardverek kozotti kulonbseg eltuntetese az OpenCL feladata.. ez benne a szep, neki tulajdonkeppen mindegy, milyen hardver van alatta.. elvileg.. persze ahhoz, hogy optimalis kodot tudjal irni, ismerned kell az adott architekturat.. pl. nVidia-nal figyelni kell a bank conflict-okra, coalescing-re, ATI-nal nem tudom, hogy van ez.. szoval siman lehet, hogy egy alkalmazasban minden tamogatott architekturara kulon kernelt kell irni, kulon work-group/work-item kiosztast kell hasznalni..


tocsa
(senior tag)
Blog

Elütés: "már írtam az előző bekezsésben"


tocsa
(senior tag)
Blog

Egyébként nagyon szép munka, köszönet érte.
Azt hiszem megpróbálok majd portolni egy project-et OpenCL-re, ha lesz már megfelelő hardver és driver rá. Nagyon bíztató!

Kérdések, amik felmerülnek bennem:
- milyen pontosságot támogat? Végülis float is jó lenne, de a portolandó program double (lévén a double ma már a koprocesszor "alap" formátuma, amire legjobban optimalizált (ok, most itt az MMX és SSE-ről nem beszélek))
- hogy tűri ez az architektúra, hogyha egyes vektorok 5-10 megabájtnyi méretűek?


sghc_toma
(senior tag)
Blog

koszonom szepen, a hibat javitottam..
maga a szabvany a float-ot koveteli meg, de az OpenCL-ben is (mint OpenGL-ben) vannak extension-ok, es letezik double preciosion extension.. tehat igazabol hardverfuggo a dolog, nekem pl. a videokartyam (FX570m) nem tamogatja ezt a kiegeszitot, a procim meg igen (meg jo :) )..

masik kerdesedre is az a valaszom, hogy implementacio-fuggo.. OCL csak egy szabvany, az, hogy ezt hogyan valositjak meg a hardvergyartok a sajat architekturajukra, teljesen rajtuk mulik.. eddig csak nVidia kartyara programoztam, ott nem lehet gond az 5-10 megabajt meretu buffer.. pl a saxpy-s peldaprogi 25165824-es vektormerettel is tok jol mukodik.. ez ugye ket darab 96 megas vektort jelent (egy olyan kartyaval, amin csak 256 mega memo van)..


tocsa
(senior tag)
Blog

Kösz a választ.
Legszívesebben már most átportolnám a project-et. A float végülis nem nagy érvágás, szerintem még mindig elég pontosságú lenne a number crunching. Ez biztató, hogy 96 megás vektort is vitt a cucc. Mondjuk elvégre is ha ilyen tudományos számításokra gondolunk (márpedig a GPGPU megoldások erre jók), akkor értelemszerűen felmerül a nagy mennyiségű adatok kérdése. Látom, hogy mi a veszélye annak, hogy a nagy vektorok lekezelése hardver/driver függő, de elvárom, hogy működjön. Ugye az API mögött nekik kell megoldani transzparens módon az adatok kisebb méretre darabolását, ha túl nagyok.

Mostmár csak várni kell 1-2 évet, hogy kijöjjön az ATI és az nVidia is driverekkel meg kiforrjon kicsit a cucc, meg kell egy olyan Quadro-s laptop, ami neked van, aztán prezentálni tudnék a megrendelőnek egy OpenCL-es verziót.


sghc_toma
(senior tag)
Blog

lehet, hogy felreerthetoen fogalmaztan.. azt, hogy nagy vektorok kezelese hardverfuggo, nem ugy ertettem, hogy a driver feladata egy nagy buffert szetbontani kezelheto darabokra.. annyit akartam vele mondani, hogy minden hardver kulonbozo mennyisegu memoriaval rendelkezik, es hogy egy adott architektura akar lehet olyan is, hogy nem tud nagy bufferekkel optimalisan dolgozni (nem tudom, hogy van-e ilyen, de ki tudja)..

gyakorlatilag ez ugy nez ki, hogy az eszkozon elerheto valamilyen mennyisegu globalis, konstans, lokalis, es privat memoria.. ezeket az adatokat az OCL runtime-tol le lehet kerdezni.. ezek, es az alkalmazas memoriaigenyenek tudataban neked kell beosztanod, hogy hogyan gazdalkodsz a memoval.. nagyon nagy adatok eseten mondjuk egy kezelheto darabra lefuttatod a kernelt, visszaolvasod az eredmenyt, aztan futtatod megint a kernelt egy masik adatdarabon, es igy tovabb..

1-2 evet talan nem kell varni, beta driverek mar most is vannak.. ATI vonalon nem tudom, mi a helyzet, de nVidia-ek ugye a CUDA architekturara epitettek az OpenCL implementaciojukat, az meg mar eleg kiforrott..
ja, es ebben a Quadro-ban az a 256 mega/32 stream proci kombo keves tud lenni neha, akkor mar inkabb valami 512MB-os FX770m/HD3650, vagy hasonlo :)


tocsa
(senior tag)
Blog

Köszi a választ.
Akkor a te általad említett 96MB-os vektoros példában te magad gondoskodtál valami kóddal ennek a feldarabolásáról? Lehetőleg én nem szeretnék ezzel foglalkozni, mert hw függő. Persze írható hw független kód a darabolásra, de elvárnám, hogy a drvier/OpenCL architektúra ezt megtegye.


tocsa
(senior tag)
Blog

Még egy kérdés. Ugyan követtem a CUDA és egyéb technológiák megjelenését, de mély ismereteim nincsenek még. Talán te kapásból tudod a választ.
Az általam portolandó tudományos számítás extenzíven használ exponenciális függvényeket. Az architektúra támogat exponenciális vagy logaritmikus lebegőpontos műveleteket is? Igazából itt most egy kicsit elkezdtem félni is, mert valószínűleg a GPU-ban levő floating-point egységek nem erre vannak kihegyezve/optimalizálva.


sghc_toma
(senior tag)
Blog

nincs mit..
az FX570m 256 megajanak nagy resze felhasznalhato globalis memoriakent (nem az egesz, mert ugye ott van meg a kepernyobuffer, konstans memoria, stb. is), igy felfert egyben a ket darab 96 megas vektor a kartyara.. azert ha vesz az ember ilyen 1-2 giga memoval rendelkezo kartyakat, azokon mar jol el lehet ferni..

exp-et, log-ot megkoveteli a szabvany, tehat az OCL-t tudo hardverek tudjak..

[ Szerkesztve ]


karicska
(tag)

2 napja letölthető NVidia driver OpenCL-hez: [link]

Nagyon jó a cikk, már egyébként is foglalkoztatott a dolog, valamint a diplomamunkámhoz is kelleni fog. Amint lesz időm meló és suli mellett rögtön alkotok valamit :D

Feldobta ez a cikk a napom. :DD

[ Szerkesztve ]


tocsa
(senior tag)
Blog

Nekem is feldobta anno a napom. Egyre izgatottabb vagyok, nem birok varni, hogy ne probaljam ki. Kene egy jo hardver (oke, elvileg csak CPU-t is kezel az OpenCL).

Mirol szol a diplomamunkad?


tocsa
(senior tag)
Blog

Huhuu, megneztem laptop arakat FX770m-el. Haaat...
Asszem FX570m-el nezelodok, vagy ilyesmi.

[ Szerkesztve ]


tocsa
(senior tag)
Blog

Inkabb desktop :) Milyen desktop Quadro-t erdemes venni?


karicska
(tag)

Ha asztalid van akkor egy 9600GT-t belehet szerezni 20Ft környékén már simán. Nekem is az van. 9600GT-t használom koprocesszornak :D 3DMark Vantage-ban így a procim 10000 helyett 21000 pontot kapott! :D

Törések szimulálásáról a grafikában és ezt gpu-n akarom számoltatni, dióhéjban erről szól a diploma munkám.

Egyébként érdekes lesz ez az openCL-s dolog, ugyanis ma szórakoztam a dologgal egy kicsit.

Feltettem Ati Stream sdk-t és az NVidia-s NBody projektet nem sikerült az Ati -s opencl.dll -l műküödésre bírni (újra fordítottam a projektet és az Ati-s headereket valamint librarykat használtam, majd az Ati-s opencl.dll -t ette meg). Valami felszabadító függvény még nem került bele az AMD-s opencl dll-be. Mellesleg a Stream SDK 2.0 beta-ban jelenleg még csak CPU támogatás van.


karicska
(tag)

Egy kis javítás a cikkhez:
a parameter cannot be allocated in a named address space -t dob a clBuildProgram ha az "a" paramétert nem __private címtérbe kerül ( ATI Stream SDK-ban, NVidia sdk alatt megy a dolog )

Utána olvastam az OpenCL doksiban (Khronos_OpenCL_Specification.pdf 149 oldal ) és azt írják, hogy a __kernel függvények bemenő paramétereinek mindnek __private address space-ben kell lennie, viszont ha pointer a bemenő paraméter az lehet __global, __constant, __local és a címterek közti castolás nem lehetséges.

Tehát a példa progi jól megy NVidia sdk-val viszont Ati sdk-val nem.

Kérdés: tud valaki valami olyan eszközt amivel jól lehet profilozni a futó kódot?


sghc_toma
(senior tag)
Blog

jogos, koszonom :R rogton javitom...
meg ha mar szoba jottek az address space-ek, talan erdemes megemliteni, hogy az x lehetne __constant, mert ugysem valtozik az erteke, es a konstans memo cache-elve van (legalabbis CUDA architekturan)..

nVidia-nak Win-re es Linux-ra van egy OpenCL Visual Profiler nevu cucca, bar meg csak beta..


sghc_toma
(senior tag)
Blog

javitottam.. meg a peldaprogiban volt egy masik csunya bug is: az eredmeny ellenorzesekor abs-ot hasznaltam fabs helyett, igy egy esetleges hibas szamolas utan is azt kaptuk volna, hogy 1000-bol 1000 sikerult :B

karicska: esetleg megprobalnad a peldaprogit forditani/futtatni ugy, hogy a 147. sornal kezdodo kommentezett blokkot is beleforditod? OSX-en nem akar mukodni, nem tudom miert.

// es meg valami, ami nagyon off: ismeros volt a nick-ed, rakerestem az e-mail cimedre, latom ELTE-s vagy.. veletlenul nem a nagytetenyi uti koliban laksz? van itt a halon egy gep karics-pc, vagy valami hasonlo nevvel, ez elegge hasonlit a karicska-hoz :)..


karicska
(tag)

Most megyek el, de amikor vissza jöttem lefordítom és megnézem.

[OFF]de-de az az én gépem lesz :)

Amikor még csináltam ide az accot akkor még karicska voltam, azóta felnőtem és karics lettem :DD [/OFF]


karicska
(tag)

Piszkálta a fantáziám a dolog, úgyhog megnéztem, de nem nyert, röpke 102 error + 45 warninggal fordult :S

Az első hiba: error C2275: 'cl_platform_id' : illegal use of this type as an expression

Visszaérek este valamikor aztán megnézem pontosan.

Az én kódom eddig tök ugyanez (van egy két kiiratás de az nem zavar be ) és nekem lefordul. Ugyanabba a környezetbe raktam be, amiben az enyém van. Még dolgozom este rajta.


karicska
(tag)

Már lefordul és fut is:D

NVidia SDK: ha a bináris fájl betöltést kikommentezem akkor semmi gond.

ATI Stream SDK 2.0 beta3: ha kikommentezem a bináris fájl betöltést akkor problémázik a program végén, hogy a binary változó nem ment át a run-time checken. Nem láttam még életemben ezt a hibaüzenetet.

Este ha visszaértem utána járok. Már így is 1 órával többet foglalkoztam vele, mint kellett volna:D


sghc_toma
(senior tag)
Blog

sry, hogy csak most valaszolok, kicsit el voltam havazva..

kosz, hogy kiprobaltad a progit!
otthon en is ki akartam probalni win alatt.. 64 bites Win7-re nem ment az OpenCL SDK (azt mondja, legalabb XP kell neki.. fura, mert OpenCL driver meg van Win7-re).. az Ati SDK-val meg meg nem volt idom foglalkozni.. talan a heten..

"de-de az az én gépem lesz"
na, akkor jol sejtettem :)


sghc_toma
(senior tag)
Blog

kijott az Ati Stream SDK 2.0-beta4, mukodik vele a GPU gyorsitas.. meg tamogatja a 64 bites Windows-okat, koztuk a Win7-et is.. [link]

[ Szerkesztve ]


karicska
(tag)

Tök jó! :D:D

Akkor mostmár ezt teszem fel nem a régit. (Most telepítettem új windows-t (Win 7 64bit ).

Egyébként nekem előtte is win7-m volt csak beta, és azon minden ment.


romero28
(senior tag)

üdv !

ismerősömnél a következő probléma jelentkezett : egy 2 nyákos 295-ről váltott egy 1 nyákosra és a gpu-z -ben az open cl nincs kipipálva . (a két nyákosnál ki volt) win7 és legújabb nv driver van fenn a gépen . mitől lehet ez :F


charlie_hu
(aktív tag)

Van (stabil, elérheőt) program ami átlag célra (pl. videó konvertálás) is fel tudja használni ezt?

üzenetek