De verwerkingspipeline ontwerpen
Fasen, buffers en gegevensstromen
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. 🎯
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
- De verwerkingspipeline ontwerpen
- Filters samenvoegen in één kernel
- Tiles streamen voor grote afbeeldingen
- Profileren, optimaliseren, opleveren