PoCL 7.2 laidiens 4. septembrī pievienoja projektam otru oficiāli apstiprinātu OpenCL 3.0 konfigurāciju: RISC-V. Līdz šim Khronos grupas atzītais rezultāts sedza tikai x86-64 procesorus. Tagad tas pats CPU draiveris ir izturējis sertifikācijas testus arī uz RV64GC sistēmas ar RVA22 profilu un vektoru paplašinājuma 1.0 versiju.
Testi dzīti ar OpenCL-CTS komplektu, kura tags ir v2026-03-25-00. x86-64 pusē pārbaudīts AVX-512 koda ceļš uz AMD Ryzen 9 9900X procesora ar Zen 5 kodoliem. Abās konfigurācijās nokārtoti divi atsevišķi ievades varianti: OpenCL C un SPIR-V. Laidiena piezīmes ir publicētas GitHub, kods joprojām iznāk ar MIT licenci.
Ko šeit nozīmē vārds “atbilstošs”
Khronos sertifikācija nav atzīme par ātrumu. Tā apliecina, ka konkrēta programmatūras un aparatūras kombinācija nokārtoja pilnu atbilstības testu komplektu. Tikai pēc iesnieguma apstiprināšanas implementācija drīkst saukties par OpenCL implementāciju, nevis par “OpenCL saderīgu”.
PoCL iepriekšējo iesniegumu Khronos saņēma 2024. gada decembrī un pieņēma 2025. gada janvārī. To testēja uz Ubuntu 24.04.1 ar 12. paaudzes Intel Core i9-12900 procesoru, izmantojot koda versiju ar commit numuru bbe47f3d6. Sertifikāts sedza x86-64 procesorus, sākot no SSE2 līdz AVX-512.
Oficiālā OpenCL 3.0 atbilstība panākta, izmantojot OpenCL-CTS tagu v2026-03-25-00, konfigurācijās x86-64 ar AVX-512 un RISC-V RV64GC, katrā ar OpenCL C un SPIR-V.
Projekta dokumentācijā par atbilstību ir arī brīdinājums, ko viegli palaist garām. Sertifikācija attiecas uz CPU draiveriem, tas ir, uz cpu un cpu-minimal. Pārējie draiveri, tostarp CUDA un TCE, paliek pie OpenCL 1.2 līmeņa.
Kam PoCL vispār ir vajadzīgs
PoCL kompilē OpenCL kodolus caur LLVM un izpilda tos uz centrālā procesora. Tas noder divās situācijās. Pirmā ir izstrāde un CI, kur ir jāizpilda OpenCL kods bez GPU. Otrā ir aparatūra, kurai ražotājs OpenCL draiveri nav uzrakstījis vispār.
RISC-V ir tieši otrais gadījums. Vienplates datoriem ar RV64GC kodoliem nav neviena ražotāja OpenCL steka, tāpēc PoCL bieži ir vienīgā iespēja palaist esošu OpenCL kodu. Sertifikācija nozīmē, ka šis kods uz RISC-V uzvedas tā, kā to apraksta specifikācija, nevis aptuveni tā.
RVA22 ir RISC-V International profils, kas fiksē obligāto paplašinājumu kopu lietotāju klases procesoriem. Bez tāda profila katra mikroshēma būtu jāatbalsta atsevišķi, jo bāzes RV64GC komplekts pats par sevi ir šaurs.
Blakus CPU draiverim projektā ir arī CUDA, Level Zero, OpenASIP un attālinātais draiveris. Tie visi paliek ārpus jaunā sertifikāta.
LLVM logs pavirzās uz priekšu
Katrs PoCL laidiens pārzīmē atbalstīto LLVM versiju robežas. 7.2 izmet LLVM 17. Zemākā pieņemtā versija tagad ir 18.
Augšgals sadalās divās daļās. LLVM 22 strādā ar CUDA, Level Zero un CPU ierīcēm. LLVM 23 strādā tikai ar CPU ierīci. Starp tām ir viens caurums: CUDA draiveris ar LLVM 21 nesadarbojas. OpenASIP draiveris turpretī tieši uz LLVM 21 balstās, jo tas pārgāja uz OpenASIP 2.2.
Būvēšanas pusē pārdēvēta CMake opcija LLVM_SPIRV. Tagad tā saucas HOST_LLVM_SPIRV. Konfigurēšanai var padot gan llvm-config binārfailu, gan LLVMConfig.cmake failu. Atkļūdošanai pievienots POCL_DEBUG_LLVM_OPTS mainīgais, ar kuru LLVM opcijas var padot tieši.
Septiņi jauni paplašinājumi CPU draiverī
CPU draiveris ieguva cl_khr_extended_bit_ops, cl_khr_device_uuid, cl_khr_suggested_local_work_size, cl_khr_integer_dot_product, cl_khr_kernel_clock, cl_khr_spirv_linkonce_odr un cl_khr_spirv_no_integer_wrap_decoration. Vairāki no tiem ir tieši tas, ko meklē mašīnmācīšanās bibliotēkas: veselo skaitļu skalārreizinājums, pulkstenis kodola iekšienē mērījumiem, ierīces UUID.
Mainījās arī tas, kā kodoli nonāk atmiņā. Saistīšana tagad notiek paša procesa iekšienē caur lld bibliotēkas API, nevis izsaucot ārēju linkeri. Papildus tam var ieslēgt JIT kompilāciju caur LLVM ORC dzinēju. Atgriezies atbalsts programmas līmeņa mainīgajiem, kas CPU draiverī bija atslēgts.
Starp labojumiem ir viens, kas izskatās pēc klasiskas rakstīšanas kļūdas ar sekām: USM rādītāju apstrādē kods lasīja ārpus piešķirtās atmiņas, jo baitu skaits bija ierakstīts tur, kur bija jābūt rādītāju skaitam. Salaboti arī clCreateContext, clSetKernelArg un clSetKernelExecInfo izsaukumi. Laidiena arhīvi ir parakstīti ar GPG.
Attālinātais draiveris un MLIR mēģinājums
Attālinātais draiveris, kas ļauj OpenCL izsaukumus sūtīt pa tīklu uz citu mašīnu, dabūja clLinkProgram labojumu un beidza spontāni pārslēgt savienojumu. Tam pievienota tīkla notikumu izsekošana, ar ko var redzēt, kur laiks pazūd starp klientu un serveri. CUDA draiverī parādījās apakšgrupu operācijas un vairāki trūkstošie clGetKernelSubgroupInfo parametri.
Atsevišķi no visa tā koda bāzē aug eksperimentāla ķēde, kas OpenCL C kodolus CPU vajadzībām kompilē caur MLIR. Tā pieņem divus priekšgalus: Polygeist un ClangIR. Pagaidām tā prot tikai pamata lokālo atmiņu.
Phoronix laidiena aprakstā MLIR ķēdi nepiemin vispār. Praktiska nozīme šobrīd ir divām rindiņām sertifikācijas sarakstā. Būvēšanas skriptiem, kas padod LLVM_SPIRV, pirms atjaunināšanas jāpārraksta šī rinda uz HOST_LLVM_SPIRV.
Komentāri
Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.