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:
- OpenCL - konkurent pro DirectX?
- Proč již nevyužíváme datově paralelních výpočtů?
- OpenCL - pro koho je vlastně určeno?
- Proč si NVIDIA myslí, že Brook+ a CUDA jsou alternativami?
- OpenCL rozšiřuje OpenGL aneb dokonalá symbióza
- Závěr
OpenGL 3.0 bylo zklamáním pro vývojáře her, kteří doufali v API s novými klíčovými vlastnostmi, které by ukončily zaostávání za konkurenčním DirectX. Khronos využil poslední verze OpenGL v profesionální sféře v aplikacích jako je CAD/CAM a tvorba 3D obsahu. Bohužel dnes (možná bohudík) neexistuje žádný větší vývojář her, který by herní engine pod OpenGL vyvíjel nebo provozoval. Poslední mohykán v oblasti OpenGL byl Id Software a jeho engine hry Doom 3. O následovníkovi se zatím pouze a jen spekuluje.
OpenCL ovšem má jedno eso v rukávu. Jedna z hlavních výhod DirectX 11 bude přidaní výpočetního shaderu do pipeline. Tento výpočetní shader bude tzv. „general purpose“ typu (stejně jako je například běžné CPU) a bude schopen zpracovávat odlišné datové struktury, se kterými si pixel shader neporadí. OpenCL má ovšem podobné vlastnosti a není na rozdíl od DirectX 11 striktně zaměřeno na grafiku, kde sdílení dat vychází principielně z daných datových struktur než z klasického vstupně/výstupního mechanismu.
OpenGL nic podobného neumí, ale právě OpenCL do značné míry pomáhá změnit. Mezi OCL a OGL bude existovat fyzické sdílení datových struktur a částí paměti. To v principu přidává podporu výpočetního „general purpose“ shaderu do OpenGL pro ty, kdo jej budou chtít využít. To znamená, že nejenže budou moci OpenCL a OpenGL pracovat se stejnými daty, ale metoda jakou pracují a komunikují je velice podobná DirectX 11 a jeho práci s daty mezi pixel shaderem a geometry shaderem.Důvod k povyku ovšem nemají ani tak herní vývojáři, kterým může budoucí DirectX 11 připadat mnohem jednodušší a oblíbenější, ale především vývojáři v profesionální sféře. Tam dostanou možnost kombinovat reálnou práci se simulací nebo manipulovat s daty u vizualizací. Pokud samotný hardware podporuje „double precision“, můžeme s úspěchem využít u aplikací, kde mnoho práce musí být směřováno vizualizaci částí a zároveň celku jako takového. V principu tak lze všechno o mnoho uspíšit a problémem nebudou ani realtime vizualizace, kde se zároveň bude moci pracovat s daty.
Jako přídavek toho všeho může být i fakt, že výpočetní shader bude pracovat i s hardware, který jinak není kompatibilní s DirectX 11, ale v současné době není možné říci, jaké budou přesné specifikace tohoto API. Kombinace OpenGL 3.0 a OpenCL 1.0 po dlouhé době bude znamenat funkcionalitu a technologii na úrovni DirectX. Dnes je velmi těžké jen odhadnout, zda to bude znamenat pro OpenGL vstání z popela či nikoli.
V každém případě je fakt, že OpenGL a OpenCL sdílejí data bez nutnosti je kopírovat nebo konvertovat, opravdu klíčový. Vývojářům dovolí OpenCL využívat GPU jako „general purpose“ procesor a spojení s OpenGL zase pomůže postavit most mezi datově paralelními výpočty a vizualizací. CUDA ani Brook+ nemají v této oblasti vše vyřešeno a využívání OpenGL nebo DirectX pro datově paralelní výpočty je neefektivní. Spojení OpenCL a OpenGL tyto problémy nezná. Jak se k celé věci postaví vývojáři, se zatím můžeme jen dohadovat.
Spojením těchto dvou rozhraní vzniká téměř dokonalá symbióza a pro vývojáře otevírá nekonečné horizonty možností.
OpenCL ovšem má jedno eso v rukávu. Jedna z hlavních výhod DirectX 11 bude přidaní výpočetního shaderu do pipeline. Tento výpočetní shader bude tzv. „general purpose“ typu (stejně jako je například běžné CPU) a bude schopen zpracovávat odlišné datové struktury, se kterými si pixel shader neporadí. OpenCL má ovšem podobné vlastnosti a není na rozdíl od DirectX 11 striktně zaměřeno na grafiku, kde sdílení dat vychází principielně z daných datových struktur než z klasického vstupně/výstupního mechanismu.
OpenGL nic podobného neumí, ale právě OpenCL do značné míry pomáhá změnit. Mezi OCL a OGL bude existovat fyzické sdílení datových struktur a částí paměti. To v principu přidává podporu výpočetního „general purpose“ shaderu do OpenGL pro ty, kdo jej budou chtít využít. To znamená, že nejenže budou moci OpenCL a OpenGL pracovat se stejnými daty, ale metoda jakou pracují a komunikují je velice podobná DirectX 11 a jeho práci s daty mezi pixel shaderem a geometry shaderem.Důvod k povyku ovšem nemají ani tak herní vývojáři, kterým může budoucí DirectX 11 připadat mnohem jednodušší a oblíbenější, ale především vývojáři v profesionální sféře. Tam dostanou možnost kombinovat reálnou práci se simulací nebo manipulovat s daty u vizualizací. Pokud samotný hardware podporuje „double precision“, můžeme s úspěchem využít u aplikací, kde mnoho práce musí být směřováno vizualizaci částí a zároveň celku jako takového. V principu tak lze všechno o mnoho uspíšit a problémem nebudou ani realtime vizualizace, kde se zároveň bude moci pracovat s daty.
Jako přídavek toho všeho může být i fakt, že výpočetní shader bude pracovat i s hardware, který jinak není kompatibilní s DirectX 11, ale v současné době není možné říci, jaké budou přesné specifikace tohoto API. Kombinace OpenGL 3.0 a OpenCL 1.0 po dlouhé době bude znamenat funkcionalitu a technologii na úrovni DirectX. Dnes je velmi těžké jen odhadnout, zda to bude znamenat pro OpenGL vstání z popela či nikoli.
V každém případě je fakt, že OpenGL a OpenCL sdílejí data bez nutnosti je kopírovat nebo konvertovat, opravdu klíčový. Vývojářům dovolí OpenCL využívat GPU jako „general purpose“ procesor a spojení s OpenGL zase pomůže postavit most mezi datově paralelními výpočty a vizualizací. CUDA ani Brook+ nemají v této oblasti vše vyřešeno a využívání OpenGL nebo DirectX pro datově paralelní výpočty je neefektivní. Spojení OpenCL a OpenGL tyto problémy nezná. Jak se k celé věci postaví vývojáři, se zatím můžeme jen dohadovat.
Spojením těchto dvou rozhraní vzniká téměř dokonalá symbióza a pro vývojáře otevírá nekonečné horizonty možností.