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.
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
28 timmar