programmatūra · 5 min · 08.09.2026

Mesa draiveris nocl dod OpenCL uz NVIDIA CUDA: LuxMark 57 702 pret 64 009

Red Hat inženieris Karols Herbsts Mesa projektam ir piedāvājis Gallium3D draiveri, kas OpenCL programmas izpilda caur NVIDIA slēgtā draivera CUDA saskarni. Draivera nosaukums ir nocl. LuxMark testā uz NVIDIA RTX A6000 tas savāc 57 702 punktus, bet NVIDIA pašas OpenCL kaudze tajā pašā kartē dod 64 009. Sanāk aptuveni 90 % no slēgtā draivera ātruma.

Ideja nāca no sarunas XDC konferencē. Pieteikumu Nr. 37831 Herbsts atvēra 2025. gada 11. oktobrī, aptuveni nedēļu pēc tam, kad tika mājās un piekļuva NVIDIA kartei. Kods maina 34 failus, pievieno 893 rindas un izmet 42. Zem tā ir 102 komentāri. Šogad XDC notiek no 28. līdz 30. septembrim Toronto. Herbsts tur par nocl lasīs atsevišķu priekšlasījumu.

Kā tas strādā

nocl mērķis ir libcuda.so, kas ir CUDA draivera saskarne. CUDA izpildlaiks šeit nav iesaistīts. Bibliotēka nāk kopā ar NVIDIA slēgto GPU draiveri. Palaišanai tāpēc nekas papildus nav jāinstalē. Būvēšanai gan vajag CUDA izstrādes pakotnes.

GPU kodu draiveris ģenerē tāpat kā pārējie Mesa draiveri: nolaiž Mesa kopējo NIR starpvalodu uz aizmugures IR. Šeit aizmugures IR ir PTX. Tālāk to pārņem PTXJIT kompilators, kas jau ir CUDA draivera saskarnē. Pats draiveris ir rakstīts C valodā, PTX ģenerēšana ir Rustā.

PTX ģenerēšana tīrā C valodā ir mokas, jo virkņu apstrāde un formatēšana tur ir diezgan kaitinoša, tāpēc šo daļu es gribēju uzrakstīt Rustā.

Pieteikumā ir 12 komiti. Tikai viens no tiem pievieno pašu draiveri. Pārējie labo rusticl frontendu: apakšgrupu paplašinājumu pārbaudes, kļūdu kodus rindu īpašībām un parakstīto nuļļu saglabāšanu SPIR-V ievadē. Herbsts pieteikuma aprakstā par dizainu raksta īsi: viņš turpināja rakstīt kodu un tas kaut kā sāka strādāt.

Divdesmit paplašinājumi, ko NVIDIA OpenCL nedod

Herbsts uzskaita 20 paplašinājumus, kas nocl darbojas. NVIDIA pašas OpenCL ieviesumā to nav. Daži no saraksta:

  • cl_khr_il_program, tas nozīmē SPIR-V atbalstu
  • cl_khr_fp16
  • cl_khr_integer_dot_product
  • cl_khr_extended_bit_ops
  • cl_khr_subgroup_ballot, cl_khr_subgroup_shuffle un vēl pieci apakšgrupu paplašinājumi
  • cl_khr_kernel_clock
  • cl_ext_buffer_device_address

SPIR-V trūkums NVIDIA OpenCL draiverī ir vecs sāpju punkts. Programmām, kas kodolus piegādā kā SPIR-V, uz NVIDIA kartēm līdz šim nācās vai nu turēt līdzi OpenCL C avotkodu, vai meklēt apkārtceļu caur CUDA. Pats Herbsts saraksta beigās raksta, ka daži lasītāji uz to paskatīsies un neticēs, bet paplašinājumi tiešām strādā.

Testi iet, attēli neiet

Khronos konformitātes komplektu Herbsts palaida ar savu skriptu saīsinātā režīmā. Rezultāts: 3886 nokārtoti, 4 kritušies, nulle avāriju. Kritušos viņš saista ar denormalizētu skaitļu apstrādi un fp16.

Attēlu atbalsta pagaidām nav vispār. Aparatūras līmenī SM86 ir iekodēts fiksēti, tas ir Ampere un 40. sērijas kartes. Herbsts raksta, ka NIR uz PTX kods vienkārši neņem vērā SM līmeni un ka to nebūtu grūti salabot. Trūkst arī cl_gl_sharing. 64 bitu atomiskās operācijas un FP64 nav tāpēc, ka tos neatbalsta arī pats rusticl.

Laika zīmogus draiveris mēra ar cuEventElapsedTime. Herbsts pats saka, ka tas nav precīzs un ka pareizo veidu vajadzētu parādīt kādam, kas CUDA pārzina labāk. Attēlu atbalstam viņš atvēl vēl vienu nedēļu darba, bet piebilst, ka nav pārliecināts par motivāciju to pabeigt.

Kāpēc atvērtais OpenCL uz NVIDIA vispār vajadzīgs

Rusticl ir Mesa OpenCL ieviesums Rust valodā. Mesa 26.2, kas iznāca augustā, tam iedeva OpenCL 3.1 uz Apple AGX, Intel, AMD, Vulkan aizmugures un CPU programmatūras aizmugures. NVIDIA šajā sarakstā nav. Uz NVIDIA aparatūras pilna atvērtā OpenCL ceļa joprojām nav.

nocl šo caurumu aizver no otras puses. Frontends paliek rusticl, zemākais slānis ir NVIDIA slēgtais draiveris. Kāpēc tas kādam vajadzīgs, Herbsts publiski nesaka. Pieteikuma aprakstā viņš raksta, ka par konkrēto iemeslu runāt nevar un ka ideja nebija viņa paša.

Praktiskais ieguvums ir tas pats 20 paplašinājumu saraksts. Ja programmai uz NVIDIA kartes vajag apakšgrupu balsošanu vai SPIR-V ievadi, nocl to dod. Cena ir atlikušie 10 % ātruma. Herbsts atzīmē, ka NVIDIA OpenCL kaudze izdod ievērojami īsāku un labāk optimizētu PTX, kas JIT kompilatoram, iespējams, ir vienkāršāk apstrādājams.

Pārējais XDC saturs

Herbsts Toronto lasīs arī rusticl statusa atskaiti. Blakus tam programmā ir priekšlasījums par to, vai Vulkan draiveriem tagad vajag savu Gallium slāni. To lasa Faith Ekstrand, kas Mesa strādā pie NVK un NIR. Vulkan draiveri sākumā bija vienkārši. Tagad API ir simtiem paplašinājumu. Koda dublēšanās starp draiveriem ir liela un Gallium3D savulaik tādu pašu problēmu atrisināja OpenGL pusē.

Erik Faye-Lund tajā pašā konferencē piedāvās izmest TGSI, veco Gallium3D starpvalodu. Lielākā daļa draiveru jau ģenerē NIR. Konference notiek Daniels Spectrum telpās Toronto.

Pieteikums Nr. 37831 joprojām ir atvērts. Pēdējā koda izmaiņa tajā ir no 2025. gada 9. novembra.

Avoti

komentārisaruna

Komentāri

Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.

Pievieno komentāru

Tavs e-pasts netiks publicēts. Obligātie lauki atzīmēti.

vēl no programmatūrasaistītie