OpenCL

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
Notă despre dezambiguizare.svg Dezambiguizare - Dacă sunteți în căutarea altor semnificații, consultați OpenCL (dezambiguizare) .
OpenCL
software
Siglă
Exemplu de captură de ecran
Tip limba software-ului (nu este listat )
Dezvoltator Grupul Khronos
Data primei versiuni 8 decembrie 2008
Ultima versiune 3.0 (30 septembrie 2020)
Ultima versiune beta 2.2 (15 mai 2016)
Sistem de operare Multiplatform
Limba C.
C ++
Licență Royalty Free
( licență gratuită )
Site-ul web www.khronos.org/opencl

OpenCL ( Open C omputing L anguage, tradus în italiană „limbaj de calcul deschis”) este un cadru bazat pe limbaj ANSI C și C ++ cu o structură de dispozitiv gazdă care poate fi rulată pe o varietate de platforme, procesoare , GPU-uri și alte tipuri de procesoare. În special, potențialul OpenCL este bine exprimat prin arhitecturi puternic paralelizabile și puternice, cum ar fi GPU-urile, și în acest caz vorbim despre câmpul GPGPU . Codul nucleului bazat pe limbajul de programare OpenCL C sau versiunea OpenCL C ++ (bazată pe standardele C99 și C ++ 14) este executat pe diferite dispozitive.

Istorie

Standardul a fost inițial propus de Apple , ulterior ratificat de același lucru împreună cu principalele companii din sector ( Intel , NVIDIA , AMD ) și finalizat în cele din urmă de consorțiul non-profit Khronos Group .

Numele OpenCL a fost conceput în analogie cu OpenGL și OpenAL , ca toate standardele industriale deschise, deși cu scopuri diferite: primul care exploatează potențialul GPU-urilor actuale dincolo de redarea grafică, iar celelalte, respectiv, pentru grafica 3D și redarea.

OpenCL este acceptat pe plăci video AMD și NVIDIA [1] (atât pentru consumatori, cât și pentru gpu profesionale), pe Xilinx și Altera FPGA și pe procesoare ARM . În ceea ce privește sistemele de operare, acesta este certificat pe OS X Snow Leopard [2] în timp ce este disponibil pe sistemele Linux și Windows .

Multe programe oferă suport nativ pentru bibliotecile OpenCl: ArrayFire , Adobe Photoshop , Gimp , Autodesk Maya , FFmpeg , x264, Libreoffice Calc , Microsoft Excel și multe altele.

Grupul Khronos și- a anunțat intenția de a fuziona bibliotecile OpenCl cu API-urile Vulkan , transformându-le într-o singură platformă de dezvoltare atât pentru sectoarele de jocuri, cât și pentru cele de gpgpu.

Versiuni

1.0

Propunere finală pentru versiunea 1.0 pe 18 noiembrie 2008 și lansată oficial pe 8 decembrie 2008. La 9 decembrie 2008, Nvidia și-a anunțat intenția de a adăuga suport complet pentru specificația OpenCL 1.0 la GPU Computing Toolkit, în timp ce RapidMind a anunțat adoptarea OpenCL în cadrul platformei de dezvoltare pentru a sprijini GPU-uri de la diferiți furnizori cu o singură interfață. A fost utilizat cu Mac OS X Snow Leopard pe 28 august 2009, în timp ce IBM a lansat prima sa implementare OpenCL ca parte a compilatoarelor XL pe 30 octombrie 2009, AMD a decis în schimb să sprijine OpenCL pentru AMD FireStream (cunoscut anterior ca „CTM (Aproape de metal) "), implementând suportul în martie 2010.

1.1

Ratificat de Grupul Khronos la 14 iunie 2010 și adaugă caracteristici semnificative pentru o mai mare flexibilitate, funcționalitate și performanță de programare paralelă, inclusiv:

  • Noi tipuri de date, inclusiv vectori de 3 componente și formate de imagine suplimentare;
  • Gestionarea comenzilor din mai multe fire de gazdă și tampoane de procesare pe mai multe dispozitive;
  • Operații pe regiunile unui tampon, inclusiv citirea, scrierea și copierea regiunilor dreptunghiulare 1D, 2D sau 3D;
  • Utilizarea avansată a evenimentelor pentru a ghida și controla executarea comenzii;
  • Introduceri suplimentare de funcții C, cum ar fi cleme întregi, shuffle și copii asincrone stride;
  • Îmbunătățirea interoperabilității OpenGL prin partajarea eficientă a imaginilor și bufferelor prin conectarea evenimentelor OpenCL și OpenGL.
1.2

Lansat pe 15 noiembrie 2011, care a adăugat caracteristici semnificative față de versiunile anterioare în ceea ce privește performanța și funcționalitatea pentru programarea paralelă. Cele mai importante caracteristici includ:

  • Partiționarea dispozitivului: capacitatea de partiționare a unui dispozitiv în sub-dispozitive, astfel încât sarcinile de lucru să poată fi atribuite unităților de procesare individuale. Acest lucru este util pentru rezervarea zonelor dispozitivului pentru a reduce latența pentru sarcinile critice în timp.
  • Compilare separată și legarea obiectelor: funcționalitatea de a compila OpenCL în biblioteci externe pentru includerea în alte programe.
  • Suport pentru imagini avansate: 1.2 adaugă suport pentru imagini 1D și matrice de imagini 1D / 2D. În plus, extensiile de partajare OpenGL permit acum utilizarea texturilor OpenGL 1D și a matricilor de texturi 1D / 2D pentru a crea imagini OpenCL.
  • Kernel încorporat: Dispozitivele personalizate care conțin funcționalități specifice specifice sunt acum mai bine integrate în cadrul OpenCL. Nucleele pot fi chemate să utilizeze aspectele specializate sau neprogramabile ale hardware-ului subiacent. Exemplele includ codificarea / decodarea video și procesoarele de semnal digital.
  • Funcționalitate DirectX: partajarea suportului de suprafață DX9 permite partajarea eficientă între OpenCL și suprafețele de suport DX9 sau DXVA. La fel, pentru DX11, partajarea perfectă între suprafețele OpenCL și DX11 este activată.
  • Abilitatea de a forța conformitatea IEEE 754 pentru matematică cu virgulă mobilă cu o singură precizie: OpenCL permite implicit versiunile cu o singură precizie a operațiunilor de divizare, reciprocă și rădăcină pătrată să fie mai puțin precise decât valorile rotunjite corespunzător decât IEEE 754. Dacă programatorul transmite argumentul liniei de comandă "-cl-fp32-correct-rounded-divide-sqrt" către compilator, aceste trei operații vor fi calculate la cerințele IEEE 754 dacă implementarea OpenCL acceptă acest lucru și nu va compila dacă implementarea OpenCL nu nu acceptă aceste operații de calcul la valori rotunjite corect, așa cum sunt definite de specificația IEEE 754. Această capacitate este completată de capacitatea de a interoga implementarea OpenCL pentru a determina dacă aceste operațiuni pot fi efectuate în conformitate cu acuratețea IEEE 754.
2.0

Lansat pe 18 noiembrie 2013, actualizările și completările la OpenCL 2.0 includ:

  • Memorie virtuală partajată
  • Paralelism imbricat
  • Spațiu de adresă generic
  • Imagini
  • Atomică C11
  • Țevi
  • Extensie de driver pentru client instalabil Android
2.1

Ratificarea și lansarea specificației provizorii OpenCL 2.1 a fost anunțată pe 3 martie 2015 la Conferința dezvoltatorilor de jocuri din San Francisco. OpenCL 2.1 adaugă suport oficial, deși limitat, pentru un subset static de C ++ 14 ca limbă de nucleu. SPIR-V este folosit ca limbaj intermediar care permite limbajului de nivel înalt front-end să împărtășească o construcție de obiective comune. Actualizările API OpenCL includ:

  • Caracteristici suplimentare ale subgrupului
  • Copierea obiectelor și stărilor kernelului
  • Interogare cu temporizator cu latență scăzută
  • Ingerarea codului SPIR-V prin runtime
  • Prioritate de executare a sfaturilor de coadă
  • Expedieri de dimensiuni zero pentru oaspeți

AMD, ARM, Intel, HPC și YetiWare au declarat suport pentru OpenCL 2.1.

2.2

Versiunea 2.2, publicată în mai 2017, introduce noi funcții importante:

  • Suport complet pentru C ++ 14, inclusiv șabloane, clase, expresii lambda etc.
  • Noua versiune SPIR-V
  • Noua versiune a SYCL


3.0 Final (septembrie 2020)

Versiunea 3.0 este o revizuire majoră a întregului „proiect” OpenCl, deoarece dezvoltatorii Kronos Group au considerat că nucleul potențialului limbii, și anume flexibilitatea și puterea, se pierde. Din acest motiv, au decis să „revină”, ca bază, la versiunea 1.2, făcând opționale toate caracteristicile versiunilor 2.x. De asemenea, au introdus un nou strat pentru limbajul C ++ (OpenCl pentru C ++ în loc de OpenCl C ++) și o nouă versiune a SPIR-V pentru a permite dezvoltatorilor acces mai ușor, dar nu mai puțin performant, la limbaj.

Mai mult, cu această versiune, grupul Kronos a decis să programeze o foaie de parcurs mai consistentă și mai rapidă în introducerea de noi caracteristici și / sau versiuni ale limbajului.


Notă

  1. ^ Produse Khronos
  2. ^ https://www.apple.com/it/macosx/technology/#opencl Arhivat 22 martie 2011 la Internet Archive . Secțiunea oficială Apple OpenCL

Elemente conexe

  • CAL (anterior CTM (Close To Metal) ), cadrul AMD pentru programarea GPU-urilor sale AMD Radeon HD și FireStream. Modelul de programare propus este de tip streaming , cu referințe puternice la limbaje orientate pe date. Folosește o specializare de la Brook, numită Brook + de inspirație vectorială. Acest limbaj este acum abandonat.
  • CUDA , cadru C propus de Nvidia pentru programarea GPU-urilor începând de la familia GeForce G80. Acesta include un compilator pentru un superset al limbajului C - NVCC - și un set de biblioteci primitive implementate la diferite niveluri de complexitate. Acesta include un set mare de exemple de aplicații și un mediu de emulare și depanare. Compatibil cu MSVC 2005 (platforma Windows XP ), GCC ( platforme Linux și macOS ).
  • Intel Larrabee

Alte proiecte

linkuri externe

Controlul autorității LCCN ( EN ) sh2011002885
Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT