- 2D convolutie uitrekenen GPU
- 2D convolutie uitrekenen CPU
- min/max pooling berekenen GPU
- min/max pooling berekenen CPU
- afbeeldingen via URL inlezen CPU
- afbeeldingen via URL inlezen GPU
- Nsight compute analyse
- Nsight systems analyse
- Open de notebook in Google Collab.
- Run de eerste code block onder de hoofding 'Algemeen' om de git repo in te laden.
- In zowel de
opdracht_c.cu
als deopdracht_cuda.cu
kan de convolution kernel worden aangepast door de parameter aan te passen op respectievelijk lijn 251 en 245. By default is dit de kernel die edge detection doet. - Om de C versie te runnen, run beide code blocken onder de hoofding 'C Versie'.
- Om de Cuda versie te runnen, run beide code blocken onder de hoofding 'Cuda Versie'.
- De outputs van beide versies zijn 10 images genaamd
image1.png
t.e.m.image10.png
en per image eenimageX_convolution.png
,imageX_maxpool.png
,imageX_minpool.png
enimageX_avgpool.png
. - De Nsight compute analyse bevindt zich in de repo. Om de Nsight compute analyse opnieuw te genereren, run de code blocken onder de hoofding 'Nsight Compute'.
- De Nsight systems analyse bevindt zich in de repo. Om de Nsight systems analyse opnieuw te genereren, run de code blocken onder de hoofding 'Nsight Systems'.
Het uitvoeren van enkel de convolutie en pooling functies in de C versie duurt ongeveer 700-800ms. In de Cuda versie is dit slechts 2-3ms. Echter het uitvoeren van het volledige programma van de C versie duurt in totaal ongeveer 5s 500ms. Voor de Cuda versie is dit ongeveer 5s 200ms. De Cuda versie is in totaal dus niet veel sneller dan de C versie, dit komt door de overhead van het alloceren van memory op de GPU en het feit dat we geen gebruik maken van streams. Als we grotere afbeeldingen zouden gebruiken zou het verschil wel een stuk groter zijn en zou dus het voordeel van het GPU gebruik duidelijker zijn.