Softwareontwikkelaars kijken meer dan ooit naar hoe ze hun applicaties kunnen versnellen zonder geoptimaliseerde processorspecifieke code te hoeven schrijven. SYCL is de industriestandaard voor C++-versnelling, waardoor ontwikkelaars een platform hebben om hoogwaardige code in standaard C++ te schrijven, waardoor de prestaties van accelerators en gespecialiseerde processors worden ontgrendeld. Codeplay heeft onlangs een belangrijke bijdrage geleverd aan DPC++, een open source-implementatie van de SYCL-standaard, door ondersteuning voor NVIDIA-hardware toe te voegen.

DPC++ maakt deel uit van het oneAPI-programmeermodel en is een open, architectuuroverschrijdende taal die is gebaseerd op de ISO C++- en Khronos SYCL-normen. DPC++ breidt deze standaarden uit en biedt expliciete parallelle constructies en offload-interfaces om een ​​breed scala aan computerarchitecturen en processors te ondersteunen. Uiteindelijk is het doel van dit project om DPC++ toe te voegen aan het open source LLVM-project.

Nu DPC++ zich kan richten op NVIDIA-hardware, is de volgende stap het inschakelen en optimaliseren van veelgebruikte bibliotheken die SYCL gebruiken, zodat ze kunnen op deze GPU's worden uitgevoerd.

De oneMKL BLAS-bibliotheek is de eerste wiskundige bibliotheekimplementatie voor oneAPI die ondersteuning voor NVIDIA GPU's mogelijk maakt en maakt gebruik van de interoperabiliteitsfuncties die zijn geïmplementeerd door DPC++. Dit werk bestaat uit een grote open source bijdrage aan het oneAPI-initiatief van Codeplay. Het biedt ook de mogelijkheid voor ontwikkelaars om SYCL te gebruiken als alternatief voor het gebruik van CUDA voor het ontwikkelen van hoogwaardige parallelle applicaties.

BLAS (Basic Linear Algebra Subprogramma's) zijn een reeks bewerkingen die matrixvermenigvuldiging, vectoroptelling en lineaire combinaties omvatten, en zijn de standaardbouwstenen voor veel softwaretoepassingen. De BLAS API biedt een manier om de prestaties op verschillende hardware-architecturen te optimaliseren met behoud van een gemeenschappelijke interface voor ontwikkelaars.

Deze implementatie van BLAS biedt een functionaliteitsniveau dat ontwikkelaars in staat stelt kunstmatige intelligentie, high-performance computing en machine te gebruiken leren profiteren van de meest voorkomende reeks functies voor lineaire algebra. De oneMKL BLAS API's kunnen worden gecombineerd met andere wiskundebibliotheken om een ​​reeks processors en architecturen te targeten via een standaardinterface.

Veel ontwikkelaars over de hele wereld gebruiken al NVIDIA GPU's om hun applicaties te versnellen, en deze bijdrage stelt die ontwikkelaars in staat om krachtige, rekenintensieve applicaties te schrijven die op meerdere architecturen kunnen worden uitgevoerd met behulp van een platformonafhankelijke, open standaard programmeerinterface. Door SYCL te gebruiken, kunnen ontwikkelaars een enkele codebasis en doelprocessors van NVIDIA, Intel, AMD, Arm en anderen onderhouden.

Hoewel ondersteuning voor meerdere architecturen interessant is, is het belangrijk om hetzelfde prestatieniveau te kunnen bereiken dat ontwikkelaars zien bij het gebruik van de eigen NVIDIA CUDA-bibliotheken. Dus bij het implementeren van de BLAS-bewerkingen werden de native cuBLAS-interfaces gebruikt om ervoor te zorgen dat de uitvoering hetzelfde volgde als de native CUDA-bibliotheek. Dit is dezelfde methode die wordt gebruikt in de kernondersteuning voor NVIDIA GPUS die is ontwikkeld door Codeplay voor DPC++. De functie-aanroepen worden gerouteerd via native CUDA-interfaces om de prestaties te behouden.

De eerste bijdrage die we hebben geleverd is in een “experimenteel” staat en hoewel het volledig functioneel is en prestatiebenchmarks vergelijkbare resultaten laten zien met OpenCL native en CUDA native code, verwachten we in de loop van de tijd enkele prestatieverbeteringen te kunnen doorvoeren en eventuele kleine problemen op te lossen.

OneMKL BLAS uitproberen op NVIDIA GPU's

Volg deze stappen om uw machine in te stellen om gebruik te maken van de NVIDIA-ondersteuning voor oneMKL.

  • Kloon het MKL BLAS-broncodeproject
  • Volg de stapsgewijze instructies in het oneMKL README-bestand om de bibliotheek te bouwen
  • Zodra de bibliotheek is gebouwd en geïnstalleerd
    • Voeg de oneMKL.hpp toe aan uw toepassing
    • Stel uw SYCL-apparaatkiezer in om uw NVIDIA GPU te kiezen
    • Pas uw functieaanroepen aan om de NVIDIA GPU te selecteren
    • Koppel uw toepassing met liboneMKL.so

U vindt enkele voorbeelden in de oneMKL README over hoe u het headerbestand kunt opnemen en hoe u enkele van de functies van deze bibliotheek kunt oproepen.

Er is ook een voorbeeld van het instellen van de SYCL-apparaatkiezer voor NVIDIA GPU's in de DPC++ Aan de slag-gids.

Ondersteuning krijgen voor oneMKL BLAS op NVIDIA GPU's

U kunt ondersteuning krijgen via de oneMKL GitHub repository Issues. Als je een bug hebt ontdekt, zorg er dan voor dat je een manier opneemt om deze te reproduceren, idealiter met de broncode.

Rod Burns
Developer Relations Manager, Codeplay Software

0

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *