Takk for at du sendte din henvendelse! En av våre teammedlemmer vil kontakte deg straks.
Takk for at du sendte din bestilling! En av våre teammedlemmer vil kontakte deg straks.
Varighet 28 timer
Kursplan
Introduksjon
- Hva er OpenCL?
- OpenCL vs. CUDA vs. SYCL
- Overblikk over OpenCL-funksjoner og arkitektur
- Oppsett av utviklermiljø
Kom i gang
- Opprette et nytt OpenCL-prosjekt med Visual Studio Code
- Utforske prosjektstrukturen og filer
- Kompilere og kjøre programmet
- Vise utdata ved hjelp av printf og fprintf
OpenCL API
- Forstå rollen til OpenCL API i vertsprogrammet
- Bruke OpenCL API til å forespørre enhetsinformasjon og evner
- Bruke OpenCL API til å opprette kontekster, kommandokøer, buffere, kjerner og hendelser
- Bruke OpenCL API til å sette inn kommandoer, som les, skriv, kopier, map, avmap, utfør og vent
- 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øres på enheten og manipulerer data
- Bruke OpenCL C datatyper, kvalifiseringsord, operatorer og uttrykk
- Bruke OpenCL C innebygde funksjoner, som matematiske, geometriske, relasjonelle osv.
- Bruke OpenCL C utvidelser og biblioteker, som atom, bilde, cl_khr_fp16 osv.
OpenCL minnemodell
- Forstå forskjellen mellom minnemodeller for vertsmaskin og enhet
- Bruke OpenCL minnerom, som globalt, lokalt, konstant og privat
- Bruke OpenCL minneobjekter, som buffere, bilder og rør
- Bruke OpenCL minnetilgangsmønstre, som kun les, kun skriv, lese/skrive osv.
- Bruke OpenCL minnekonsistensmodell og synkroniseringsmekanismer
OpenCL eksekueringsmodell
- Forstå forskjellen mellom eksekueringsmodeller for vertsmaskin og enhet
- Bruke OpenCL arbeidsenheter, arbeidsgrupper og ND-områder for å definere parallelisme
- Bruke OpenCL arbeidsenhetfunksjoner, som get_global_id, get_local_id, get_group_id osv.
- Bruke OpenCL arbeidsgruppefunksjoner, som barrier, work_group_reduce, work_group_scan osv.
- Bruke OpenCL enhetsfunksjoner, som get_num_groups, get_global_size, get_local_size osv.
Feilsøking
- Forstå vanlige feil og feil i OpenCL-programmer
- Bruke Visual Studio Code feilsøker til å inspisere variabler, brytdepunkter, kallstack osv.
- 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
Optimering
- Forstå faktorene som påvirker ytelsen til OpenCL-programmer
- Bruke OpenCL vektordatatyper og vektoriseringsteknikker for å forbedre aritmetisk gjennomstrømning
- Bruke OpenCL looping unrolling og looping tiling-teknikker for å redusere kontrollutgifter og øke lokalitet
- Bruke OpenCL lokalt minne og lokal minnefunksjoner for å optimalisere minnetilganger og båndbredde
- Bruke OpenCL profileringsverktøy for å måle og forbedre eksekveringstid og ressursutnyttelse
Krav
- Forståelse av C/C++-språket og begreper for parallell programmering
- Grunnleggende kunnskap om datamaskinarkeitektur og minnehierarki
- Erfaring med kommandolinjeværktøy og kodeeditører
Målgruppe
- Utviklere som ønsker å lære å bruke OpenCL til å programmere heterogene enheter og utnytte deres parallelisme
- Utviklere som ønsker å skrive portabel og skalerbar kode som kan kjøre på ulike plattformer og enheter
- Programmerere som ønsker å utforske lavnivåaspektene ved heterogen programmering og optimalisere koden sin ytelse