Tack för att du skickade din fråga! En av våra teammedlemmar kontaktar dig snart.
Tack för att du skickade din bokning! En av våra teammedlemmar kontaktar dig snart.
Varaktighet 28 timmar
Kursplan
Introduktion
- Vad är GPU-programmering?
- Varför använda GPU-programmering?
- Vilka utmaningar och utbyte finns i GPU-programmering?
- Vilka ramverk finns för GPU-programmering?
- Välja rätt ramverk för din tillämpning
OpenCL
- Vad är OpenCL?
- Vilka fördelar och nackdelar har OpenCL?
- Sätta upp utvecklingsmiljön för OpenCL
- Skapa ett grundläggande OpenCL-program som utför vektoraddition
- Använda OpenCL API för att fråga enhetsinformation, allokera och deallokera minne på enheten, kopiera data mellan värd och enhet, starta kärnor och synkronisera trådar
- Använda OpenCL C-språket för att skriva kärnor som körs på enheten och manipulera data
- Använda OpenCL:s inbyggda funktioner, variabler och bibliotek för att utföra vanliga uppgifter och operationer
- Använda OpenCL:s minutrymmen, som globalt, lokalt, konstant och privat, för att optimera datatransferer och minnesåtkomster
- Använda OpenCL:s körningsmodell för att styra arbetsenheter (work-items), arbetsgrupper (work-groups) och ND-intervall som definierar parallellismen
- Felsöka och testa OpenCL-program med verktyg som CodeXL
- Optimerar OpenCL-program med tekniker som sammanfogning, cachning, förhandsladdning och profilering
CUDA
- Vad är CUDA?
- Vilka fördelar och nackdelar har CUDA?
- Sätta upp utvecklingsmiljön för CUDA
- Skapa ett grundläggande CUDA-program som utför vektoraddition
- Använda CUDA API för att fråga enhetsinformation, allokera och deallokera minne på enheten, kopiera data mellan värd och enhet, starta kärnor och synkronisera trådar
- Använda CUDA C/C++-språket för att skriva kärnor som körs på enheten och manipulera data
- Använda CUDA:s inbyggda funktioner, variabler och bibliotek för att utföra vanliga uppgifter och operationer
- Använda CUDA:s minutrymmen, som globalt, delat (shared), konstant och lokalt, för att optimera datatransferer och minnesåtkomster
- Använda CUDA:s körningsmodell för att styra trådar, block och rutnät som definierar parallellismen
- Felsöka och testa CUDA-program med verktyg som CUDA-GDB, CUDA-MEMCHECK och NVIDIA Nsight
- Optimerar CUDA-program med tekniker som sammanfogning, cachning, förhandsladdning och profilering
ROCm
- Vad är ROCm?
- Vilka fördelar och nackdelar har ROCm?
- Sätta upp utvecklingsmiljön för ROCm
- Skapa ett grundläggande ROCm-program som utför vektoraddition
- Använda ROCm API för att fråga enhetsinformation, allokera och deallokera minne på enheten, kopiera data mellan värd och enhet, starta kärnor och synkronisera trådar
- Använda ROCm C/C++-språket för att skriva kärnor som körs på enheten och manipulera data
- Använda ROCm:s inbyggda funktioner, variabler och bibliotek för att utföra vanliga uppgifter och operationer
- Använda ROCm:s minutrymmen, som globalt, lokalt, konstant och privat, för att optimera datatransferer och minnesåtkomster
- Använda ROCm:s körningsmodell för att styra trådar, block och rutnät som definierar parallellismen
- Felsöka och testa ROCm-program med verktyg som ROCm-Debugger och ROCm-Profiler
- Optimerar ROCm-program med tekniker som sammanfogning, cachning, förhandsladdning och profilering
Jämförelse
- Jämföra egenskaper, prestanda och kompatibilitet för OpenCL, CUDA och ROCm
- Utvärdera GPU-program med bänkmarker och mått
- Lära sig bästa praxis och tips för GPU-programmering
- Utforska aktuella och framtida trender och utmaningar inom GPU-programmering
Sammanfattning och nästa steg
Krav
- En förståelse för C/C++-språket och parallella programmeringstekniker
- Grundläggande kunskap om datorarkitektur och minneshierarkin
- Erfarenhet av kommandoradsverktyg och kodeditorer
Målgrupp
- Utvecklare som vill lära sig hur man använder olika ramverk för GPU-programmering och jämför deras egenskaper, prestanda och kompatibilitet
- Utvecklare som vill skriva portabelt och skalbart kod som kan köras på olika plattformar och enheter
- Programmerare som vill utforska utbyte och utmaningar i GPU-programmering och optimering