OpenCL - konkurent pro DirectX?
29.1.2009, Petr Štefek, článek
OpenCL je nový adept na poli univerzálních rozhraní pro akceleraci aplikací skrze výpočetní sílu grafických karet. První krůčky Nvidie jsme mohli pozorovat s rozhraním CUDA, které je nadstavbou nad programovací jazyk C. OpenCL by však mohlo vše sjednotit.
Kapitoly článku:
Jak už jsme si řekli dříve, tak ideálním nástrojem pro využití možností datově paralelního programování jsou současná grafická jádra se stovkami výpočetních jednotek. OpenCL je v této fázi především pro vývojáře, kterým usnadní cestu k aplikacím, které budou upraveny anebo nově napsány tak, aby bylo schopny využít výpočetního potenciálu grafického jádra. Výsledkem jejich snažení pak bude, že si jednou budeme moci nainstalovat speciální ovladače, které vypustí tygra z klece v našem domácím počítači. Tygrem rozumějte sílu výpočetních jednotek moderních GPU.
Pokud se podíváme nějaký ten měsíc zpět v čase, tak zde najdeme první nesmělé pokusy o využití akcelerace grafických karet od společností AMD a NVIDIA. Oba soupeři poměrně často stavěli na odiv svá řešení a pomlouvali možnosti toho konkurenčního, faktem ale zůstává, že ani jedna společnost nedokázala uvést v život skutečně použitelné řešení pro běžného uživatele.
Zástupci AMD a její fanoušci tvrdí, že NVIDIA CUDA není dobrým řešením, jelikož se nejedná o otevřený standard, což firemní řešení pod názvem Brook+ je. Pravda je ovšem jako obvykle poněkud jiná, neboť Brook+ není tzv. „open standard“, neboť byl vyvinut na Stanfordu a nebyl dosud standardizován. Pro hardware společnosti NVIDIA by ovšem musel být kompilátor modifikován (byť je volně k dispozici), a to by vyžadovalo nemalé prostředky a úsilí ze strany NVIDIE. Původní Brook pro GPGPU generoval OpenGL kód a po modifikování pro generování potřebného kódu, není tento program příliš vhodný a už vůbec se nedá pojmenovat jako otevřený.
NVIDIA není v tomto ohledu o mnoho lepší. Po svých demonstracích se nechala slyšet, že společnost AMD nemá na vybranou a stejně bude muset následovat stopy položené NVIDIÍ, jelikož platforma CUDA je založena na programovacím jazyku C, který je zlatým standardem pro výpočetní využití GPU a AMD nic podobného nemá. Faktem ovšem je, že AMD začalo s demonstracemi pokročilé akcelerace skrze GPU daleko dříve, než NVIDIA vůbec měla specifikován standard platformy CUDA, a to mnohem zajímavějším způsobem.
S příchodem grafického jádra ATI R580 publikovala společnost část svých materiálů a plánů, kde byl zmíněn tajemný projekt CTM (Close to Metal), který byl součásti ATI Stream. CTM bylo tzv. „low-level“ rozhraní pro parelelní programování GPGPU výpočtů a nahrazovalo specificky zaměřené rozhraní jako DirectX nebo OpenGL. Na rozdíl od nich poskytovalo programátorům neomezenou funkcionalitu. Po Close to Metal přišel na svět klient Folding@home, který dokázal využít akcelerace grafických jader R520 a R580. NVIDIA CUDA si vede velmi dobře v oblasti tzv. HPC (High Performance Computing), ale přínos této platformy je pro běžného uživatele alespoň zatím téměř nulový.
NVIDIA spolupracuje v oblasti HPC s několika univerzitami právě v oblasti datově paralelního programování za účelem vědeckých výpočtů. AMD prozatím nepotvrdilo, jakou cestou se chce vydat a jestli bude případně kooperovat na platformě CUDA. Pokud by chtěli v AMD a NVIDIA spolupracovat navzájem, pak pro svá řešení musí vytvořit speciální „wrapper“ pro překlad PXT (CUDA) na CAL (AMD Stream). Pokud by někdo chtěl navrhnout oběma stranám, aby spolupracovaly na společném řešení, tak se pravděpodobně nikdy nedočká. Naštěstí zde existuje naděje v podobě vyšších standardů seslaných nám mocnějšími firmami, jako jsou Microsoft a jeho DirectX 11 nebo dnes popisované uskupení Khronos Group s OpenCL.
Teoreticky tedy obě firmy, AMD a NVIDIA, podporují svůj vlastní standard a také nově otevřený standard OpenCL. Existují další rozdíly mezi Brook+ a CUDA, ale ten nejpodstatnější je, že tato vlastní řešení nemohou tvořit kód, který bude schopen běžet na obou typech hardware AMD a NVIDIE. Obě společnosti spolu nespolupracují tak těsně, aby někdy podobné řešení spatřilo světlo světa. OpenCL představuje řešení, které vývojářům poskytne možnost aplikaci jednou napsat, kompilovat ji, kde pak mohou očekávat, že bude pracovat na většině současných GPU. Zdá se tedy, že OpenCL je východiskem ze slepé uličky CUDA vs. Brook+.
Pokud se podíváme nějaký ten měsíc zpět v čase, tak zde najdeme první nesmělé pokusy o využití akcelerace grafických karet od společností AMD a NVIDIA. Oba soupeři poměrně často stavěli na odiv svá řešení a pomlouvali možnosti toho konkurenčního, faktem ale zůstává, že ani jedna společnost nedokázala uvést v život skutečně použitelné řešení pro běžného uživatele.
Zástupci AMD a její fanoušci tvrdí, že NVIDIA CUDA není dobrým řešením, jelikož se nejedná o otevřený standard, což firemní řešení pod názvem Brook+ je. Pravda je ovšem jako obvykle poněkud jiná, neboť Brook+ není tzv. „open standard“, neboť byl vyvinut na Stanfordu a nebyl dosud standardizován. Pro hardware společnosti NVIDIA by ovšem musel být kompilátor modifikován (byť je volně k dispozici), a to by vyžadovalo nemalé prostředky a úsilí ze strany NVIDIE. Původní Brook pro GPGPU generoval OpenGL kód a po modifikování pro generování potřebného kódu, není tento program příliš vhodný a už vůbec se nedá pojmenovat jako otevřený.
NVIDIA není v tomto ohledu o mnoho lepší. Po svých demonstracích se nechala slyšet, že společnost AMD nemá na vybranou a stejně bude muset následovat stopy položené NVIDIÍ, jelikož platforma CUDA je založena na programovacím jazyku C, který je zlatým standardem pro výpočetní využití GPU a AMD nic podobného nemá. Faktem ovšem je, že AMD začalo s demonstracemi pokročilé akcelerace skrze GPU daleko dříve, než NVIDIA vůbec měla specifikován standard platformy CUDA, a to mnohem zajímavějším způsobem.
S příchodem grafického jádra ATI R580 publikovala společnost část svých materiálů a plánů, kde byl zmíněn tajemný projekt CTM (Close to Metal), který byl součásti ATI Stream. CTM bylo tzv. „low-level“ rozhraní pro parelelní programování GPGPU výpočtů a nahrazovalo specificky zaměřené rozhraní jako DirectX nebo OpenGL. Na rozdíl od nich poskytovalo programátorům neomezenou funkcionalitu. Po Close to Metal přišel na svět klient Folding@home, který dokázal využít akcelerace grafických jader R520 a R580. NVIDIA CUDA si vede velmi dobře v oblasti tzv. HPC (High Performance Computing), ale přínos této platformy je pro běžného uživatele alespoň zatím téměř nulový.
NVIDIA spolupracuje v oblasti HPC s několika univerzitami právě v oblasti datově paralelního programování za účelem vědeckých výpočtů. AMD prozatím nepotvrdilo, jakou cestou se chce vydat a jestli bude případně kooperovat na platformě CUDA. Pokud by chtěli v AMD a NVIDIA spolupracovat navzájem, pak pro svá řešení musí vytvořit speciální „wrapper“ pro překlad PXT (CUDA) na CAL (AMD Stream). Pokud by někdo chtěl navrhnout oběma stranám, aby spolupracovaly na společném řešení, tak se pravděpodobně nikdy nedočká. Naštěstí zde existuje naděje v podobě vyšších standardů seslaných nám mocnějšími firmami, jako jsou Microsoft a jeho DirectX 11 nebo dnes popisované uskupení Khronos Group s OpenCL.
Teoreticky tedy obě firmy, AMD a NVIDIA, podporují svůj vlastní standard a také nově otevřený standard OpenCL. Existují další rozdíly mezi Brook+ a CUDA, ale ten nejpodstatnější je, že tato vlastní řešení nemohou tvořit kód, který bude schopen běžet na obou typech hardware AMD a NVIDIE. Obě společnosti spolu nespolupracují tak těsně, aby někdy podobné řešení spatřilo světlo světa. OpenCL představuje řešení, které vývojářům poskytne možnost aplikaci jednou napsat, kompilovat ji, kde pak mohou očekávat, že bude pracovat na většině současných GPU. Zdá se tedy, že OpenCL je východiskem ze slepé uličky CUDA vs. Brook+.