Lidt derhenaf.

This commit is contained in:
Niels G. W. Serup 2017-11-05 23:59:26 +01:00
parent 2f00facb07
commit fb730abcf1
1 changed files with 99 additions and 4 deletions

View File

@ -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).