Kursplan

Introduktion

  • Vad är OpenCL?
  • OpenCL vs CUDA vs SYCL
  • Översikt över OpenCL funktioner och arkitektur
  • Att sätta upp utvecklingsmiljön

Komma igång

  • Skapa ett nytt OpenCL-projekt med Visual Studio-kod
  • Utforska projektstrukturen och filerna
  • Kompilera och köra programmet
  • Visar utdata med printf och fprintf

OpenCL API

  • Förstå rollen för OpenCL API i värdprogrammet
  • Använder OpenCL API för att fråga enhetsinformation och funktioner
  • Använda OpenCL API för att skapa sammanhang, kommandoköer, buffertar, kärnor och händelser
  • Använda OpenCL API för att ställa kommandon i kö, till exempel läsa, skriva, kopiera, mappa, avmappa, köra och vänta
  • Använder OpenCL API för att hantera fel och undantag

OpenCL C

  • Förstå rollen för OpenCL C i enhetsprogrammet
  • Använder OpenCL C för att skriva kärnor som körs på enheten och manipulerar data
  • Använder OpenCL C-datatyper, kvalificerare, operatorer och uttryck
  • Använda OpenCL C inbyggda funktioner, såsom matematik, geometrisk, relationell, etc.
  • Använda OpenCL C-tillägg och bibliotek, såsom atomic, image, cl_khr_fp16, etc.

OpenCL Minnesmodell

  • Förstå skillnaden mellan värd- och enhetsminnesmodeller
  • Använder OpenCL minnesutrymmen, såsom global, lokal, konstant och privat
  • Använda OpenCL minnesobjekt, såsom buffertar, bilder och pipes
  • Använda OpenCL minnesåtkomstlägen, som skrivskyddad, skrivskyddad, läs-skriv, etc.
  • Använder OpenCL minneskonsistensmodell och synkroniseringsmekanismer

OpenCL Utförandemodell

  • Förstå skillnaden mellan värd- och enhetsexekveringsmodeller
  • Användning av OpenCL arbetsobjekt, arbetsgrupper och ND-intervall för att definiera parallellismen
  • Använda OpenCL arbetsobjektfunktioner, som get_global_id, get_local_id, get_group_id, etc.
  • Använda OpenCL arbetsgruppsfunktioner, såsom barriär, work_group_reduce, work_group_scan, etc.
  • Använda OpenCL enhetsfunktioner, som get_num_groups, get_global_size, get_local_size, etc.

Felsökning

  • Förstå vanliga fel och buggar i OpenCL program
  • Användning av Visual Studio kodfelsökning för att inspektera variabler, brytpunkter, anropsstack, etc.
  • Använder CodeXL för att felsöka och analysera OpenCL program på AMD-enheter
  • Använda Intel VTune för att felsöka och analysera OpenCL-program på Intel-enheter
  • Använder NVIDIA Nsight för att felsöka och analysera OpenCL program på NVIDIA-enheter

Optimering

  • Förstå de faktorer som påverkar prestandan för OpenCL program
  • Användning av OpenCL vektordatatyper och vektoriseringstekniker för att förbättra aritmetisk genomströmning
  • Användning av OpenCL slingavrullning och slingbeläggningstekniker för att minska kontrolloverhead och öka lokaliteten
  • Användning av OpenCL lokalt minne och lokala minnesfunktioner för att optimera minnesåtkomster och bandbredd
  • Använda OpenCL profilerings- och profileringsverktyg för att mäta och förbättra exekveringstiden och resursutnyttjandet

Sammanfattning och nästa steg

Krav

  • En förståelse för C/C++ språk och parallella programmeringskoncept
  • Grundläggande kunskaper om datorarkitektur och minneshierarki
  • Erfarenhet av kommandoradsverktyg och kodredigerare

Publik

  • Utvecklare som vill lära sig hur man använder OpenCL för att programmera heterogena enheter och utnyttja deras parallellitet
  • Utvecklare som vill skriva bärbar och skalbar kod som kan köras på olika plattformar och enheter
  • Programmerare som vill utforska lågnivåaspekterna av heterogen programmering och optimera sin kodprestanda
 28 timmar

Antal deltagare



Price per participant

Vittnesmål (1)

Relaterade Kurser

GPU Programming - OpenCL vs CUDA vs ROCm

28 timmar

Relaterade Kategorier