CUDA Academy · Les

De verwerkingspipeline ontwerpen

Fasen, buffers en gegevensstromen

Les 1 van 413 stappen

De verwerkingspipeline ontwerpen is een gratis CUDA Academy-les op CoddyKit. Dit is les 1 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject CUDA Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus CUDA Academy bevat in totaal 4 lessen.

Denk in fasen

Een echte afbeeldingspijplijn is een keten van fasen: laden, vervagen, verscherpen, kleuren corrigeren en opslaan. Elke fase is één duidelijke transformatie die je afzonderlijk kunt begrijpen. 🧩

Gegevens stromen één kant op

Pixels bewegen vooruit door de pijplijn: elke fase leest de uitvoer van de vorige fase en produceert de volgende invoer. Deze eenrichtings-gegevensstroom houdt het ontwerp overzichtelijk.

Buffers bevatten de tussenresultaten

Tussen twee fasen heb je een plek nodig om pixels tijdelijk op te slaan. Een buffer is gewoon een apparaatarray waarnaar de ene kernel schrijft en waaruit de volgende kernel leest. Plan één buffer per grens.

float* d_stage1;
cudaMalloc(&d_stage1, width * height * sizeof(float));

Pingpongen met twee buffers

Je hebt zelden voor elke fase een nieuwe buffer nodig. Pingpong tussen twee buffers: lees uit de ene, schrijf naar de andere en wissel ze daarna om. Twee buffers zijn genoeg voor een hele keten.

std::swap(d_in, d_out);

Voorlopig één kernel per fase

Begin met één kernel per fase. Dat is het duidelijkste ontwerp en het eenvoudigst te controleren. Later kun je fasen samenvoegen zodra elke fase correct is.

Pixels aan threads koppelen

De natuurlijke koppeling is één thread per pixel. Een 2D-raster bestrijkt de breedte en hoogte, zodat elke thread precies één locatie (x, y) verwerkt.

int x = blockIdx.x * blockDim.x + threadIdx.x;
int y = blockIdx.y * blockDim.y + threadIdx.y;

Indexeren met rijafstand

Afbeeldingen worden rij voor rij opgeslagen. Zet (x, y) om in een vlakke offset met rij-hoofdindexering, zodat elke thread de juiste pixel leest.

int idx = y * width + x;

De randen van de afbeelding beveiligen

Je raster wordt naar boven afgerond, waardoor sommige threads buiten de afbeelding vallen. Een eenvoudige bereikcontrole voorkomt dat ze geheugen aanraken dat ze niet mogen aanraken.

if (x >= width || y >= height) return;

Een 2D-blokvorm kiezen

Een blok van bijvoorbeeld 16x16 of 32x8 zorgt voor een goede dekking en warpvriendelijke rijen. Kies waar mogelijk een 2D-blokvorm die de afbeelding netjes verdeelt.

dim3 block(16, 16);
dim3 grid((width+15)/16, (height+15)/16);

Eén keer toewijzen, vaak hergebruiken

Het toewijzen van apparaatgeheugen is kostbaar, dus doe dit één keer vóór de lus. Hergebruik dezelfde buffers voor elk frame in plaats van telkens malloc en free uit te voeren.

Schetsen voordat je code schrijft

Teken eerst de fasen, hun buffers en de pijlen ertussen. Een duidelijk diagram van de gegevensstroom brengt ontwerpfouten aan het licht lang voordat een kernel wordt uitgevoerd. ✏️

Snelle controle

Je hebt een keten van fasen. Hoe voorkom je dat je voor elke fase een nieuwe buffer toewijst?

Samenvatting

Je hebt een pijplijn ontworpen als eenrichtingsverkeer met fasen die via buffers zijn verbonden, één thread per pixel toegewezen met een 2D-raster en geleerd buffers afwisselend te gebruiken en de gegevensstroom eerst te schetsen. 🎯

Gratis beginnen

Leer C++ met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
30
Lessen
120

Veelgestelde vragen

Is de les “De verwerkingspipeline ontwerpen” gratis?

Ja — de volledige tekst van “De verwerkingspipeline ontwerpen” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus CUDA Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus CUDA Academy bevat in totaal 4 lessen.

Wat leer ik in “De verwerkingspipeline ontwerpen”?

Fasen, buffers en gegevensstromen Je oefent met CUDA Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met CUDA Academy te beginnen?

Ervaring vooraf is niet nodig. CUDA Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 4.

Hoe lang duurt de les “De verwerkingspipeline ontwerpen”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over CUDA Academy?

Ja. Elke les over CUDA Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. De verwerkingspipeline ontwerpen
  2. Filters samenvoegen in één kernel
  3. Tiles streamen voor grote afbeeldingen
  4. Profileren, optimaliseren, opleveren
← Terug naar CUDA Academy