De nieuwe versie van het PoCL 1.6 (Portable Computing Language OpenCL) project is zojuist uitgebracht . Belangrijkste verbeteringen in versie 1.6 zijn onder andere de compatibiliteit met Clang/LLVM 11.0, de verbeteringen aan de CUDA-prestaties en -functionaliteit, de verbeterde compatibiliteit met PowerPC en de uitgebreidere mogelijkheden voor OpenCL-debugging.
Voor degenen die niet bekend zijn met PoCL: het is een draagbare, open-source (MIT-licentie) implementatie van de OpenCL-standaard (1.2 met enkele 2.0-compatibele functies). Naast een zeer draagbare, multi-device (echt heterogene) open-source OpenCL-implementatie is een belangrijk doel van dit project om de interoperabiliteit van diverse OpenCL-compatibele apparaten te verbeteren door ze te integreren in één centraal beheerd platform.
Bovendien is een van de belangrijkste langetermijndoelen het verbeteren van de prestatieportabiliteit van OpenCL-programma's op apparaattypen die runtime- en compilatietechnieken gebruiken.
De OpenCL-kernelcompiler is gebaseerd op LLVM en Clang wordt gebruikt als de interface naar OpenCL C. Om adequate prestaties en draagbaarheid te bieden, kan de OpenCL-kernelcompiler gecombineerde functies genereren die verschillende hardwarebronnen kunnen gebruiken om de uitvoering van code parallel te laten lopen. , zoals VLIW, superscalar, SIMD, SIMT, multi-core en multi-threaded. Er is ondersteuning voor ICD-stuurprogramma's (Installable Client Driver). Er zijn backends om werk te bieden via CPU, ASIP (TCE / TTA), GPU op basis van HSA-architectuur en NVIDIA GPU (CUDA).
Belangrijkste nieuwe kenmerken van PoCL 1.6
Deze nieuwe versie van PoCL 1.6 benadrukt de mogelijkheid om deze implementatie te compileren met apparaatstuurprogramma's ingeschakeld tijdens het compileren, evenals de beschikbaarheid van apparaten zal worden geverifieerd bij het opstarten (voorheen systemen waarop PoCL is gebouwd en ze hadden dezelfde controllerondersteuning moeten hebben). De mogelijkheid geïmplementeerd om de conda-pakketbeheerder te gebruiken om PoCL binaire pakketten te distribueren met CUDA-ondersteuning voor Linux-x86_64 en Linux-ppc64le-systemen.
Een andere opvallende verandering is de ondersteuning voor LLVM 11 samen met de uitgebreide mogelijkheden voor het debuggen van OpenCL-code bij gebruik van de CPU-controller.
Bovendien moet worden opgemerkt dat de prestatie-optimalisatie van de CUDA-backend is uitgevoerd, waardoor de bewerkingen met betrekking tot het gebruik van lokaal geheugen (FFT, GEMM) aanzienlijk zijn gestroomlijnd.
Benchmarks die SHOC-benchmarks gebruiken (die nu continu worden getest, tonen aan dat deze optimalisaties hebben geleid tot veel betere prestaties, met name voor benchmarks met lokaal geheugen zoals FFT en GEMM, vergeleken met een run van bovenstaande referentie. PoCL behaalt nu vaak concurrerende prestaties met Nvidia's eigen OpenCL-driver). We verwelkomen bijdragen om de onderliggende oorzaken van de resterende probleemgebieden te identificeren en weg te nemen. We verwelkomen ook bijdragen om de dekking van functies voor de OpenCL 1.2 / 3.0-standaarden te verbeteren.

- PoCL-prestaties in veel tests liggen nu dicht bij NVIDIA's eigen OpenCL-stuurprogramma.
- De compilatieparameter HARDENING_ENABLE toegevoegd om compileropties in staat te stellen een veiligere libpocl.so te genereren ten koste van prestatievermindering.
- Ondersteuning teruggestuurd voor PowerPC 8/9-systemen, waarvoor het OpenCL-implementatieniveau bij gebruik van pthread- en CUDA-apparaten overeenkomt met het CUDA-niveau op x86_64-systemen.
- ABI gewijzigd voor CUDA-kernels die __ lokale blokken gebruiken. Na de upgrade moeten gebruikers de pocl-cache wissen.
- Ondersteuning verwijderd voor de SINGLE_LLVM_LIB build-optie, in plaats van STATIC_LLVM en llvm-config te gebruiken om te definiëren aan welke bibliotheken moet worden gekoppeld.
Als je tot slot meer wilt weten over deze nieuwe versie, kun je de details in de oorspronkelijke aankondiging raadplegen.
Wie meer wil weten over deze implementatie, kan de officiële website raadplegen , waar documentatie en downloadbare bestanden te vinden zijn.
De projectcode wordt gedistribueerd onder de MIT-licentie en het werk wordt ondersteund op platforms X86_64, MIPS32, ARM v7, AMD HSA APU en verschillende gespecialiseerde TTA-processors met de VLIW-architectuur.