Lidt derhenaf.
This commit is contained in:
		@@ -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".
 | 
			
		||||
 | 
			
		||||
{width=800}
 | 
			
		||||
[Download the thesis.](niels-thesis.pdf)
 | 
			
		||||
 | 
			
		||||
{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).
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user