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". | ||||
| 
 | ||||
| {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). | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user