Download de slowmem.zip file, die slowmem.cpp bevat. Dit programma berekent het 3 by 3 pixels gemiddelde filter van een plaatje en gaat inefficient met het geheugen van een moderne computer om.
Ik heb dit gecompileerd met CodeBlocks, MINGW compiler op een Windows XP machine (Intel Core2 Duo E6550P 2.33GHz processor, 2x 32KB data and 2 x 32 KB instruction L1 cache, 4096 KB L2 cache, 1024 MB memory). Dit voor verschillende waarden van SIZE en dan telkens twee keer de tijd meten van het gemiddelde filter. Dit gaf de volgende resultaten.
SIZE | 4095 | 4096 | 4097 | 8191 | 8192 | 8193 | 12287 | 12288 | 12289 |
---|---|---|---|---|---|---|---|---|---|
time (s) | 0.67 | 2.48 | 0.68 | 5.61 | 10.61 | 4.82 | 125.26 | 129.15 | 61.85 |
time (s) | 0.67 | 2.49 | 0.68 | 5.46 | 10.26 | 4.68 | 69.79 | 90.68 | 55.33 |
Geef een verklaring voor de tijdmetingen. Kijk daarbij ook naar de algoritmische complexiteit, het aantal basis computer operaties als functie van SIZE*SIZE (het aantal pixels).
Doe dezelfde serie metingen op jouw computer, rapporteer jouw metingen, vergelijk die met mijn metingen en geef een verklaring voor verschillen en/of overeenkomsten. Doe dit ook voor een systeem met tenminste 2 GB geheugen, maar dan met een maximale SIZE (in veelvouden van 4096 en dan +-1) die je systeem nog net executeert en dan met de helft daarvan.
Schrijf het programma om naar fastmem.cpp, rekening houdend met de werking van een virtueel geheugen systeem en herhaal bovenstaande metingen en analysen. Maak je programma liefst zo snel mogelijk.
Mijn resultaten:
SIZE | 4095 | 4096 | 4097 | 8191 | 8192 | 8193 | 12287 | 12288 | 12289 |
---|---|---|---|---|---|---|---|---|---|
time (s) | 0.076 | 0.079 | 0.081 | 0.300 | 0.312 | 0.308 | 38.58 | 36.92 | 38.78 |
time (s) | 0.076 | 0.080 | 0.081 | 0.298 | 0.312 | 0.308 | 39.59 | 35.88 | 39.70 |
Deze opdracht wordt individueel gemaakt. Lever per email een verslag van je bevindingen en het programma fastmem.cpp in.
Gewijzigd op 7 oktober 2010 door Theo Schouten.