Konzorcij Khronos, zadužen za razvoj specifikacija obitelji OpenGL, Vulkan i OpenCL, najavio je završetak razvoja specifikacija OpenCL 3.0, koje definiraju API i proširenja jezika C za organizaciju međusplatformskih paralelnih proračuna korištenjem višegodišnjih CPU-a, GPU-a, FPGA-a, DSP-a i drugih specijaliziranih čipova, od onih koji se koriste u superračunalima i oblacima do čipova koji se mogu naći u mobilnim uređajima i ugrađenoj elektronici. Standard OpenCL je potpuno otvoren i ne zahtijeva licencne naknade. U radu na standardu sudjelovale su tvrtke poput IBM-a, NVIDIA-e, Intela, AMD-a, Apple-a, ARM-a, Electronic Arts-a, Qualcomma, Texas Instruments-a i Toshiibe.
U ovoj fazi specifikacija je dobila status privremenog (provisional), što podrazumijeva mogućnost dorade na temelju povratnih informacija poslanih putem . Nakon što se primjedbe uzmu u obzir, specifikacija će dobiti status konačne i bit će objavljen završni testni set za provjeru kompatibilnosti postojećih implementacija.
Najistaknutije :
- API OpenCL 3.0 sada pokriva sve verzije OpenCL (1.2, 2.x), bez pružanja odvojenih specifikacija za svaku verziju. OpenCL 3.0 omogućava proširenje osnovne funkcionalnosti integracijom dodatnih specifikacija, koje će se primjenjivati u obliku opcija, ne ometajući monolitsku prirodu OpenCL 1.2/2.x.
- Obaveznom je proglašena samo funkcionalnost koja odgovara OpenCL 1.2, dok su sve mogućnosti predložene u specifikacijama OpenCL 2.x klasificirane kao neobavezne. Takav pristup pojednostavit će stvaranje specijaliziranih implementacija kompatibilnih s OpenCL 3.0 i proširiti spektar uređaja na kojima se OpenCL 3.0 može koristiti. Na primjer, proizvođači mogu implementirati podršku za OpenCL 3.0 bez implementacije pojedinačnih mogućnosti OpenCL 2.x. Za pristup neobaveznim mogućnostima jezika u OpenCL 3.0 dodan je sustav provjeravačkih upita, koji omogućava ocjenu podrške za pojedinačne elemente API-a, kao i specijalne makroe.
- Ujedinjavanje s ranije objavljenim specifikacijama pojednostavljuje prilagodbu aplikacija za OpenCL 3.0. Aplikacije OpenCL 1.2 će raditi na uređajima koji podržavaju OpenCL 3.0 bez ikakvih promjena. Aplikacije OpenCL 2.x također neće zahtijevati izmjene koda, ali ako okruženje OpenCL 3.0 pruža potrebnu funkcionalnost (za osiguranje prenosivosti u budućim aplikacijama OpenCL 2.x, preporučuje se dodati provjere kako bi se ocijenila podrška korištenim mogućnostima OpenCL 2.x). Razvijači drajvera s implementacijama OpenCL moći će lako nadograditi svoje proizvode na OpenCL 3.0, dodajući samo obradu zahtjeva za određene API pozive, a tijekom vremena postepeno povećavati funkcionalnost.
- Specifikacija OpenCL 3.0 usklađena je s okruženjem, ekstenzijama i specifikacijama univerzalnog međupredstavljanja SPIR-V, koji se također koristi u API-ju Vulkan. Podrška za specifikaciju SPIR-V 1.3 uključena je u osnovni sastav OpenCL 3.0 kao opciona mogućnost. Kroz korištenje međupredstavljanja za računalna jezgra dodana je podrška za operacije s podgrupama.
- Dodana je podrška za ekstenziju za izvođenje asinkronih DMA operacija (Asynchronous DMA), podržanih u DSP-sličnim čipovima s direktnim pristupom memoriji. Asynchronous DMA omogućava korištenje DMA transakcija za prenos podataka između globalne i lokalne memorije u asinkronom načinu, paralelno s izvršenjem proračuna ili drugim operacijama prenosa podataka.
- Specifikacija ekstenzija za paralelno programiranje za jezik C ažurirana je na , a razvoj jezičnih ekstenzija OpenCL za C++ prekinut je u korist projekta „C++ for OpenCL“. C++ for OpenCL predstavlja kompajler temeljen na Clang/LLVM i jezgre na C++ i OpenCL C u međupredstavljanje SPIR-V ili niskonivojski strojni kod. Kroz prevođenje u SPIR-V također je organizirana izrada C++ aplikacija, koje koriste biblioteku predložaka SYCL, što olakšava stvaranje paralelnih aplikacija.
- Za prevođenje OpenCL putem API-ja Vulkan predloženi su kompajler , koji prevodi jezgre OpenCL u reprezentaciju Vulkan SPIR-V, i sloj za osiguranje rada API-ja OpenCL preko Vulkan.
Izvor: opennet.ru
