Bedankt voor uw aanvraag! Een van onze medewerkers neemt binnenkort contact met u op
Bedankt voor uw boeking! Een van onze medewerkers neemt binnenkort contact met u op.
Duur 28 uren
Cursusaanbod
Inleiding
- Wat is OpenCL?
- OpenCL vs CUDA vs SYCL
- Overzicht van de functionaliteit en architectuur van OpenCL
- De ontwikkelomgeving inrichten
Aan de slag
- Een nieuw OpenCL-project maken in Visual Studio Code
- De projectstructuur en bestanden verkennen
- De programmassembleren en uitvoeren
- De uitvoer tonen met printf en fprintf
OpenCL API
- Het belang van de OpenCL API in het host-programma begrijpen
- De OpenCL API gebruiken om apparaatinformatie en -capaciteiten op te vragen
- De OpenCL API gebruiken om contexten, commando's, buffers, kernels en gebeurtenissen te maken
- De OpenCL API gebruiken om commando's in de wachtrij te plaatsen, zoals lezen, schrijven, kopiëren, mapping, unmapping, uitvoeren en wachten
- De OpenCL API gebruiken om fouten en uitzonderingen af te handelen
OpenCL C
- Het belang van OpenCL C in het apparaat-programma begrijpen
- OpenCL C gebruiken om kernels te schrijven die op het apparaat worden uitgevoerd en gegevens manipuleren
- OpenCL C datatypes, kwalificatoren, operatoren en expressies gebruiken
- OpenCL C ingebouwde functies gebruiken, zoals wiskunde, geometrie, relaties, etc.
- OpenCL C extensies en bibliotheken gebruiken, zoals atomic, image, cl_khr_fp16, etc.
OpenCL Geheugenmodel
- Het verschil tussen host- en apparaatgeheugenmodellen begrijpen
- OpenCL geheugenruimten gebruiken, zoals global, local, constant en private
- OpenCL geheugenobjecten gebruiken, zoals buffers, images en pipes
- OpenCL geheugentoegangsmodi gebruiken, zoals read-only, write-only, read-write, etc.
- Het OpenCL geheugenconsistentiemodel en synchronisatiemechanismen gebruiken
OpenCL Uitvoeringsmodel
- Het verschil tussen host- en apparaatuitergingsmodellen begrijpen
- OpenCL werk-items, werk-groepen en ND-reeksen gebruiken om parallelisme te definiëren
- OpenCL werk-itemfuncties gebruiken, zoals get_global_id, get_local_id, get_group_id, etc.
- OpenCL werk-groepfuncties gebruiken, zoals barrier, work_group_reduce, work_group_scan, etc.
- OpenCL apparaatfuncties gebruiken, zoals get_num_groups, get_global_size, get_local_size, etc.
Debuggen
- Veelvoorkomende fouten en bugs in OpenCL-programma's begrijpen
- De debugger van Visual Studio Code gebruiken om variabelen, breakpoints en de call stack te inspecteren
- CodeXL gebruiken om OpenCL-programma's te debuggen en te analyseren op AMD-apparaten
- Intel VTune gebruiken om OpenCL-programma's te debuggen en te analyseren op Intel-apparaten
- NVIDIA Nsight gebruiken om OpenCL-programma's te debuggen en te analyseren op NVIDIA-apparaten
Optimalisatie
- De factoren die de prestaties van OpenCL-programma's beïnvloeden, begrijpen
- OpenCL vector datatype en vectorisatietechnieken gebruiken om de arithmetische doorvoersnelheid te verbeteren
- OpenCL loop-unrolling en loop tiling technieken gebruiken om besturingsoverhead te verminderen en de localiteit te vergroten
- OpenCL lokaal geheugen en lokaal geheugenfuncties gebruiken om geheugentoegang en bandbreedte te optimaliseren
- OpenCL profilering en profilingtools gebruiken om de uitvoeringstijd en bronbenutting te meten en te verbeteren
Vereisten
- Kenis van de C/C++-taal en concepten voor parallelle programmering
- Basiskenis van computerarchitectuur en geheughenhierarchie
- Ervaring met command line tools en code-editors
Doelgroep
- Ontwikkelaars die willen leren hoe ze OpenCL kunnen gebruiken om heterogene apparaten te programmeren en hun parallelisme te benutten
- Ontwikkelaars die portable en schaalbare code willen schrijven die op verschillende platforms en apparaten kan draaien
- Programmeurs die de low-level aspecten van heterogene programmering willen verkennen en de prestaties van hun code willen optimaliseren