OpenCL kodirane rutine, zvane jezgre, mogu se izvršavati na grafičkim procesorskim jedinicama (GPU) i središnjim procesorskim jedinicama (CPU) nekih od najpoznatijih proizvođača kao što su Intel, AMD, Nvidia i IBM. Tako npr. ukoliko vaše računalo sadrži AMD Fusion procesor i AMD grafičku karticu, moguće je sinkronizirati jezgre kako bi se odvijale paralelno na oba uređaja i razmjenjivale podatke između njih. Drugim riječima OpenCL jezgre je moguće koristiti kako bi smo ubrzali OpengGL i Direct3D obradu. Iako djelomično podsjeća na NVIDIA CUDA, OpenCL strukture podataka i funkcije su jedinstvene, te ga zbog toga nije lagano naučiti što je jedan od njegovih nedostataka. Stoga ćemo vam u ovom radu probati približiti i objasniti rad sa OpenCL-om.
Razvoju OpenCL projekta započinje kodiranjem „host“ aplikacije (C, C++), odnosno aplikacije koja se izvodi na korisnikovom računalu i koja otprema jezgre prema spojenim uređajima. Svaka host aplikacija koristi pet osnovnih strukture podataka u OpenCL-u:
OpenCL UML Class Diagram
Kako bi smo pobliže objasnili pet osnovnih struktura unutar OpenCL-a iskoristi ćemo primjer igre karata. U toj igri djelitelj dijeli karte iz špila jednom ili više igraču koji se nalaze za stolom. Samo oni igrači koji su za stolom mogu sudjelovati u igri, no to ne znači da i moraju. Svaki igrač nakon što zaprimi svoje karte igra na način za koji smatra da je najbolje. Također igrači međusobno ne komuniciraju i ne vide karte drugih igrača, ali mogu tražiti od djelitelja dodatnu kartu ili promjenu uloga. Djelitelj je taj koji mora odgovarat tim zahtjevima i preuzima kontrolu nakon što igra završi. Slika prikazuje jednu takvu igra.
Igra karata
U ovom primjeri djelitelja možemo zamisliti kao host aplikaciju, dok ostali dijelovi igre odgovaraju ranije navedenim strukturama podataka u OpenCL koje moraju biti kreirane i konfigurirane u host aplikaciji:OpenCL strutkture podataka
Made by Juranek Bojan & Goran Mlinarić