From fb730abcf130583aacd50c3fcec8e16763b19b09 Mon Sep 17 00:00:00 2001 From: "Niels G. W. Serup" Date: Sun, 5 Nov 2017 23:59:26 +0100 Subject: [PATCH] Lidt derhenaf. --- site/thesis/index.md | 103 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 99 insertions(+), 4 deletions(-) diff --git a/site/thesis/index.md b/site/thesis/index.md index 24b3a3d..bec95aa 100644 --- a/site/thesis/index.md +++ b/site/thesis/index.md @@ -4,14 +4,109 @@ abstract: My master's thesis, including an overview of it in Danish. # My Master's Thesis -I submitted my thesis in October 2017. It is titled "Memory Block -Merging in Futhark". [Download the thesis.](niels-thesis.pdf) +I submitted my MSc thesis in computer science in October 2017. It is +titled "Memory Block Merging in Futhark". -![Hedgehogs: Faster than you would think](hedgehogs.jpg){width=800} +[Download the thesis.](niels-thesis.pdf) + +![Hedgehogs: Faster than you might think.](hedgehogs.jpg){width=820} ## Resumé (This section is in Danish.) -Velkommen til den danske udgave af mit speciale. +Velkommen til det danske resumé af mit speciale. På dansk hedder mit +speciale "Hukommelsesblokfletning i Futhark". Undskyld hvis resuméet er +forvirrende og uklart. Det er svært at beskrive på kort plads, og en +del af det kræver nok en vis datalogisk viden. + + +## Strukturbaggrund + +I 2011 begyndte jeg på datalogistudiet på Københavns Universitet. I +starten af 2015 fik jeg en *bachelorgrad* derfra, og senere på året +begyndte jeg så på *kandidaten*, som er den anden del af uddannelsen. +Nu har jeg her i 2017 så brugt et halvt år på at skrive mit *speciale*, +som er den endelige opgave på kandidaten. Når jeg har forsvaret +(præsenteret) specialet, får jeg en *kandidatgrad*. + + +## Indholdsbaggrund + +Der er to hoveddele i titlen: + + + Hukommelsesblokfletning + + Futhark + +*Hukommelsesblokfletning* er et delvist opfundet ord som vi groft sagt +siger betyder "at tage flere områder hukommelse (fra RAM) i en computer +og ændre dem så de bruger det samme område, så vi sparer hukommelse". +Dette er den teoretiske del af mit speciale. + +*Futhark* er et programmeringssprog rettet mod at køre programmer på +grafikkort -- ikke for at lave 3D, men for at lave generelle tunge +udregninger på smarte måder der passer til hardwarens fordele og +begrænsninger. Futhark er et eksisterende sprog og har en hjemmeside på +http://futhark-lang.org/ hvor man kan læse mere om det. + +Futhark-sproget har en tilhørende *oversætter* som taget +Futhark-programmer og oversætter dem til at kunne køre på grafikkort. +Jeg har i mit speciale udvidet denne oversætter til at lave +hukommelsesblokfletning, hvilket vi kalder en *optimering*. Dette er +den praktiske del af mit speciale. + + +## Eksempel 0: Nem fletning + +Her et et computerprogram på et meget abstrakt niveau: + +1. Gør plads til et stort billede. Kald pladsen $M$. +2. Indlæs et stort billede. Kald det $I$ og læg det i pladsen $M$. +3. Udskriv det store billede $I$. +4. Gør plads til endnu et stort billede. Kald pladsen $M2$. +5. Indlæs et nyt stort billede. Kald det $I2$ og læg det i pladsen $M2$. +6. Udskriv det store billede $I2$. + +Vi har to store billeder som skal udskrives på en printer. I trin 1 +fortæller vi computeren at vi skal have plads til et stort billede. I +trin 2 indlæser vi et stort billede (fx fra en fil) og fortæller +computeren at det skal ligge der hvor vi har gjort plads til det. I +trin 3 fortæller vi så computeren at den skal udskrive billedet. I trin +4-6 gentages dette, bare med et nyt stort billede. + +Det er fjollet både at gøre trin 1 og trin 4. Det første billede bliver +aldrig brugt mere efter det er udskrevet i trin 3, så dets plads $I$ kan +egentlig godt genbruges. Vi ændrer derfor programmet til at have 5 +trin: + +1. Gør plads til et stort billede. Kald pladsen $M$. +2. Indlæs et stort billede. Kald det $I$ og læg det i pladsen $M$. +3. Udskriv det store billede $I$. +4. Indlæs et nyt stort billede. Kald det $I2$ og læg det i pladsen $M$. +5. Udskriv det store billede $I2$. + +Trin 4 genbruger nu den allerede brugte plads $M$ i stedet for at bruge +en ny plads. Vi har flettet hukommelsesblokkene $M$ og $M2$ og sparet +plads. + +Det her er et meget simplificeret eksempel, men idéen er nogenlunde +derhenaf. + + +## Resultater + +Målet med min optimering er at + + + få programmer til at bruge mindre hukommelse, samt at + + få programmer til at køre lidt hurtigere. + +Futhark har en masse eksisterende større programmer som jeg har oversat +og kørt både *uden* mine optimeringer og *med* mine optimeringer. Deres +resultater har jeg så sammenlignet. + +Programmerne bruger mellem 0% (ingen ændring) og 70% mindre +*hukommelse*, hvilket er godt. De bliver mellem -28% (dvs. langsommere) +og 16% *hurtigere*, hvilket er et lidt mere blandet resultat. Dog har +jeg en okay idé om hvorfor nogle af dem bliver langsommere (læs mere om +det i selve specialet).