Shader programozás HD videó gyorsításra
2010-06-30T02:36:30+02:00
2010-07-02T14:01:57+02:00
2022-07-02T06:35:29+02:00
  • Ha minden áron shader-ezni akarsz, akkor az úgy fog működni, hogy átadod a bemenetet valahogy a shadereknek (textúrában, vagy ha kevés, akkor uniform-ként), és a kimenetet vissza olvasod. Általában egy teljes képernyős négyzetet kell renderelni, a vertex shader kb nem csinál semmit, és a pixel shaderben történik a számolás. Legalábbis én OpenGL-ben így csináltam képfeldolgozást (pl. szűrés színre). Akkor lesz baj performance-ilag, ha a kimenet egy pixeléhez egy textúrából nem csak lokálisan olvasol, hanem össze-vissza. OpenGL-ben fragment shader kimenetét Framebuffer Object-el tudod textúrába renderelni, a vertex, esetleg geometry shader kimenetéhez a transform feedback-re keress rá.

    Néhány link:
    GPU Gems - Part VI: Beyond Triangles
    GPU Gems 2 - Part IV: General-Purpose Computation on GPUS
    GPU Gems 2 - Part VI: Simulation and Numerical Algorithms
    GPGPU.org - Legacy GPGPU: Graphics APIs
    nVidia SDK-kat is érdemes megnézni, vannak benne képfeldolgozós/videós dolgok.
    OpenCV-nek vannak GPU-s változatai is, és van olyan is, ami nem CUDA/OpenCL-es.
    Mutasd a teljes hozzászólást!
  • Akkor szól csak bele a kernelek futtatásába, mikor grafikus módban is fut a kártya (ergo egy opengl programban használsz kerneleket, amik opengl resourcekbe írnak), amennyiben sima parancssoros és független, akkor nem szól bele.

    Shaderekből egyedül a compute shader, amit tudsz normális graf mód nélkül futtatni, a többihez kell a graf device.

    Az meg már csak a legújabb kártyákon fut, és mint mondtam butább mint a cuda / opencl.

    A másik fontos különbség, hogy shadereknél nincs lehetőséged explicite elérni a shared memoryt, vagy kontrollálni a futó thread blockok / threadok számát, nincs normálisan scattered write lehetőséged (talán csak geometry shaderrel, de az használhatatlanul lassú). És még lehetne sorolhatni a különbségeket...
    Mutasd a teljes hozzászólást!
  • Azt például tudod, ha graf módban is fut a kártya, akkor a kernel számítások ideje korlátozott és nem futhat egyetlen kernel másodpercekig, mert az oprendszer korlátozza?


    Tehát ezzel azt akarod mondani hogy míg a shaderek ütemezésébe beleszól az oprendszer, addig az opencl és cuda esetén ez teljesen független?
    Én úgy tudtam, hogy a shadereknél is így volt.
    Mutasd a teljes hozzászólást!
  • Te még mindig nem érted, az opencl általános célú nyelv, még cpu-n is képes futni. A shaderek nem arra valók, hogy általános célú számításokat végezz velük, erre az opencl és a cuda sokkalta alkalmasabb. Amennyiben van dx10 képes kártyád az jó eséllyel opencl vagy cuda képes (kivéve ati 2xxx és ati 3xxx), akkor sokkal hatékonyabb eszközeid vannak arra, hogy számolj velük.

    Azt például tudod, ha graf módban is fut a kártya, akkor a kernel számítások ideje korlátozott és nem futhat egyetlen kernel másodpercekig, mert az oprendszer korlátozza?

    Megint magamat ismétlem, a shaderek nem általános célú számításra valók, arra vannak hatékonyabb eszközök is. Pont.

    A te érdekedben mondom ezt, a megfelelő eszközt kell használni a megfelelő helyen. Ha mégis shaderesen akarsz bohóckodni, akkor pedig dx11 és ott van compute shader, ami egy butított cuda ill opencl szintaxis. Sok sikert hozzá.
    Mutasd a teljes hozzászólást!
  • Őőőőőőő
    Félreértesz.
    Engem még mindig a shaderek általános célra való megoldása érdekel.
    Alapok, tips & tricks. Direct nem a Cuda és OpenCl érdekel mert abból van egy halom cikk. Azt szeretném megvizsgálni, hogy milyen és mennyire általános célra lehet használni őket.
    Mutasd a teljes hozzászólást!
  • Ok akkor tegyük fel h normális vga kártyám van. Tehát hol is indulhatnék el ez ügyben?
    Mutasd a teljes hozzászólást!
  • Hehe, az a kártya teljesen felejtős. Normálisan nem fogsz tudni vele shadert programozni, ami el is indul eszméletlen lassú lesz. És közelítő képet sem fog adni, milyen sebességgel mehet normális videókártyán. Akkor add el a laptopot és vegyél egy olyat amiben nem intel kártya van.

    És nem, nincs benne szufla. Biztos lehet kapni olyan laptopot normális áron amiben legalább egy geforce 9300 kategóriájú kártya van (az tudja azt ami neked kell).
    Mutasd a teljes hozzászólást!
  • "DirectX 10-et" igen, oda írták, hogy tud mindent, csak az lemaradt, hogy kb 1-2fps-el mennek a DX-es demok is, az SDK-ban.

    Üres ablak megnyitás, dx10contextussal, na az gyors...
    Mutasd a teljes hozzászólást!
  • add el és vegyél egy olcsó kártyát


    Hát én eladnám csak nem tudom kiforrasztani a laptopból.
    Ugyanis a szerencsés alany egy Intel x3100 -as ami ha jól tudom már tud DirectX 10-et és Shader Model 4.0 -át.
    Sajna ebből kell gazdálkodni, ebből kell kinyerni a lehető legtöbb szuflát (ha van benne).
    Mutasd a teljes hozzászólást!
  • Ajjajaj.
    Úgy látom kezdenek elszabadulni az indulatok.
    Csigavér emberek.

    Szóval hogy miért is shaderekkel akarom? Nagyon egyszerű az oka:
    a videókártyám nem GPGPU azaz nincs se CUDA, OpenCL, DirectCompute ...
    Amúgy bevallom tényleg nem ismerem se a HLSL-t se a GLSL-t. De szeretném mindenképpen megismerni. A HD dekódolás csak egy cél a sok közül. Amúgy nem vagyok hülye a programozáshoz. Sőt.
    Nem Crisis 3 -at akarok írni, sőt távol álljon tőlem a 3D programozás, hanem a videókártyákban rejlő lehetőségeket akarom megismerni. Ehhez kéne valami útmutatás.
    Mutasd a teljes hozzászólást!
  • "Direkt nem CUDA, OpenCL és hasonló finomságokra gondolok hanem csak a shaderekre."


    Nem értelek, hogy miért "csak" vertex/pixel shader-ökkel akarsz dolgozni, ha ott van az OpenCL? Tapasztalatból mondom, hogy nem nehéz használni (legalábbis azon a szinten, ahogy én használom), és még felülről platformfüggetlen is az olyan hardvereken, amelyekhez tartozó driver ezt támogatja. Például az összes CUDA képes nVidia kártya tudja ezt.

    A másik, hogy a HD videók gyorsítását ezek a kártyák már alapból, hardveresen gyorsítják (szintén megfelelő driver és dekóder mellett, ez a VDPAU). Nem lenne egyszerűbb, ha "szépen megkérnéd" a GPU-t, hogy legyen olyan kedves, és vegye le a CPU válláról a favágó munkát? Vagy gyakorlásképpen akarod ezt te magad leprogramozni?

    Egyébként itt is hasonló témáról beszélgetnek.

    Amúgy érdekes a téma; érdemes lenne alaposabban belemélyedni.

    Szerk.:
    Még az jutott eszembe, hogy ha érdekel, hogyan lehet a VDPAU szolgáltatást igénybe venni, akkor szedd le az MPlayer forráskódját az svn tárolóból, és keresd ki benne a VDPAU videókimeneti modult. Abban benne lesz, miként vehető rá a GPU a munkára. Az MPlayer ezt a hardveresen gyorsított megoldást már rég támogatja.

    svn checkout svn://svn.mplayerhq.hu/mplayer/trunk mplayer svn update
    Mutasd a teljes hozzászólást!
  • Hali mindenki!

    Mivel itt a nyári szünet és a vizsgaidőszakot letudva lesz egy csomó szabadidőm arra gondoltam, hogy nem lehetne -e a grafikus kártya vertex és/vagy pixel shaderjeit úgy felprogramozni, hogy ő kódolja ki az 1080p -s mkv HD videókat. Direkt nem CUDA, OpenCL és hasonló finomságokra gondolok hanem csak a shaderekre. Olvasgattam egy kicsit erről, és azt írta valaki hogy leginkább a vertex shaderek az alkalmasabbak. Láttam, hogy lehetnek benne ciklusok, feltételek, függvények stb...
    Egyáltalán lehet valamiféle általános célú programozásra használni őket?
    Mutasd a teljes hozzászólást!
abcd