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
Paralelní programování provází mnoho obtížných překážek, které často neumožňují jeho nasazení ani tam, kde bychom to obvykle očekávali. Většina současných aplikací je tvořena za pomocí tzv. sekvenčního (postupného) programování. Pro většinu aplikací je tedy nutné nejen předělání kódu, ale rovněž celého procesu, jak daný problém (výpočet) řešit za pomocí paralelního programování.
Některé úlohy (problémy) přímo volají po nasazení datově paralelních výpočtů, ale cesta k jejich realizaci může být často obtížnější, než by se mohlo na první pohled zdát. I když budete znát nejlepší a nejrychlejší algoritmus pro vyřešení datově paralelního problému, tak nemusí být vždy přeložitelný do efektivně pracujícího programu.
Příkladem může být násobení dvou matic o velikosti 100x100 tisíc, kde bychom potřebovali pro výsledek každé buňky matice vytvořit vlastní vlákno. Ve výsledku by tedy trvalo mnohem více času vytvořit tato vlákna a určit zdrojová data než samotný výpočet. Proto je třeba více než kdy jindy přemýšlet, jak budeme s ohledem na tyto skutečnosti dané úlohy řešit.
Na druhé straně také existují limity v oblasti hardware, kde na jedné straně máme pro tyto účely relativně slabé „general purpose“ procesory (CPU) a na druhé straně GPU (Graphics Procesing Unit). Rozdíly tkví především v množství výpočetních jednotek, které zvládnou tyto výpočetní úkony. Dnešní high-endové grafické karty disponují 480-1600 výpočetními jednotkami, které jsou připraveny poprat se s mnohem těžšími úkoly, než mohou klasické procesory. Bohužel se zdá, že nepsaným limitem je v současnosti problém vyžadující současné zpracovávání více než 300 vláken. S tímto se potýkali například vývojáři klientů Folding@home, kde zpracovávání většího množství vláken není efektivní.
Některé úlohy (problémy) přímo volají po nasazení datově paralelních výpočtů, ale cesta k jejich realizaci může být často obtížnější, než by se mohlo na první pohled zdát. I když budete znát nejlepší a nejrychlejší algoritmus pro vyřešení datově paralelního problému, tak nemusí být vždy přeložitelný do efektivně pracujícího programu.
Příkladem může být násobení dvou matic o velikosti 100x100 tisíc, kde bychom potřebovali pro výsledek každé buňky matice vytvořit vlastní vlákno. Ve výsledku by tedy trvalo mnohem více času vytvořit tato vlákna a určit zdrojová data než samotný výpočet. Proto je třeba více než kdy jindy přemýšlet, jak budeme s ohledem na tyto skutečnosti dané úlohy řešit.
Na druhé straně také existují limity v oblasti hardware, kde na jedné straně máme pro tyto účely relativně slabé „general purpose“ procesory (CPU) a na druhé straně GPU (Graphics Procesing Unit). Rozdíly tkví především v množství výpočetních jednotek, které zvládnou tyto výpočetní úkony. Dnešní high-endové grafické karty disponují 480-1600 výpočetními jednotkami, které jsou připraveny poprat se s mnohem těžšími úkoly, než mohou klasické procesory. Bohužel se zdá, že nepsaným limitem je v současnosti problém vyžadující současné zpracovávání více než 300 vláken. S tímto se potýkali například vývojáři klientů Folding@home, kde zpracovávání většího množství vláken není efektivní.