Lidt derhenaf.
This commit is contained in:
parent
2f00facb07
commit
fb730abcf1
|
@ -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).
|
||||
|
|
Loading…
Reference in New Issue