A fost publicată versiunea 6.0 a proiectului PoCL (Portable Computing Language OpenCL), care dezvoltă implementarea standardului OpenCL, independent de producătorii de accelerator grafic și permite utilizarea diferitelor backend-uri pentru executarea nucleelor OpenCL pe diverse tipuri de procesoare grafice și centrale. Codul proiectului este distribuit sub licența MIT. Este suportat pe platforme X86_64, MIPS32, ARM v7, AMD HSA APU, GPU NVIDIA și diverse procesoare specializate ASIP (Application-Specific Instruction-set Processor) și TTA (Transport Triggered Architecture) cu arhitectură VLIW.
Implementarea compilatorului de nucleu OpenCL se bazează pe LLVM, iar Clang este utilizat ca frontend pentru OpenCL C. Pentru a asigura portabilitate și performanță adecvată, compilatorul nucleelor OpenCL poate genera funcții combinate care pot utiliza diverse resurse hardware pentru a paraleliza executarea codului, precum VLIW, supercalaritate, SIMD, SIMT, multicore și multithreading. Există suport pentru drivere ICD
(Installable Client Driver). Există backend-uri pentru asigurarea funcționării prin CPU, ASIP (TCE/TTA), GPU pe baza arhitecturii HSA și GPU NVIDIA (prin libcuda).
În noua versiune:
- A fost adăugat suport pentru Clang/LLVM 18.0, iar suportul pentru LLVM 10, 11, 12 și 13 a fost oprit.
- A fost implementat un nou backend cpu-tbb, care utilizează biblioteca OneTBB dezvoltată de Intel pentru a paralelezi operațiile și a planifica execuția sarcinilor.
- În backend-ul cpu, care asigură executarea nucleelor OpenCL pe CPU, a fost adăugat suport pentru standardul de programare paralelă OpenMP, s-a adăugat metoda clGetDeviceAndHostTimer(), iar extensiile experimentale cl_pocl_svm_rect, cl_pocl_command_buffer_svm și cl_pocl_command_buffer_host_buffer au fost implementate.
- În backend-ul „Remote”, destinat organizării calculului distribuit prin delegarea procesării comenzilor OpenCL pe alte gazde din rețea, pe care rulează procesul de fundal pocld, a fost adăugat suport pentru CG SVM (Coarse-Grain Shared Virtual Memory), posibilitatea de accesare a backend-ului utilizând protocolul de comunicare Vsock și suport pentru compilarea și legarea programelor folosind funcțiile clCompileProgram() și clLinkProgram().
- În backend-ul LevelZero, care folosește API Level Zero, este permisă crearea de buffer-e cu dimensiunea mai mare de 4GB, iar optimizări ale proceselor de sincronizare au fost implementate.
- În backend-ul CUDA au fost implementate operații sub_group_shuffle și sub_group_shuffle_xor, iar limita CL_DEVICE_MAX_MEM_ALLOC_SIZE a fost crescută.
Sursa: opennet.ro
