Thank you for sending your enquiry! One of our team members will contact you shortly.
Thank you for sending your booking! One of our team members will contact you shortly.
Kursplan
Innføring
- Hva er OpenCL?
- OpenCL vs CUDA vs SYCL
- Oversikt over OpenCLs funksjoner og arkitektur
- Oppsett av utviklingsmiljøet
Komme i Gang
- Opprette et nytt OpenCL-prosjekt ved bruk av Visual Studio Code
- Utrede prosjektstrukturen og filene
- Kompilere og kjøre programmet
- Vise utdata ved bruk av printf og fprintf
OpenCL API
- Forstå rollen til OpenCL API i vertsprogrammet
- Bruke OpenCL API til å spørre om enhetens informasjon og egenskaper
- Bruke OpenCL API til å opprette kontekster, kommandokøer, buffere, kjerner, og hendelser
- Bruke OpenCL API til å kjøre inn kommandoer, som lese, skrive, kopiere, mappere, demappere, kjøre, og vente
- Bruke OpenCL API til å håndtere feil og unntak
OpenCL C
- Forstå rollen til OpenCL C i enhetsprogrammet
- Bruke OpenCL C til å skrive kjerner som kjører på enheten og manipulerer data
- Bruke OpenCL C datatyper, kvalifisatorer, operatører, og uttrykk
- Bruke OpenCL C innebygde funksjoner, som matematikk, geometri, relasjonsfunksjoner, etc.
- Bruke OpenCL C utvidelser og biblioteker, som atomisk, bilder, cl_khr_fp16, etc.
OpenCL Minne Modell
- Forstå forskjellen mellom verts- og enhetsminnemodeller
- Bruke OpenCL minneområder, som global, lokal, konstant, og privat
- Bruke OpenCL minneobjekter, som buffere, bilder, og rør
- Bruke OpenCL minnetilgangsmoduser, som kun-lesing, kun-skriving, lese-og-skriving, etc.
- Bruke OpenCL minnekonsistensmodell og synkroniseringsmekanismer
OpenCL Kjørings Modell
- Forstå forskjellen mellom verts- og enhetskjøringsmodeller
- Bruke OpenCL arbeidsenheter, arbeidsgrupper, og ND-områder til å definere parallelisme
- Bruke OpenCL arbeidsenhetsfunksjoner, som get_global_id, get_local_id, get_group_id, etc.
- Bruke OpenCL arbeidsgruppfunksjoner, som barrier, work_group_reduce, work_group_scan, etc.
- Bruke OpenCL enhetsfunksjoner, som get_num_groups, get_global_size, get_local_size, etc.
Feilsøking
- Forstå vanlige feil og feil i OpenCL-programmer
- Bruke Visual Studio Code feilsøker til å inspisere variabler, bruddpunkt, kallstakk, etc.
- Bruke CodeXL til å feilsøke og analysere OpenCL-programmer på AMD-enheter
- Bruke Intel VTune til å feilsøke og analysere OpenCL-programmer på Intel-enheter
- Bruke NVIDIA Nsight til å feilsøke og analysere OpenCL-programmer på NVIDIA-enheter
Optimalisering
- Forstå faktorer som påvirker ytelsen til OpenCL-programmer
- Bruke OpenCL vektordatatyper og vektoriseringsteknikker til å forbedre aritmetisk gjennomstrømning
- Bruke OpenCL løkkedekking og løkketiling til å redusere kontrolloverhead og øke lokalitet
- Bruke OpenCL lokalminne og lokalminnefunksjoner til å optimalisere minnetilganger og båndbredde
- Bruke OpenCL profilering og profileringverktøy til å måle og forbedre kjøretid og ressursutnyttelse
Oppsummering og Neste Skritt
Krav
- En forståelse av C/C++ språk og parallell programmeringskonsepter
- Grunnleggende kunnskap om datamaskinarkitektur og minnehierarki
- Erfaring med kommandolinjeverktøy og kodeeditorer
Målgruppe
- Utviklere som ønsker å lære å bruke OpenCL til å programmere heterogene enheter og utnytte deres parallelisme
- Utviklere som ønsker å skrive portabel og skalbar kode som kan kjøres på ulike plattformer og enheter
- Programmerere som ønsker å utforske lavnivåaspektene ved heterogen programmering og optimalisere kodeytelse
28 timer