Course Outline

Invoering

  • Wat is OpenCL?
  • OpenCL versus CUDA versus SYCL
  • Overzicht van OpenCL functies en architectuur
  • Het opzetten van de ontwikkelomgeving

Aan de slag

  • Een nieuw OpenCL-project maken met behulp van Visual Studio-code
  • Het verkennen van de projectstructuur en bestanden
  • Het compileren en uitvoeren van het programma
  • De uitvoer weergeven met printf en fprintf

OpenCLAPI

  • Inzicht in de rol van OpenCL API in het hostprogramma
  • API OpenCL gebruiken om apparaatinformatie en mogelijkheden op te vragen
  • API OpenCL gebruiken om contexten, opdrachtwachtrijen, buffers, kernels en gebeurtenissen te creëren
  • API OpenCL gebruiken om opdrachten in de wachtrij te plaatsen, zoals lezen, schrijven, kopiëren, toewijzen, toewijzing ongedaan maken, uitvoeren en wachten
  • API OpenCL gebruiken om fouten en uitzonderingen af te handelen

OpenCL C

  • Inzicht in de rol van OpenCL C in het apparaatprogramma
  • OpenCL C gebruiken om kernels te schrijven die op het apparaat worden uitgevoerd en gegevens manipuleren
  • Gebruik maken van OpenCL C-gegevenstypen, kwalificaties, operators en expressies
  • Met behulp van OpenCL ingebouwde C-functies, zoals wiskunde, meetkunde, relationeel, enz.
  • Met behulp van OpenCL C-extensies en -bibliotheken, zoals atomic, image, cl_khr_fp16, enz.

OpenCL Geheugenmodel

  • Het verschil begrijpen tussen host- en apparaatgeheugenmodellen
  • OpenCL geheugenruimten gebruiken, zoals globaal, lokaal, constant en privé
  • OpenCL geheugenobjecten gebruiken, zoals buffers, afbeeldingen en pijpen
  • Gebruik van OpenCL geheugentoegangsmodi, zoals alleen-lezen, alleen-schrijven, lezen-schrijven, enz.
  • Met behulp van OpenCL geheugenconsistentiemodel en synchronisatiemechanismen

OpenCL Uitvoeringsmodel

  • Het verschil begrijpen tussen host- en apparaatuitvoeringsmodellen
  • Gebruik OpenCL werkitems, werkgroepen en ND-bereiken om het parallellisme te definiëren
  • Met behulp van OpenCL werkitemfuncties, zoals get_global_id, get_local_id, get_group_id, etc.
  • Gebruik van OpenCL werkgroepfuncties, zoals barrière, work_group_reduce, work_group_scan, etc.
  • Met behulp van OpenCL apparaatfuncties, zoals get_num_groups, get_global_size, get_local_size, enz.

Foutopsporing

  • Inzicht in de veelvoorkomende fouten en bugs in OpenCL programma's
  • Gebruik Visual Studio Code debugger om variabelen, breekpunten, call-stack, enz. te inspecteren.
  • CodeXL gebruiken om OpenCL programma's op AMD-apparaten te debuggen en analyseren
  • Intel VTune gebruiken om OpenCL programma's op Intel-apparaten te debuggen en te analyseren
  • NVIDIA Nsight gebruiken om OpenCL programma's op NVIDIA-apparaten te debuggen en analyseren

Optimalisatie

  • Inzicht in de factoren die de prestaties van OpenCL programma's beïnvloeden
  • Gebruik van OpenCL vectorgegevenstypen en vectorisatietechnieken om de rekenkundige doorvoer te verbeteren
  • Het gebruik van OpenCL technieken voor het afrollen van lussen en het maken van lussen om de controleoverhead te verminderen en de lokaliteit te vergroten
  • Gebruik van OpenCL lokaal geheugen en lokale geheugenfuncties om geheugentoegang en bandbreedte te optimaliseren
  • Het gebruik van OpenCL profilering en profileringstools om de uitvoeringstijd en het gebruik van middelen te meten en te verbeteren

Samenvatting en volgende stappen

Requirements

  • Een goed begrip van de C/C++-taal en parallelle programmeerconcepten
  • Basiskennis van computerarchitectuur en geheugenhiërarchie
  • Ervaring met opdrachtregelprogramma's en code-editors

Publiek

  • Ontwikkelaars die willen leren hoe ze OpenCL kunnen gebruiken om heterogene apparaten te programmeren en hun parallellisme te exploiteren
  • Ontwikkelaars die draagbare en schaalbare code willen schrijven die op verschillende platforms en apparaten kan worden uitgevoerd
  • Programmeurs die de lagere aspecten van heterogeen programmeren willen verkennen en hun codeprestaties willen optimaliseren
 28 Hours

Getuigenissen (1)

Related Courses

GPU Programming - OpenCL vs CUDA vs ROCm

28 Hours

Related Categories