Sip2Sep. Gruppe d206a Jakob Svane Knudsen Mikkel Larsen Pedersen Simon Nicholas M Tinggaard Rune Leth Wejdling

Størrelse: px
Starte visningen fra side:

Download "Sip2Sep. Gruppe d206a Jakob Svane Knudsen Mikkel Larsen Pedersen Simon Nicholas M Tinggaard Rune Leth Wejdling"

Transkript

1 Sip2Sep DAT2-projekt, Aalborg Universitet Institut for Datalogi Gruppe d206a Jakob Svane Knudsen Mikkel Larsen Pedersen Simon Nicholas M Tinggaard Rune Leth Wejdling

2

3 Institut for Datalogi Titel: Sip2Sep Projektperiode: DAT2: 1. februar 29. maj 2007 Projektgruppe: d206a Deltagere: Jakob Svane Knudsen Mikkel Larsen Pedersen Simon Nicholas M. Tinggaard Rune Leth Wejdling Vejleder: Hans Hüttel Antal Kopier:: 6 Sideantal: 67 Synopsis: Denne rapport giver et bud på regler, der kan opstilles for at parallelisere sekventiel kode, og derved opnå implicit parallelitet. De to sprog Sip og Sep med hhv. implicit og eksplicit parallelitet, danner grundlag for en analyse af parallelitet baseret på en fuldstændig operationel semantik og en formel beskrivelse af parallelisering betragtet som et transistionssystem. Der implementeres en oversætter fra Sip til Sep. Slutteligt udføres forsøg med oversættelse og fortolkning af sekventielle programmer skrevet i Sip og deres tilsvarende parallele programmer oversat til Sep. Sideantal for bilag: 23 Total sideantal: 101 Rapportens indhold er frit tilgængeligt, men oentliggørelse (med kildeangivelse) må kun ske efter aftale med forfatterne.

4

5 Forord Denne rapport er udarbejdet af gruppe d206a i forbindelse med projektforløbet ved Institut for Datalogi på Aalborg Universitet i perioden 1. februar til 29. maj Kildekoden til vores oversætter og fortolker, samt en elektronisk udgave af denne rapport kan ndes på Kildekoden er udformet som en solution i Visual Studio 2005 og der er skrevet en makele til Mono. Det er vigtigt at læse readme-lerne for at forstå output fra fortolkeren. Vi vil gerne takke vores vejleder Hans Hüttel for et godt samarbejde. Aalborg d. 29. maj Jakob Svane Knudsen Mikkel Larsen Pedersen Simon Nicholas M. Tinggaard Rune Leth Wejdling iii

6 INDHOLD I Introduktion 1 1 Indledning Anvendelser af parallelitet Problemformulering Afgrænsning II Sprogdesign 5 2 Sproget Sip Uformel beskrivelse af Sip Navne, datatyper og erklæring af variable Udtryk Kommandoer Erklæring af funktioner Abstrakt syntaks Semantik Environment-store-modellen Erklæringer af variable Erklæringer af funktioner Aritmetiske udtryk Boolske udtryk Kommandoer Typeregler Udvalgte eksempler på typeregler III Parallelitet 21 3 Hvad er parallelitet? Parallelitet betragtet som etning Mål for parallelisering Hvad er parallelisering? Semantisk ækvivalens og parallelitet Parallelisering af sekventiel kode Afhængigheder Metode for afhængighedsanalyse Metode til parallelisering IV Implementation 37 5 Oversætteren Syntaktisk analyse iv

7 INDHOLD Leksikalsk analyse Parsing SableCC Abstrakt syntakstræ Dybdeførst-adapter Hjælpefunktioner Kontekstuel analyse Første traversering Anden traversering Parallelisering af sekventiel kode Opdeling af sekventiel kode Udskrift af kode Fortolkeren Environment-store-modellen Lageret Store Køretidsstakke Envl Funktionsenviroment Fortolkning Funktionserklæring Funktionskald for-løkke-konstruktionen Aritmetisk udtryk Listeopslag par-kommando Forbedret fortolkning for-løkke Forsøg med fortolker Algoritmer til forsøg Køretidssammenligning Bubblesort Udregning af primtal Parallele kald af bubblesort Konklusion V Konklusion og perspektivering Konklusion og perspektivering VI Bilag 69 A Whileprograms i forhold til Sip 70 B Grammatik 71 B.1 SableCC v

8 Indhold C Transitionsregler fra semantikken 76 C.1 Transitionsregler funktionserklæringer f C.2 Transitionsregler for kommandoer k C.3 Transitionsregler for variabelerklæringer v C.4 Transitionsregler for arimetiske udtryk a C.5 Transitionsregler for boolske udtryk b D Typeregler 85 D.1 Erklæring af funktioner D.2 Kommandoer D.3 Aritmetiske udtryk D.4 Boolske udtryk D.5 Strengeudtryk E Algoritmer 90 E.1 Bubblesort E.2 Udregning af primtal E.3 Dårligt eksempel på parallelisering Litteratur 93 vi

9 Del I Introduktion 1

10 KAPITEL 1 Indledning Igennem ere år har hastigheden på processorer fulgt Moores lov, der siger at hastigheden på processorer bliver fordoblet hver 18. måned. Men de senere år er grænsen, ifølge [Gor07], for hvor høj en clockfrekvens man kan køre over en enkelt processor nået, da varmeudviklingen bliver for stor til, at den kan køles med almindelig køling. Tendensen går derfor imod at bygge ere kerner ind i hver processorchip og lade dem køre ved en lavere frekvens. Dette sænker både strømforbruget og nedsætter varmeudviklingen. Der ndes allerede processorchips på markedet, til privat brug, med re eller ere kerner og den nye Playstation 3 spilkonsol er udstyret med 9 processorer. Man forventer at udviklingen fortsat vil følge Moores lov, blot med antallet af kerner per processor chip, i stedet for clockfrekvens. Dette stiller nye krav til systemudviklere, der er vant til at udvikle sekventielle programmer, da det ikke længere kun er store servere og mainframes der har ere processorer. Man mente tidligere, at det ikke kunne betale sig at udvikle parallelle programmer, medmindre det kunne løse opgaven på under den halve tid. Dette skyldtes at man blot kunne vente 18 måneder og købe en processor, der var dobbelt så hurtig. En anden årsag er at parallelle programmer typisk er mere problematiske at skrive, end sekventielle programmer, til dels fordi mennesker tænker sekventielt. Der er gennem tiderne blevet gjort ere forsøg på at indføre sprog med det man kalder implicit parallelitet, hvor programmer skrives som om de var beregnet til sekventiel udførsel, men at specielt opstillede regler i oversættelsen, identicerer konstruktioner, der kan køre parallelt. Implicit parallelitet stiller krav til en mere generel form for parallelitet, til forskel fra diverse løsninger der kan sikre parallelitet som implementeres ad hoc. Af aktuelle sprog med implicit parallelitet har vi f.eks. Fortress og Cω. Fortress er et nyt sprog under udvikling af Sun Microsystems. Størstedelen af sproget bliver udgivet som open source, under BSD-licensen 1. I Fortress har man valgt at implementere både implicit og eksplicit parallelitet [ACH + 07]. Implicit parallelitet er implementeret som strukturer i sproget, hvor bestanddelene bliver afviklet parallelt. For eksempel vil for-løkker altid blive paralleliseret, så man kan derfor ikke vide i hvilken rækkefølge iterationerne vil blive afviklet. Derudover indfører de nye konstruktioner som tupel-udtryk og 'also do'-blokke. I tupel-udtryk bliver de enkelte elementer i tuplen evalueret i separate tråde. I 'also do'-blokke gives mulighed for at denere, hvilke dele der kan afvikles parallelt, uden eksplicit at skulle oprette nye tråde og samle disse, når de er færdige. Cω 2 er en videreudvikling af C# fra Microsoft, der indeholder asynkrone 1 Udviklingen af Fortress kan følges på hjemmesiden hvor man også kan søge om at blive Sun Contributor og bidrage til udviklingen. 2 Udviklingsstatus kan følges her: 2

11 1.1. ANVENDELSER AF PARALLELITET metodekald fra Polyphonic C# og XML-datatyper fra Xen 3. Sproget bliver udviklet med det formål at gøre det nemmere at skrive datatunge programmer til distribuerede systemer. De asynkrone metodekald fungerer ved, at metoder erklæres som async, hvilket gør at de fra kalderens synspunkt blot er voidmetoder, der returnerer med det samme. Metoderne bliver afviklet parallelt med den kaldende tråd. Fordelen ved dette er, at man ikke fra den kaldende tråd, skal oprette tråde og sikre at disse terminerer. Omvendt har man heller ikke mulighed for at se, om en tråd er termineret og modtage returværdier fra denne. 1.1 Anvendelser af parallelitet Internettets udbredelse har bevirket, at der kan samles enorme netværk af forbundne processorer, og hvis disse kan samarbejde om at løse et problem, har man en enorm regnekraft til rådighed. Forskellige sådanne initiativer er allerede startet. Eksempler på dette er BOINC 4, jagten på stadigt større primtal 5 og analyse af proteinkæder 6. Dette har også givet anledning til løsning af kendte matematiske problemer vha. computer, men denne form for bevis bliver dog diskuteret. Dette ses f.eks. ved projektet ZetaGrid 7, hvor et stort netværk af brugere vil af- eller bevise Riemann-hypotesen 8 ved at kontrollere om fundne ikke-trivielle nulpunkter ligger indenfor den såkaldte "critical line". GRID-strukturen bruges også til mere generelle formål. Fx det skandinavisk startede NorduGrid 9, der samler clusters fra mange universiteter i et stort GRID-netværk, og derpå giver brugerne adgang til den processorkraft, de ikke selv udnytter. Programmering af opgaver til GRID-netværk, stiller store krav til strukturen af delt data imellem de opgaver der afvikles parallelt, da kommunikation imellem enkelte knuder i et GRID-netværk kan være meget langsom. Man har derfor valgt ikke at have delt hukommelse mellem trådene, som man har, hvis de afvikles på en maskine med delt hukommelse. Delt hukommelse imellem tråde introducerer dog problemer med adgang til den delte data. Hvis man ikke strukturerer denne adgang med låse og tildeling af adgang, kan det ikke forudsiges, hvad resultatet vil blive, da man ikke kan forudsige i hvilken rækkefølge trådene bliver afviklet. Det er derfor vigtigt at vide hvilke dele af programmet, der skal have adgang til hvilke data og i hvilken rækkefølge, inden man afvikler ere dele parallelt. Denne problemstilling uddybes yderligere i afsnit Xen er også kendt som X#. 4 Et projekt (http://boinc.berkeley.edu/), der stiller regnekraft til rådighed for andre projekter, som fx (http://setiathome.berkeley.edu/) der analysere radiobølger modtaget fra rummet. 5 Fx GIMPS-projektet (http://www.mersenne.org/), der udnytter alle forbundne processorer til at nde stadig større primtal. 6 Fx (http://folding.stanford.edu/), der udnytter den samlede processorkraft til beregne, hvad der sker, når proteiner foldes, for bedre at kunne forstå sygdomme, der opstår deraf. 7 Mere information kan ndes på 8 Mere information kand ndes på 9 Mere information kan ndes på 3

12 Kapitel 1. Indledning 1.2 Problemformulering Vi vil i dette projekt designe et sprog med implicit parallelitet, samt tilhørende oversætter og fortolker. Implicit skal i vores tilfælde forstås på den måde, at en programmør, der skriver et program i vores sprog, ikke skal planlægge programmets afvikling over ere tråde, da sproget ikke indeholder konstruktioner til eksplicit at angive dette. Programmer skrevet i sproget, oversættes til et sprog med eksplicit parallelitet og fortolkes af en ertrådet fortolker. En stor del af arbejdet, for os som udviklere af denne oversætter, består således i at opstille regler for hvordan et program kan paralleliseres. Oversætteren skal kunne bruge disse regler til at identicere konstruktioner i programmet der kan afvikles i parallel, og derfra konstruere et tilsvarende program, der indeholder parallelle konstruktioner. Et mål for hvor meget et program er blevet paralleliseret i oversættelsen, vil blive søgt. Både i form af graden af parallelitet, samt et mål for længden af programmet, hvis det terminerer. Vi rejser derfor følgende spørgsmål. Hvordan kan parallelitet beskrives formelt? Hvilke regler for parallelitet skal og kan opstilles? Hvilke regler og metoder for parallelisering skal og kan opstilles og hvordan kan disse bruges i en oversætter? Hvordan implementeres en operationel semantik i en fortolker? Hvilke mål for parallelitet i et program kan bruges til at sammenligne to programmer? 1.3 Afgrænsning Vi vil i koncentrere os om analysen af dataafhængigheder mellem kommandoer, samt implementere en fortolker ud fra en operationel semantik. Da det ikke er muligt at lave en dynamisk analyse af et program skrevet i et Turing-fuldstændigt sprog [Sip06], for alle mulige starttilstande, vil vi bygge a- nalysen til graden af parallelitet i et program, på statisk analyse af programmets kildekode. Graden af parallelitet er derfor en approksimeret værdi. 4

13 Del II Sprogdesign 5

14 KAPITEL 2 Sproget Sip Vi vil i dette afsnit introducere sproget Sip 1. Formålet med Sip er at give programmøren mulighed for at skrive programmer uden at skulle tænke på, hvad der kan afvikles parallelt, men samtidig opfordre programmøren til at programmere på en måde, der gør det nemmere at parallelisere. Det primære formål med Sip er at det skal kunne bruges til at danne eksempler på programmer. Et designmål for Sip er derfor, at det skal have høj læselighed, frem for skrivelighed. Dette medfører at dele af syntaksen vil indeholde ord, der kunne forkortes, men dette er ikke gjort, da det ville sænke læseligheden. Sproget indeholder, af samme grund, ord der ville kunne udelades, som for eksempel uses i funktionserklæringer. Det ville være hensigtsmæssigt hvis Sip var et Turing-fuldstændigt sprog. I [KAM82] vises at en meget lille delmængde af Pascal, kaldet whileprograms, er et Turing-fuldstændigt sprog. Kommandoer og udtryk i dette sprog består af konstruktionerne vist i bilag A. Sammen med opbygningsreglerne fra [KAM82, s. 22] er givet ækvivalente Sip -konstruktioner, konstrueret med opbygningsreglerne givet i afsnit 2.2. Alle whileprograms kan altså skrives med ækvivalente Sip - kommandoer, hvilket er vores argument for at Sip er et Turing-fuldstændigt sprog. 2.1 Uformel beskrivelse af Sip Programmer i Sip består af en følge af funktionserklæringer. For at et program er gyldigt, skal en funktion ved navn main være erklæret. Denne funktion bliver implicit kaldt ved afvikling af programmet og skal have en tom parameter blok, samt returtypen int. Der er ingen regler for hvor i implementationsrækkefølgen funktionen main skal være placeret. Dette giver programmøren frihed til at vælge, hvad der passer bedst til det pågældende program Navne, datatyper og erklæring af variable Navne i Sip består af sekvenser af bogstaver og tal. Navne må dog ikke starte med et tal. For eksempel er navnet kuppel42 lovligt, men ikke navnet 42kupler. Variable kan have en af følgende typer: 1 Sep med Implicit Parallelitet 6

15 2.1. UFORMEL BESKRIVELSE AF SIP int : Kan antage værdier fra mængden Z. bool : Kan antage værdier fra mængden true, false. string : En tekstreng er en sekvens af elementer fra mængden a,.., Z, 0,.., 9, afgrænses af, hvor betegner et mellemrum. int list ( v ) : Benævner lister bestående af v int værdier. bool list ( v ) : Benævner lister bestående af v bool værdier. string list ( v ) : Benævner lister bestående af v string værdier. Følgende eksempel er en erklæring af en variabel ved navn a, som kan antage heltalsværdier, og en variabel ved navn b, der er en liste bestående af 10 sandhedsværdier. a : int ; b : bool list(10) ; Som man kan se er der ingen initialisering af variablene. Vi introducerer derfor en standardværdi for alle typer. Denne standardværdi er givet ved funktionen def ault som er deneret i afsnit Sip har en ad blokstruktur, hvilket vil sige at der er et globalt scope som indeholder ere lokale scopes, men lokale scopes kan ikke indeholde scopes. Alle funktioner eksisterer i det globale scope, og alle variable eksisterer i de lokale scopes. Man kan altså ikke lave globale variable i Sip Udtryk De aritmetiske udtryk i Sip svarer til deres almindeligt kendte modstykker i matematikken. Der er tale om addition, subtraktion, multiplikation og modulo. Boolske udtryk kan skrives med operatorene and, or, <, >, =. Med =, < og > operatorene kan man sammenligne to aritmetiske udtryk, men ikke to boolske udtryk. I udtryk kan der sættes balancerede parenteser, dog skal der ndes en venstreparentes til hver højreparentes. Et udtryk kan også være et opslag af en variabel. Hvis man vil have variablens værdi skriver man bare dens navn, men hvis variablen a har en listetype og man vil have værdien af det n'te element skriver man a [ n ]. Bemærk at lister er 0-indekserede sådan at det første element i en liste a med n elementer er a [ 0 ] og det sidste element er a [ n - 1 ]. Alle funktioner i Sip returnere en værdi, da det er meningen at man skal bruge dem i udtryk. Et funktionskald er et funktionsnavn efterfulgt af en sekvens af udtryk som udgør de aktuelle parametre. Disse udtryk skrives i en kommasepareret liste afgrænset af paranteser. For eksempelt skrives et funktionskald til en funktion ved navn f med de aktuelle parametre 2 og a som f(2,a). Det følgende eksempel viser et boolsk udtryk i Sip (( a + b ) < f(5)) and ( 10 = g(a,b,5) ) Kommandoer Sip er et imperativt sprog og den væsentligste kommando er derfor tilskrivning af en værdi til en variabel. En tilskriving foregår med konstruktionen N := U ; hvor N er en variabel eller en henvisning til et element i en liste som tilskrives 7

16 Kapitel 2. Sproget Sip værdien af udtrykket U. En tilskriving til det første element i en liste a skrives a[0] := U ;. Konstrolstrukturer i Sip skrives if U then K 1 else K 2, hvor U er et udtryk som forventes at evaluere til en sandhedsværdi, som afgør hvilken af de to kommandoer K 1 og K 2, der skal udføres. Man kan ikke skrive if U then K, altså en konstrolstruktur uden else. Man kan i stedet bruge den specielle kommando skip;, som ikke gør noget. Der ndes to løkkekonstruktioner i Sip. while-løkker skrives på formen while U do K. Som betyder at kommandoen K udføres så længe udtrykket U evalueres til true. for-løkker kan skrives for N from U 1 to U 2 do K. Denne konstruktion betyder at K skal udføres på hinanden følgende gange, hvor variablen N første gang har værdien af udtrykket U 1. De efterfølgende gange har N stigende værdier, indtil den rammer værdien af udtrykket U 2. De to løkker er eksemplicerede i følgende Sip kommando. for i from 3 to do x := x + i; while (i < 5) do a := f ( i ); i := i + 1; Erklæring af funktioner En funktion erklæreres med følgende: dens returtype, typerne af dens formelle parametre, en kommandoblok som skal udføres ved kald af funktionen og de variable som bruges i dennes kommandoblok. En funktion ved navn sum, som returnerer summen af to heltal kan skrives, som i følgende eksempel: function sum ( a:int, b:int ) : int does sum := a + b; Bemærk at returværdien angives ved at tildele en værdi til en variabel med samme navn som metoden, kendt som alias-variablen. Den specielle funktion main, som skal erklæres, kan for eksempel erklæres som i følgende eksempel, omend dette program kun tjener et illustrativt formål. function main() : int main := 42; 2.2 Abstrakt syntaks Ved denitionen af den operative semantik i afsnit 2.3, typereglerne i afsnit 2.4 og paralleliseringen i afsnit 4, får vi brug for en abstrakt syntaks for Sip. 8

17 2.3. SEMANTIK Sip deles op i en række syntaktiske kategorier som er vist i tabel 2.1. Konstruktionsregler for udvalgte konstruktioner er vist i tabel 2.2. Bemærk at den abstrakte syntaks læner sig en smule mere op ad den konkrete syntaks end hvad umiddelbart virker nødvendigt. For eksempel kunne den sidste af disse to regler for funktionserklæringer function N ( E v1,.., E vn ) : T uses E v does K function N ( E v1,.., E vn ) : T does K spares væk ved gøre det muligt for E v at være tom, ligesom semikolonet bag kommandoer som N := U ; kunne fjernes og sammensætning af kommandoer kunne laves som K ; K istedet. Vi har dog istedet valgt at lade den abstrakte syntaks være en lettere læst udgave af den konkrete syntaks, sådan at sammenhængen mellem den operationelle semantik og implementationen af denne fremstår tydeligere. 2.3 Semantik I dette afsnit beskrives semantikken for Sip. Semantikken tager udgangspunkt i en model af environments og køretidsstakke som er deneret i afsnit Denne model benytter sig i høj grad af partielle funktioner, og vi får ere gange brug for at kunne opdatere disse. Derfor introducerer vi en gang for alle en notation til dette. Denition 1.1 (Opdateringssyntaks for partielle funktioner). Lad f 1, f 2 være partielle funktioner. Den opdaterede partielle funktion f 3 = f 1 [f 2 ] er da givet ved f 2 (a) hvis f 2 (a) er deneret f 3 (a) = f 1 (a) ellers. For at kunne denere specikke partielle funktioner på en behagelig måde introduceres også en listeforskrift med dette formål. Denition 1.2 (Listeforskrift for partielle funktioner). En partiel funktion f : A B hvor Dm(f) er endelig og har n elementer, kan skrives som f = [a 1 b 1,.., a n b n ] Hvor a i A, b i B og f(a i ) = b i for alle i fra 1 til n. Vi er nu klar til at beskrive vores model Environment-store-modellen Lageret Store Lageret er en mængde bindinger mellem adresser og værdier. Et øjebliksbillede af disse bindinger betragtes som en partiel funktion fra funktionsrummet Store = N 0 V, hvor V = Z true, false S, hvor S er mængden af alle tekststrenge. Et øjebliksbillede af lageret er da en funktion sto Store hvor sto(a) = v hvis adressen a er bundet til værdien v. Funktionen def ault : T V introduceres. Denne giver os en værdi for enhver type. 9

18 Kapitel 2. Sproget Sip P : Programmer. Et program består af en eller ere funktionserklæringer. Enkelte programmer betegnes med metavariablen P. K : Kommandoer. Enkelte kommandoer betegnes med metavariablen K. U : Udtryk. Disse kan være aritmetiske udtryk U a, boolske udtryk U b, strengudtryk U s. Altså er U = U a U b U s. Enkelte udtryk betegnes med metavariablene U, U a eller U s. E : Erklæringer, kan være erklæringer af variable E v eller erklæringer af funktioner E f. Enkelte erklæringer betegnes med metavariablene E v eller E f. N : Navne er N = a,.., z, A,.., Z + (0,.., 9, a,.., z, A,.., Z). Enkelte navne betegnes med metavariablen N. T : Typenavne. Enkelte typenavne betegnes med metavariablen T. L : Literale, kan være numeriske literale L l =, ɛ0,.., 9 +, boolske literale L b = true, false eller strengeliterale L s som er mængden af ord over alfabetet A,.., Z,a,.., z, 0,.., 9, hvor betegner et mellemrum. Enkelte literale betegnes med metavariablene l, l l, l b eller l s. Tabel 2.1: Syntaktiske kategorier P ::= E f E v ::= E v E v N : T ; E f ::= E f E f function N ( E v1,.., E vn ) : T uses E v does K function N ( E v1,.., E vn ) : T does K T ::= int bool string int list ( L a ) bool list ( L a ) string list ( L a ) K ::= K K N := U ; N [ U a ] := U ; K skip ; if U b then K else K for N from U a to U a do K while U b do K U a ::= U a + U a U a - U a U a * U a U a / U a U a mod U a ( U a ) N ( U,..,U ) N N [ U a ] L a U b ::= U a < U a U a > U a U a = U a U b and U b U b or U b ( U b ) N ( U,..,U ) N N [ U a ] L b U s ::= N ( U,..,U ) N N [ U a ] L s Tabel 2.2: Konstruktionsregler for udvalgte konstruktioner i Sip 10

19 2.3. SEMANTIK def ault(int) = 0 def ault(bool) = false def ault(string) = default(t list ( n )) = (default(t ) 1,.., default(t ) n ) Bindinger af variabelnavne Env v Bindinger mellem variabelnavne N og lokationer N 0 beskrives af et variabelenvironment. Øjebliksbilleder af dette betragtes som en partiel funktion fra funktionsrummet Env v = N next N 0, hvor next er et specielt element der altid er bundet til den næste frie plads i lageret. next opdateres løbende i semantikreglerne. Bindinger af funktionsnavne Env f Funktionsnavne er bundet til 4-tupler K E v Env v Env f. Øjebliksbilleder af disse bindinger er funktioner fra funktionsrummet Env f = N K E v Env v Env f. Køretidsstakke Envl Idet vi beskriver en smallstep-semantik for kommandoer i Sip og vi har statisk binding af variable og funktioner, bliver det nødvendigt at kunne gemme midlertidige bindinger. Dette gøres i en køretidsstak, hvor elementerne i stakken er tupler fra Env v Env f. Den øverste tupel i den aktuelle stak indeholder de bindinger, som er gældende. Øjebliksbilleder af køretidsstakken er stakke ud af mændgen Envl = (Env v Env f ), som er mængden af alle lister bestående af tupler Env v Env f. Vi benytter notationen envl = (env v, env f ) : envl til at beskrive at et øjebliksbillede envl er stakken hvor (env v, env f ) er øverst og resten af stakken er envl. Når vi møder et nyt lokalt scope tilføjer vi en tupel (env v, env f ) øverst i den aktuelle stak envl så denne bliver envl = (env v, env f ) : envl. Når vi forlader dette scope igen, fjerner vi det øverste element fra den aktuelle stak envl = (env v, env f ) : envl så envl bliver den aktuelle stak. Sådan modellerer vi de lokale scopes som er beskrevet i afsnit Erklæringer af variable Den operationelle semantik for erklæring af variable E v er givet ved et transitionssystem (Γ v, v, T v ) hvor Γ v = E v Store Envl Store Envl T v = Store Envl 11

20 Kapitel 2. Sproget Sip Transitionsreglerne for v er givet på en af følgende former, idet en erklæring af en variabel både ændrer lageret og bindingerne mellem variabelnavne og adresser i lageret. E v, sto, envl v E v, sto, envl E v, sto, envl v sto, envl En erklæring af en variabel ved navn N består i at oprette en binding mellem N og en ny adresse a i lageret. Adressen a er i vores model den adresse, som det specielle navn next er bundet til. Efter at det aktuelle variabelnavn er bundet til a, skal det næste vi støder på selvfølgelig ikke bindes til dette. Ved at opdatere modellen sådan at next er bundet til a + 1, sørger vi for at variable ikke overskriver hinanden. Adressen a bindes desuden til en standardværdi for den aktuelle type ved hjælp af default(t ). Alt dette fremgår af reglen [var]. [var] N : T, sto, envl v sto[a default(t )], envl hvor envl = (env v, env f ) : envl og a = env V (next) og envl = (env v [N a][next a + 1], env f ) : envl Ved erklæring af en liste reserveres en sammenhængende følge af adresser. [list-2] N : T list (v), sto, envl v sto, envl hvor envl = (env v, env f ) : envl og env v = env v [N a][next a + v] og sto = sto[a default(t )][a + 1 default(t )]... [a + v default(t )] og envl = (env v, env f ) : envl Resten af transitionsreglerne for v er givet i bilag C Erklæringer af funktioner Den operationelle semantik for erklæringer af funktioner E f transitionssystem (Γ f, f, T f ) hvor er givet ved et Γ f = (E f Store Envl) (Store Envl) T f = Store Envl Transitionerne er givet ved reglerne opstillet på en af følgende former, idet funktionserklæringer udelukkende ændrer funktionsbindingerne i envl. 12 E f, sto, envl e sto, envl E f, sto, envl e E f, sto, envl

21 2.3. SEMANTIK Vi bruger her hjælpefunktionen upd : Env f Env f til at opdatere øjebliksbilleder af funktionsbindingerne. Intuitivt forstås denne funktion sådan at, den opdaterer funktionsbindingerne i et øjebliksbillede, sådan at alle funktioner kender til hinanden. Den er deneret som upd(env f ) = env f hvor env f (n) = (K, E v, env v, env f ) medfører at env f (n) = (K, E v, env v, env f ) Den spændende transition i denne forbindelse er selvfølgelig den regel [erk], som beskriver erklæringen af en enkelt funktion. Konstruktionen function N f (N 1 : T 1,.., N n : T n ) uses E v does K betyder at navnet N f skal bindes til funktionen beskrevet ved tuplen (K, E v, (N 1,.., N n ), env v, env f ). Dette beskrives som denne regel. [erk] function N f (N 1 : T 1,.., N n : T n ) uses E v does K, sto, envl ef sto, envl hvor envl = (env v, env f ) : envl og env f = env f [N f (K, (N 1,.., N n ), env v, env f ] og envl = (env v, upd(env f )) : envl Bemærk at upd(env f ) også opdaterer den tupel som N f er bundet til, og at env v altid vil være tom, idet der ikke erklæres variable i globalt scope, hvor funktionserklæringerne nder sted. Resten af transitionreglerne for f er givet i bilag C Aritmetiske udtryk Den operationelle semantik for arimetiske udtryk U a er givet ved et transitionssystem (Γ a, a, T a ), hvor Γ a = (U a U pseudo V) Store Envl T a = V Store Envl Bemærk at vi her introducerer pseudoudtryk U pseudo. Vi benævner enkelte pseudoudtryk ved metavariablen U pseudo. Pseudoudtryk er deneret ved følgende opbygningsregler. P pseudo ::= U E v K Transitionsreglerne for a er givet på en af af følgende former. Selvom evalueringen af udtryk ikke medfører sideeekter som kunne ændre på lageret eller bindingerne, så vil et funktionskald medføre midlertidige ændringer af stakken envl og lageret sto. U a, sto, envl a U a, sto, envl U a, sto, envl a v, sto, envl 13

22 Kapitel 2. Sproget Sip Udvalgte transitionsregler Idet aritmetiske udtryk altid opererer på heltal, udfører vi heltalsdivision, som det fremgår af reglen [div-3] hvor det fremgår at resultatet af divisionen rundes ned til nærmeste heltal. [div-3] v 1 / v 2, sto, envl a v, sto, envl v hvor v = 1 v 2 Literale oversættes til værdier med hjælpefunktionen N : L a Z, som f.eks. for literalen 42 giver os værdien 42. Dette viser sig i reglen [lit]. [lit] L a, sto, envl a v, sto, envl hvor N (L a ) = v Opslag i lageret sker gennem de variabelnavne som er bundet til addresser i det øverste variabelenvironment i stakken, som angivet i reglen [var]. [var] N, sto, envl a v, sto, envl hvor envl = (env v, env f ) : envl og sto(env V (N)) = v I tilfælde af konstruktionen N [ v ] lægges værdien v til adressen bundet til N, som i reglen [opslag-2]. [opslag-2] N[v 1 ], sto, envl a v 2, sto, envl hvor envl = (env v, env f ) : envl og sto(env v (N) + v 1 ) = v 2 I reglerne for funktionskald, [kald-1] til [kald-8], benyttes en speciel notation. Idet en funktion evalueres opstår der pseudoudtryk, -kommandoer og -erklæringer som evalueres i et udtryk. Disse pseudokonstruktioner betegnes henholdsvis U, K og E v. I reglen [kald-1] introduceres disse pseudokonstruktioner i udtrykket. De indsatte udtryk er de aktuelle parametre til funktionen, og erklæringerne og kommandoen er bundet til funktionsnavnet N i env f. [kald-1] N(U p1,.., U pn ), sto, envl a U p1 ;..; U pn ; E v ; K N, sto, envl hvor envl = (env v, env f ) : envl og env f (N) = (K N, E v, (p 1,.., p n ), env v, env f ) Efter at alle udtryk er evalueret til værdier tildeles de aktuelle parametre plads i lageret på nye addresser som bindes til navnene på de formelle parametre. 14

23 2.3. SEMANTIK En variabel til funktionens returværdi bindes ligeledes til en ny adresse i lageret. Toppen af stakken er nu (env v, env f ) hvor env v er det variabelenvironment som er bundet til N, modiceret med førnævnte bindinger, og env f er det funktionsenvironment som er bundet til N. Alt dette sker i reglen [kald-4]. [kald-4] v p1 ;..; v pn ; E v ; K N, sto, envl a E v ; K N, sto, envl hvor envl = (env v, env f ) : envl og env f (N) = (K, E v, env v, env f ) og envl = (env v, env f ) : envl og a = env v (next) og env v = env v [p 1 a + 0]... [p n a + n 1][N a + n][next a + n + 1] og sto = sto[a + 0 v p1 ]... [a + n 1 v pn ] I reglerne [kald-5] og [kald-6] evalueres variabelerklæringerne bundet til N, så der oprettes nye variable til brug under evalueringen af kommandoen K N som evalueres i reglerne [kald-7] og [kald-8]. Efter evalueringen af K N bruges værdien på den addresse i lageret, som er bundet til N i det aktuelle variabelenvironment, som funktionskaldets værdi. Den øverste tupel på stakken smides væk, idet den repræsenterer de midlertidige bindinger som blev brugt under evalueringen af funktionskaldet, og en eventuel næste kommando skal evalueres med de bindinger som eksisterede inden funktionskaldet. [kald-8] K N, sto, envl k sto, envl K N, sto, envl a v, sto, envl hvor envl = (env v, env f ) : envl og v = sto (env v (N)) Resten af transitionsreglerne for a er givet i bilag C.4 sammen med de få som er gengivet i dette afsnit Boolske udtryk Den operationelle semantik for boolske udtryk U b er givet ved et transitionssystem (Γ b, b, T b ) hvor Γ b = (U b U pseudo V) Store Envl T b = V Store Envl Vi bruger igen U pseudo som deneret i afsnit Idet funktionskald og håndtering af variable og lister fungerer helt ligesom de tilsvarende konstruktioner i de arimetiske udtryk. Transitionsreglerne for b er givet på en af følgende former, idet boolske udtryk på lige fod med aritmetiske udtryk kan indføre midlertidige bindinger ved funktionskald, og derved ændre lageret og stakken. 15

24 Kapitel 2. Sproget Sip U b, sto, envl b U b, sto, envl U b, sto, envl b v, sto, envl Transitionsreglerne for b er givet i bilag C Kommandoer Den operationelle semantik for kommandoer K er givet ved et transitionssystem (Γ k, K, T k ) hvor Γ k = K Store Envl T k = Store Envl Transitionerne er givet ved reglerne opstillet på en af følgende former, idet kommandoer kun ændrer på indeholdet af sto. K, sto, envl k sto, envl K, sto, envl k K, sto, envl Udvalgte transitionsregler Rækkefølgen i en sekvens af kommandoer som skal udføres er dikteret i de to regler [sekvens-1] og [sekvens-2], hvor konstruktionen K 1 K 2 betyder at K 1 skal evalueres før K 2. [sekvens-1] [sekvens-2] K 1, sto, envl k K 1, sto, envl K 1 K 2, sto, envl k K 1 K 2, sto, envl K 1, sto, envl k sto, envl K 1 K 2, sto, envl k K 2, sto, envl Ændringerne i sto sker i kraft af tildeling af værdier til variable, som i regelen [tildel-2] hvor værdien v i sto bindes til adressen variabelnavnet N er bundet til i env v. [tildel-2] N := v ;, sto, envl k sto[a v], envl hvor envl = (env V, env F ) : envl og a = env V (N) Tildelinger af værdier til elementer i lister fungerer næsten ligesådan, men den tildelede adresse er summen af adressen bundet til N og det indeks v 1 som er givet. 16

25 2.4. TYPEREGLER [tildel-5] U, sto, envl u U, sto, envl N [ v 1 ] := v 2 ;, sto, envl k sto[a v], envl, hvor envl = (env V, env F ) : envl og a = env V (N) + v 1 Der er to løkkekonstruktioner i Sip. while-løkker er rekursivt deneret i reglen [while]. [while] while U b do K, sto, envl k if U b then K while U b do K else skip, sto, envl Sip indeholder også for-løkker. Dette er dog udelukkende en konstruktion, som skal gøre programmere lettere at læse og skrive. Den tilføjer ikke ny funktionalitet til Sip, hvilket tydeligt fremgår af transitionsreglen [for], hvor den skiftes ud med en ækvivalent kommando. [for] for N from U a1 to U a2 do K, sto, envl k N := U a1 ; while N < U a2 do K N := N + 1, sto, envl Resten af transitionreglerne for k er givet i bilag C Typeregler Vi vil i dette afsnit beskrive typereglerne for Sip. Disse regler beskriver hvad man må og ikke må når man sammensætter typer med operatorer. Alle konstruktioner i Sip siges at have en type fra mængden T (T T), hvor T er mængden af alle lister bestående af elementer fra T, og typen angiver at en konstruktion er veltypet. En type fra mængden T T, angives med notationen (T 1,.., T n ) T, og bruges til at angive typen af en funktion, hvor T 1,.., T n er typerne af de formelle parametre og T typen af funktionens returværdi. Vi denerer type-environmentet som en partiel funktion env t : N L P E U K T Env t sådan at env t (N) = T hvis navnet N har typen T. Typereglerne kan nu gives med følgende notation [navn] præmisser env t a : T 17

26 Kapitel 2. Sproget Sip Hvor a N L P E U K 2 og env t (a) = T hvis alle reglerne i præmisser gælder. Bemærk at enkelte konstruktioners typer er deneret med notationen env t (K) = T, hvor K er en konstruktionen som har typen T. Vi er desuden nødt til at udvide opdateringssyntaksen fra denition 1.1 i afsnit 2.3, idet vi gerne vil kunne opdatere typeenvironments i forhold til konstruktionerne E v og E f. Disse ændringer deneres således for erklæringer af variable env t [N : T ;] = env t [N T ] env t [E v1 E v2 ] = env t [E v1 ][E v2 ] og således for erklæringer af funktioner env t [function N ( N 1 : T 1,.., N n : T n ) : T uses E v does K] = env t [N (T 1,.., T n ) T ] env t [function N ( N 1 : T 1,.., N n : T n ) : T does K] = env t [N (T 1,.., T n ) T ] env t [E f1 E f2 ] = env t [E f1 ][E f2 ] Udvalgte eksempler på typeregler Bemærk at der ikke er typeregler for erklæring af variable. Idet der ikke indgår kommandoer eller udtryk kan der ikke gå noget galt. Derfor typecheckes erklæringer af variable aldrig. Erklæringer af variable er altså altid veltypede. Hovedreglen er at en konstruktion er veltypet hvis dens umiddelbare bestanddele er veltypede. I nogle tilfælde er der dog yderligere krav. Udvalgte typeregler er gengivet i de følgende afsnit, men de fuldstændige sæt af typeregler ndes i bilag D. Erklæring af funktioner En funktionserklæring er veltypet relativt til et typeenvironment env t hvis den tilknyttede kommando er veltypet relativt til evn t ændret i forhold til de tilknyttede erklæringer af variable. Dette udmønter sig i typereglen [erk-uses]. Der ndes også en typeregel for erklæringer uden de tilknyttede erklæringer af variable [erk-nouses], men da den er meget lig [erk-uses] er den ikke gengivet her. [erk-uses] env t [E v ] K : env t function N ( N 1 : T 1,.., N n : T n ) : T uses E v does K : 2 Eller, hvis man er mere munter, a K U P L E N 18

27 2.4. TYPEREGLER Typereglen [sekvens] dikterer at en sekvens af funktionserklæringer E f1 E f2, er veltypet relativt til et typeenvironment env t hvis de to sider er veltypede relativt til et env t hvor de to siders ændringer er tilføjet. [sekvens] env t [E f1 E f2 ] E f1 : env t [E f1 E f2 ] E f2 : env t E f1 E f2 : Kommandoer En tildeling af et udtryks værdi til en variabel er veltypet relativt til et typeenvironment env t hvis variabelnavnet og udtrykket har samme type i env t. Hvis der er tale om en tildeling til et element i en liste skal listens type være en T list hvor T er udtrykkets type i env t. Desuden skal udtrykket U a som bestemmer den tilskrevne plads i listen have typen int. Disse to regler er givet i [tildel-1] og [tildel-2]. [tildel-1] [tildel-2] env t N : T 1 env t U : T 2, env t N := U ; : hvor T 1 = T 2 env t N : T l env t U b : int env t U : T e env t N [ U a ] := U ; : hvor T l = T e list ( v ) En løkkekonstruktion for N from U a1 to U a2 do K er veltypet relativt til env t hvis variabelnavnet N og udtrykkene U a1 og U a2 har typen int. Kommandoen K skal desuden være veltypet. [for] env t N : int env t U a1 : int env t U a2 : int env t K : env t for N from U a1 to U a2 do K : Udtryk Både addition-, substraktion-, multiplikation-, division- og modulokonstruktionerne har samme krav til de umiddelbare bestanddele. Både højre og venstre side skal have typen int. For eksempel er typereglen for additionskonstruktioner, [add], gengivet her. De boolske udtryk U a < U a, U a > U a og U a = U a har enslydende krav til de umiddelbare bestanddele, dog har disse udtryk typen bool. 19

28 Kapitel 2. Sproget Sip [add] env t U a1 : int env t U a1 env t U a2 : int + U a2 : int Et funktionskald N ( U 1,.., U n ) har typen T hvis funktionsnavnet N har typen (T 1,.., T n ) T hvor alle udtryk U 1,.., U n har typen med samme plads i følgen T 1,.., T n. [kald] env t U 1 : T 1,.., env t U n : T n env t N ( U 1,.., U n ) : T hvis env t (N) = (T 1,.., T n ) T 20

29 Del III Parallelitet 21

30 KAPITEL 3 Hvad er parallelitet? Vi møder paralleliteten ofte i hverdagen; f.eks. kasselinjerne i supermarkedet, ersporede motorveje og uddelegering af arbejde i en gruppe, sådan at alle kan arbejde på emner, der ikke overlapper. I datalogi består udtrykket parallelitet dog i det at opdele en opgave i ere delopgaver og tildele disse opgaver til ere processer, der kan køre samtidigt. 3.1 Parallelitet betragtet som etning Vi vil i første omgang betragte det, at to programmer afvikles parallelt, som at de to programmer hver især bliver delt op i mindre programmer, som derefter afvikles i en ikke-deneret rækkefølge, hvor de to programmers dele indbyrdes bevarer deres rækkefølge. Dette kaldes etning, som beskrevet i [Hüt07, s. 84]. Vi introducerer nu sproget Sep 1 som er Sip med de tilføjelser til syntaksen som er vist i tabel 3.1. Et eksempel på en kommando i Sep kan ses på gur 3.1. K ::=... K par K Tabel 3.1: Tilføjelsen til den abstrakte syntaks for Sip x := 0; y := 0; x := x + 1; x := y + 1; par y := y + 1; y := x + 1; Figur 3.1: Eksempel på en kommando skrevet i Sep Konstruktioner som K 1 par K 2 par K 3, betyder at K 1, K 2 og K 3 skal afvikles parallelt. Transistionsreglerne for par, som ses i tabel 3.2, giver os ingen indsigt i rækkefølge af kommandoer. Eekten af dette ses i eksemplerne i tabel 3.3. Man kan se i eksemplet kan sluttilstanden for variablene afhænge af rækkefølgen af de kommandoer, som modicerer den. Derfor kan vi ikke forudsige en sådan tilstand, når vi ikke kan forudsige rækkefølgen af disse kommandoer. 3.2 Mål for parallelisering For at give et mål for, hvor meget man har fået ud af at parallelisere en given opgave bruges udtrykket speedup S n, som beskrevet i [GGKK03, s. 198], hvor 1 Sip med Eksplicit Parallelitet 22

31 3.2. MÅL FOR PARALLELISERING [Par-1] [Par-2] [Par-3] [Par-4] K 1, sto, envl K 1, sto, envl K 1 par K 2, sto, envl K 1 par K 2, sto, envl K 1, sto, envl sto, envl K 1 par K 2, sto, envl K 2, sto, envl K 2, sto, envl K 2, sto, envl K 1 par K 2, sto, envl K 1 par K 2, sto, envl K 2, sto, envl sto, envl K 1 par K 2, sto, envl K 1, sto, envl Tabel 3.2: Smallstep-semantik for nye kommandoer i Sep n er antallet af tilgængelige processorer. Det er nødvendigt at S n > 1, for at det kan betale sig at parallelisere. Denition 1.3 (Speedup). Givet at den hurtigste algoritme til at løse et problem P sekventielt tager tiden T 1 og en algoritme, som kan løse problemet parallelt tager tiden T n, hvor n er antallet af processorer, deneres speedup som: S n (P ) = T 1 T n. Et ideelt speedup opnås hvis S n = n, men dette opnås i praksis ikke ofte, da forskellige faktorer spiller ind: Overhead: ventetid, tråd-til-tråd-kommunikation, opstart af tråde Afhængigheder: hvis opgaver i det sekventielle program afhænger af andre opgaver, fås ventetid. Dette diskuteres senere i afsnit

32 Kapitel 3. Hvad er parallelitet? x := 0 ; x := 0 ; x := x + 1 ; x := y + 1 ; par x := x + 1 ; x := y + 1 ;, sto, evnl x := x + 1 ; x := y + 1 ; par x := x + 1 ; x := y + 1 ;, sto[ax 0, ay 0], envl x := y + 1 ; par x := x + 1 ; x := y + 1 ;, sto[ax 1, ay 0], envl x := y + 1 ; par x := y + 1 ;, sto[ax 1, ay 1], envl x := y + 1 ;, sto[ax 2, ay 1], envl sto[ax 2, ay 2], envl x := 0 ; x := 0 ; x := x + 1 ; x := y + 1 ; par x := x + 1 ; x := y + 1 ;, sto, envl x := x + 1 ; x := y + 1 ; par x := x + 1 ; x := y + 1 ;, sto[ax 0, ay 0], envl x := x + 1 ; x := y + 1 ;, sto[ax 1, ay 0], envl sto[ax 1, ay 2], envl Tabel 3.3: To forskellige sluttilstande for kommandoen i gur 3.1 med semantikken i tabel 3.2. Det gælder at envl = (envv, envf ) : envl og ax = envv(x), ay = envv(y), hvor envv er deneret for x og y. 24

33 KAPITEL 4 Hvad er parallelisering? Når vi vil oversætte et sekventielt program til et parallelt program, ønsker vi at identicere dele af sekventiel kildekode, der kan køre samtidigt, sådan at vi stadig kan være sikre på at det parallelle program er semantisk ækvivalent 1 med det sekventielle program. Dette kan medføre, at vi i visse situationer ikke kan køre ere dele samtidig. Derfor vælger vi at omtale, at et program kan være mere parallelt end et andet, hvilket efter nogle denitioner vil blive formelt deneret. I følgende denition præsenteres en dynamisk analyse af et program baseret på semantikken for Sep beskrevet i tabel 3.1: Denition 1.4. Lad γ 0 (X) være antallet af kommandoer der udføres parallelt for en given Sep -konstruktion X. γ 0 (K 1 K 2 ) = γ 0 (K 1 ) γ 0 (K 1 par K 2 ) = γ 0 (K 1 ) + γ 0 (K 2 ) γ 0 (X) = 1, ellers Denition 1.5. Til dynamisk analyse af parallelitet i et Sep -program, lad da γ s (P ) være den sande værdi for det maksimale antal af kommandoer K, der udføres parallelt i programmet P. γ s (P ) = max γ 0 (X ) X, s X, s, hvor s, s Store Envl og X, X er Sep -konstruktioner. For at vi kan bestemme γ s (P ) for et givent program, kræver det at vi kan aæse enhver tilstand til alle input. Hvis γ s (P ) er beregnbar, kan vi bruge γ s (P ) på dette eksempel: P = P x := 42 ; par x := 42 ;, hvor P er et sekventielt program. Vi får nu at 1 hvis hvis P kører i uendelig løkke γ s (P ) = for ethvert input.. 2 ellers Men da Sep er et Turing-fuldstændigt sprog, er det uafgørbart om et sekventielt program P kører i uendelig løkke for ethvert input [Sip06, s. 175], hvorved γ s (P ) ikke er beregnbar. Vi er derfor nødt til at nde en måde at bestemme den statiske grad af parallelitet ved analyse af programmets kildekode. Dette leder til indførelsen af γ a, en approksimeret grad af parallelitet. Da γ a er en approksimation, hvor vi tager den mindste værdi i tilfælde af et valg, stiller vi som krav at γ a (P ) γ s (P ). 1 Semantisk ækvivalens deneres senere i afsnit

34 Kapitel 4. Hvad er parallelisering? Denition 1.6. Lad γ 0(K) være en approksimerede værdi for det maksimale antal samtidige kommandoer, ved statisk analyse af kommandoer i Sep. γ 0(K) er deneret ved: γ 0(function N(E v,..., E v ) uses E v does K) = γ 0(K) γ 0(K 1 K 2 ) = maxγ 0(K 1 ), γ 0(K 2 ) γ 0(K 1 par K 2 ) = γ 0(K 1 ) + γ 0(K 2 ) γ 0(if U then K 1 else K 2 ) = minγ 0(K 1 ), γ 0(K 2 ) γ 0(for N from U 1 to U 2 do K) = γ 0(K) γ 0(while U do K) = γ 0(K) γ 0(K) = 1, ellers Denition 1.7. Lad γ a (P ) være den approksimerede sande grad af parallelitet baseret på statisk analyse. γ a (P ) = max γ 0(E f ) E f erk(p ), hvor erk(p ) er mængden af funktionserklæringer i P. γ a (P ) er imidlertid en meget grov approksimation, og den opfylder ikke altid vores krav om at γ a (P ) γ s (P ). I situationer som while false do K1 par K2 par K3; vil den approksimerede parallelitet medregne kroppen af while-løkken, mens den sande parallitet ikke vil blive berørt, da løkken ikke vil blive kørt. Dog mener vi at dette er et så ekstremt eksempel at der stadig vil være et formål ved at arbejde videre med denitionen. Vi vil dog ikke udelukkende bruge γ a til at vurdere om et program er mere parallelt end et andet, da vi også ønsker at se på hvor jævnt paralleliteten uddelt over udførelsen. Dette kan ses som at vores grad af parallelitet belønner en lige fordeling af udførte kommandoer over trådene. Vi indfører derfor den gennemsnitlige parallelitet [GGKK03, s. 90]. Til dette benyttes to funktioner, H(P ) der bestemmer højden af programmet P og A(P ) der bestemmer det samlede antal kommandoer i P ved statisk analyse. Med disse funktioner kan vi bestemme den gennemsnitlige parallelitet af et program ved A(P ) /H(P ). Vi ønsker en høj gennemsnitlig parallelitet. Denition 1.8. Lad H(P ) være den approksimerede, maksimale højde af pro- 26

35 4.1. SEMANTISK ÆKVIVALENS OG PARALLELITET grammet P : H(P ) = E f erk(p ) H(E f ) H(function N(E v1,..., E vj ) uses E v does K) = H(K) H(K 1 par K 2 ) = maxh(k 1 ), H(K 2 ) H(K 1 K 2 ) = H(K 1 ) + H(K 2 ) H(if U then K 1 else K 2 ) = H(U) + H(K j ), K 1 hvis γ hvor K j = 0(K 1 ) γ 0(K 2 ) K 2 ellers H(for N from U 1 to U 2 do K) = H(U 1 ) + H(U 2 ) + H(K) H(while U do K) = H(U) + H(K) H(U) = 1 H(K) = 1, ellers Bemærk at selvom der kan forekomme funktionskald i et udtryk U, som vil medføre evaluering af kommandoer, så er H(U) = 1. Dette skyldes at der kan forekomme rekursive kald i funktioner. Det samme gør sig gældende i denition 1.9. Denition 1.9. Lad A(P ) være det samlede antal af kommandoer i programmet P. For A(P ) gælder de samme regler for kommandokonstruktioner som for H(P ), med undtagelse af (K 1 par K 2 ), der deneres således: A(K 1 par K 2 ) = A(K 1 ) + A(K 2 ) A(K) = H(K) ellers. Som tidligere nævnt ønsker vi en så høj gennemsnitlig parallelitet som muligt. Dette er et ønskværdigt scenarie da vi så har en så lille H som muligt. Samtidigt ønsker vi en høj værdi for γ a, idet at jo højere γ a er for et program P, des ere samtidige kommandoer vil i værste fald blive udført på et tidspunkt under evaluering af P. For at understrege hvad vi er kommet frem til, har vi følgende denition: Denition Lad P 1 og P 2 være semantisk ækvivalente og lad P 1 være fremkommet ved en parallelisering af P 2. P 1 er mere parallelt end P 2 hvis: γ a (P 1 ) > γ a (P 2 ) og A(P 1) H(P 1 ) > A(P 2) H(P 2 ) 4.1 Semantisk ækvivalens og parallelitet Vi vil i dette afsnit denere semantisk ækvivalens mellem et Sip -program og et Sep -program. Vi har ikke tænkt os at vise ækvivalensen mellem Sip - og Sep -konstruktioner, men vi mener at denne diskussion er relevant mht. vores parallelisering. 27

Sproget Six. Til brug i rapportopgaven på kurset Oversættere. Vinter 2006. Abstract

Sproget Six. Til brug i rapportopgaven på kurset Oversættere. Vinter 2006. Abstract Sproget Six Til brug i rapportopgaven på kurset Oversættere Vinter 2006 Abstract Six er baseret på det sprog, der vises i figur 6.2 og 6.4 i Basics of Compiler Design. Den herværende tekst beskriver basissproget

Læs mere

Åben uddannelse, Efterår 1996, Oversættere og køretidsomgivelser

Åben uddannelse, Efterår 1996, Oversættere og køretidsomgivelser 3/10/96 Seminaret den 26/10 vil omhandle den sidste fase af analysen og de første skridt i kodegenereringen. Det drejer sig om at finde betydningen af programmet, nu hvor leksikalsk og syntaktisk analyse

Læs mere

JavaScript. nedarvning.

JavaScript. nedarvning. JavaScript er et sprog, der kan give en hjemmeside mere funktionalitet og gøre den interaktiv, så den reagerer på læsernes handlinger. CGI (Common Gateway Interface) har hidtil været de protokoller, man

Læs mere

Induktive og rekursive definitioner

Induktive og rekursive definitioner Induktive og rekursive definitioner Denne note omhandler matematiske objekter, som formelt er opbygget fra et antal basale byggesten, kaldet basistilfælde eller blot basis, ved gentagen brug af et antal

Læs mere

Integer.parseInt(args[0]) konverterer tegnstreng (f.eks. "10") til heltal (10). if (udtryk) else

Integer.parseInt(args[0]) konverterer tegnstreng (f.eks. 10) til heltal (10). if (udtryk) else Programmering 1999 Forelæsning 2, fredag 3. september 1999 Betingede ordrer: if-, if Indlejrede betingede ordrer Løkker med begrænset iteration: for Løkker med ubegrænset iteration: while Betingede ordrer,

Læs mere

DATALOGI 1E. Skriftlig eksamen fredag den 7. juni 2002

DATALOGI 1E. Skriftlig eksamen fredag den 7. juni 2002 Københavns Universitet Naturvidenskabelig Embedseksamen DATALOGI 1E Skriftlig eksamen fredag den 7. juni 2002 Opgaverne vægtes i forhold til tidsangivelsen, og hver opgaves besvarelse bedømmes som en helhed.

Læs mere

Projekt - Visual Basic for Applications N på stribe

Projekt - Visual Basic for Applications N på stribe Projekt - Visual Basic for Applications N på stribe Mikkel Kaas og Troels Henriksen - 03x 3. november 2005 1 Introduktion Spillet tager udgangspunkt i det gamle kendte 4 på stribe, dog med den ændring,

Læs mere

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi Roskilde Universitetscenter side 1 af 9 sider Skriftlig eksamen i Datalogi Modul 1 Vinter 1999/2000 Opgavesættet består af 6 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 5% Opgave 2

Læs mere

Indhold. Maskinstruktur... 3. Kapitel 1. Assemblersprog...3. 1.1 Indledning...3 1.2 Hop-instruktioner... 7 1.3 Input og output...

Indhold. Maskinstruktur... 3. Kapitel 1. Assemblersprog...3. 1.1 Indledning...3 1.2 Hop-instruktioner... 7 1.3 Input og output... Indhold Maskinstruktur... 3 Kapitel 1. Assemblersprog...3 1.1 Indledning...3 1.2 Hop-instruktioner... 7 1.3 Input og output... 9 Kapitel 2. Maskinkode... 13 2.1 Den fysiske maskine... 13 2.2 Assemblerens

Læs mere

Dat 2/BAIT6/SW4: Syntaks og semantik En manual for studerende

Dat 2/BAIT6/SW4: Syntaks og semantik En manual for studerende Dat 2/BAIT6/SW4: Syntaks og semantik En manual for studerende Hans Hüttel Foråret 2011 Indhold Indhold 1 1 Kurset er lavet om! 1 2 Kursets indhold 2 2.1 Kursets emner................................ 2

Læs mere

DATALOGI 1E. Skriftlig eksamen mandag den 23. juni 2003

DATALOGI 1E. Skriftlig eksamen mandag den 23. juni 2003 Københavns Universitet Naturvidenskabelig Embedseksamen DATALOGI 1E Skriftlig eksamen mandag den 23. juni 2003 Opgaverne vægtes i forhold til tidsangivelsen herunder, og hver opgaves besvarelse bedømmes

Læs mere

Sikre Beregninger. Kryptologi ved Datalogisk Institut, Aarhus Universitet

Sikre Beregninger. Kryptologi ved Datalogisk Institut, Aarhus Universitet Sikre Beregninger Kryptologi ved Datalogisk Institut, Aarhus Universitet 1 Introduktion I denne note skal vi kigge på hvordan man kan regne på data med maksimal sikkerhed, dvs. uden at kigge på de tal

Læs mere

Videregående Algoritmik. Version med vejledende løsninger indsat!

Videregående Algoritmik. Version med vejledende løsninger indsat! Videregående Algoritmik DIKU, timers skriftlig eksamen, 1. april 009 Nils Andersen og Pawel Winter Alle hjælpemidler må benyttes, dog ikke lommeregner, computer eller mobiltelefon. Opgavesættet består

Læs mere

Programmering. Det rent og skært nødvendige, det elementært nødvendige! Morten Dam Jørgensen

Programmering. Det rent og skært nødvendige, det elementært nødvendige! Morten Dam Jørgensen Programmering Det rent og skært nødvendige, det elementært nødvendige! Morten Dam Jørgensen Oversigt Undervisningen Hvad er programmering Hvordan er et program organiseret? Programmering og fysik Nobelprisen

Læs mere

Programmering i C. Lektion 4. 5. december 2008

Programmering i C. Lektion 4. 5. december 2008 Programmering i C Lektion 4 5. december 2008 Funktioner Eksempel Fra sidst 1 Funktioner 2 Eksempel Funktioner Eksempel Eksempel: 1 / f u n k t i o n s p r o t o t y p e r / i n t i n d l a e s ( void )

Læs mere

Abstrakte datatyper C#-version

Abstrakte datatyper C#-version Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Abstrakte datatyper C#-version Finn Nordbjerg 1/9 Abstrakte Datatyper Denne note introducerer kort begrebet abstrakt datatype

Læs mere

Parallelisering/Distribuering af Genetiske Algoritmer

Parallelisering/Distribuering af Genetiske Algoritmer Parallelisering/Distribuering af Genetiske Algoritmer Hvorfor parallelisere/distribuere? Standard GA algoritme Modeller Embarassing parallel Global (fitness evaluering) Island (subpopulation) Grid/Cellular

Læs mere

t a l e n t c a m p d k Matematiske Metoder Anders Friis Anne Ryelund 25. oktober 2014 Slide 1/42

t a l e n t c a m p d k Matematiske Metoder Anders Friis Anne Ryelund 25. oktober 2014 Slide 1/42 Slide 1/42 Hvad er matematik? 1) Den matematiske metode 2) Hvad vil det sige at bevise noget? 3) Hvor begynder det hele? 4) Hvordan vælger man et sæt aksiomer? Slide 2/42 Indhold 1 2 3 4 Slide 3/42 Mængder

Læs mere

Dokumentation af programmering i Python 2.75

Dokumentation af programmering i Python 2.75 Dokumentation af programmering i Python 2.75 Af: Alexander Bergendorff Jeg vil i dette dokument, dokumentere det arbejde jeg har lavet i løbet opstarts forløbet i Programmering C. Jeg vil forsøge, så vidt

Læs mere

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet side af sider Danmarks Tekniske Universitet Skriftlig prøve, den 6. maj 0. Kursusnavn: Algoritmer og datastrukturer I Kursus nr. 005. Tilladte hjælpemidler: Skriftlige hjælpemidler. Varighed: timer Vægtning

Læs mere

dcomnet-nr. 8 Simpel aritmetik på maskinniveau Computere og Netværk (dcomnet)

dcomnet-nr. 8 Simpel aritmetik på maskinniveau Computere og Netværk (dcomnet) dcomnet-nr. 8 Simpel aritmetik på maskinniveau Computere og Netværk (dcomnet) Efterår 2009 1 Simpel aritmetik på maskinniveau I SCO, appendix A, er det beskrevet, hvordan man adderer ikke-negative heltal

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2012 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 15. marts, 2012 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Eksempel: Skat i år 2000

Eksempel: Skat i år 2000 Kursus 02199: Programmering afsnit 2.1-2.7 Anne Haxthausen IMM, DTU 1. Værdier og typer (bl.a. char, boolean, int, double) (afsnit 2.4) 2. Variable og konstanter (afsnit 2.3) 3. Sætninger (bl.a. assignments)

Læs mere

Regulære udtryk og endelige automater

Regulære udtryk og endelige automater Regulære udtryk og endelige automater Regulære udtryk: deklarative dvs. ofte velegnede til at specificere regulære sprog Endelige automater: operationelle dvs. bedre egnet til at afgøre om en given streng

Læs mere

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version Finn Nordbjerg 1/9 Indledning I det følgende introduceres et par abstrakte

Læs mere

Dynamisk programmering

Dynamisk programmering Dynamisk programmering Dynamisk programmering Et algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Har en hvis lighed med divide-and-conquer: Begge opbygger løsninger til større problemer

Læs mere

DATALOGI 1E. Skriftlig eksamen torsdag den 3. juni 2004

DATALOGI 1E. Skriftlig eksamen torsdag den 3. juni 2004 Københavns Universitet Naturvidenskabelig Embedseksamen DATALOGI 1E Skriftlig eksamen torsdag den 3. juni 2004 Opgaverne vægtes i forhold til tidsangivelsen herunder, og hver opgaves besvarelse bedømmes

Læs mere

DM536. Rapport og debug

DM536. Rapport og debug DM536 Rapport og debug Kilder Vigtig.it (Felix Palludan Hargreaves) http://vigtig.it/dm502/howto_report.pdf http://vigtig.it/blog/teaching/#toc-relevant-tips Peter Schneider-Kamp http://imada.sdu.dk/~petersk/dm536/project2.pdf

Læs mere

Baggrundsnote om logiske operatorer

Baggrundsnote om logiske operatorer Baggrundsnote om logiske operatorer Man kan regne på udsagn ligesom man kan regne på tal. Regneoperationerne kaldes da logiske operatorer. De tre vigtigste logiske operatorer er NOT, AND og. Den første

Læs mere

Affine - et krypteringssystem

Affine - et krypteringssystem Affine - et krypteringssystem Matematik, når det er bedst Det Affine Krypteringssystem (Affine Cipher) Det Affine Krypteringssystem er en symmetrisk monoalfabetisk substitutionskode, der er baseret på

Læs mere

Sortering. De n tal i sorteret orden. Eksempel: Kommentarer:

Sortering. De n tal i sorteret orden. Eksempel: Kommentarer: Sortering Sortering Input: Output: n tal De n tal i sorteret orden Eksempel: Kommentarer: 6, 2, 9, 4, 5, 1, 4, 3 1, 2, 3, 4, 4, 5, 9 Sorteret orden kan være stigende eller faldende. Vi vil i dette kursus

Læs mere

Matematik. 1 Matematiske symboler. Hayati Balo,AAMS. August, 2014

Matematik. 1 Matematiske symboler. Hayati Balo,AAMS. August, 2014 Matematik Hayati Balo,AAMS August, 2014 1 Matematiske symboler For at udtrykke de verbale udsagn matematisk korrekt, så det bliver lettere og hurtigere at skrive, indføres en række matematiske symboler.

Læs mere

01017 Diskret Matematik E12 Alle bokse fra logikdelens slides

01017 Diskret Matematik E12 Alle bokse fra logikdelens slides 01017 Diskret Matematik E12 Alle bokse fra logikdelens slides Thomas Bolander 1 Udsagnslogik 1.1 Formler og sandhedstildelinger symbol står for ikke eller og ( A And) hvis... så... hvis og kun hvis...

Læs mere

Matricer og lineære ligningssystemer

Matricer og lineære ligningssystemer Matricer og lineære ligningssystemer Grete Ridder Ebbesen Virum Gymnasium Indhold 1 Matricer 11 Grundlæggende begreber 1 Regning med matricer 3 13 Kvadratiske matricer og determinant 9 14 Invers matrix

Læs mere

Programmering, algoritmik og matematik en nødvendig sammenblanding?

Programmering, algoritmik og matematik en nødvendig sammenblanding? Programmering, algoritmik og matematik en nødvendig sammenblanding? Oplæg til IDA møde, 29. november 2004 Martin Zachariasen DIKU 1 Egen baggrund B.Sc. i datalogi 1989; Kandidat i datalogi 1995; Ph.D.

Læs mere

Grundlæggende Matematik

Grundlæggende Matematik Grundlæggende Matematik Hayati Balo, AAMS August 2012 1. Matematiske symboler For at udtrykke de verbale udsagn matematisk korrekt, så det bliver lettere og hurtigere at skrive, indføres en række matematiske

Læs mere

Oversættere. Vejledende løsninger til Skriftlig eksamen onsdag d. 20. april 2005

Oversættere. Vejledende løsninger til Skriftlig eksamen onsdag d. 20. april 2005 Københavns Universitet Naturvidenskabelig Embedseksamen Oversættere Vejledende løsninger til Skriftlig eksamen onsdag d. 20. april 2005 Eksamenstiden er to timer. Opgavernes vægt i procent er angivet ved

Læs mere

4 Basal Objekt-orienteret Programmering I.

4 Basal Objekt-orienteret Programmering I. 4 Basal Objekt-orienteret Programmering I. Klasser i forhold til abstrakte datatyper og record-typer. Variable og operationer. Klasse-interfaces. Klasser og typer. Klasse-instantiering og initialisering.

Læs mere

Skriftlig eksamen, Programmer som Data 2. 3. januar 2014

Skriftlig eksamen, Programmer som Data 2. 3. januar 2014 Skriftlig eksamen, Programmer som Data 2. 3. januar 2014 Dette eksamenssæt har 5 sider. Tjek med det samme at du har alle siderne. Eksamenssættet udleveres elektronisk fra kursets hjemmeside torsdag 2.

Læs mere

Language design and compiler construction from an interdisciplinary perspective. Oversættere. 1. Februar - 27. Maj 2011

Language design and compiler construction from an interdisciplinary perspective. Oversættere. 1. Februar - 27. Maj 2011 3 BAIT 6. Semester Projekt gruppe: B602a Synopsis: Titel: Tema: Projekt periode: Projekt gruppe: Studieretning: Language design and compiler construction from an interdisciplinary perspective Sprog og

Læs mere

vil jeg blive mindet om det af VBA allerede mens jeg skriver koden, da der er tale om en såkaldt kompileringsfejl:

vil jeg blive mindet om det af VBA allerede mens jeg skriver koden, da der er tale om en såkaldt kompileringsfejl: Fejlhåndtering Selv de bedste programmører laver af og til fejl! Dette kommer sikkert som en overraskelse for de fleste, bortset fra de, der har arbejdet med et hvilket som helst større program. Fejl kan

Læs mere

28 Algoritmedesign. Noter. PS1 -- Algoritmedesign

28 Algoritmedesign. Noter. PS1 -- Algoritmedesign 28 Algoritmedesign. Algoritmeskabelon for Del og Hersk. Eksempler på Del og Hersk algoritmer. Binær søgning i et ordnet array. Sortering ved fletning og Quicksort. Maksimal delsums problem. Tætteste par

Læs mere

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet side af 3 sider anmarks Tekniske Universitet Skriftlig prøve, den 29. maj 203. ursusnavn: lgoritmer og datastrukturer ursus nr. 02326. jælpemidler: Skriftlige hjælpemidler. et er ikke tilladt at medbringe

Læs mere

En karakteristik af de regulære sprog. Ugens emner. FA minimering [5.1-5.2] MyHill-Nerode-sætningen en algoritme til minimering af FA er

En karakteristik af de regulære sprog. Ugens emner. FA minimering [5.1-5.2] MyHill-Nerode-sætningen en algoritme til minimering af FA er Ugens emner FA minimering [.-.] MyHill-Nerode-sætningen en algoritme til minimering af FA er En karakteristik af de regulære sprog Et sprog L er regulært hvis og kun hvis L beskrives af et regulært udtryk

Læs mere

RSA Kryptosystemet. Kryptologi ved Datalogisk Institut, Aarhus Universitet

RSA Kryptosystemet. Kryptologi ved Datalogisk Institut, Aarhus Universitet RSA Kryptosystemet Kryptologi ved Datalogisk Institut, Aarhus Universitet 1 Kryptering med RSA Her følger først en kort opridsning af RSA kryptosystemet, som vi senere skal bruge til at lave digitale signaturer.

Læs mere

ALMINDELIGT ANVENDTE FUNKTIONER

ALMINDELIGT ANVENDTE FUNKTIONER ALMINDELIGT ANVENDTE FUNKTIONER I dette kapitel gennemgås de almindelige regnefunktioner, samt en række af de mest nødvendige redigerings- og formateringsfunktioner. De øvrige redigerings- og formateringsfunktioner

Læs mere

Introduktion til datastrukturer. Introduktion til datastrukturer. Introduktion til datastrukturer. Datastrukturer

Introduktion til datastrukturer. Introduktion til datastrukturer. Introduktion til datastrukturer. Datastrukturer Introduktion til datastrukturer Introduktion til datastrukturer Philip Bille Datastrukturer Datastruktur. Metode til at organise data så det kan søges i/tilgås/manipuleres effektivt. Mål. Hurtig Kompakt

Læs mere

19 Hashtabeller. Noter. PS1 -- Hashtabeller. Hashing problemet. Hashfunktioner. Kollision. Søgning og indsættelse.

19 Hashtabeller. Noter. PS1 -- Hashtabeller. Hashing problemet. Hashfunktioner. Kollision. Søgning og indsættelse. 19 Hashtabeller. Hashing problemet. Hashfunktioner. Kollision. Søgning og indsættelse. Sammenligning af hashtabeller og søgetræer. 281 Hashing-problemet (1). Vi ønsker at afbilde n objekter på en tabel

Læs mere

Programmering i C Intro og grundlæggende C 5. marts 2007

Programmering i C Intro og grundlæggende C 5. marts 2007 Programmering i C Intro og grundlæggende C 5. marts 2007 Mads Pedersen, OZ6HR mads@oz6hr.dk Plan for kurset Ma. 5/3: Ma. 19/3: Ma. 2/4: To. 12/4: Formål, intro, grundlæggende Videre, sprogkonstruktioner

Læs mere

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2 DM502 Forelæsning 2 Repetition Kompilere og køre Java program javac HelloWorld.java java HeloWorld.java Debugge Java program javac -g HelloWorld.java jswat Det basale Java program public class HelloWorld

Læs mere

dintprog Manual Revision: 1241 August 24, 2010 I Introduktion 3 1 Notation 3 II Begreber 4 2 Grundbegreber om programmering 4

dintprog Manual Revision: 1241 August 24, 2010 I Introduktion 3 1 Notation 3 II Begreber 4 2 Grundbegreber om programmering 4 dintprog Manual Revision: 1241 August 24, 2010 Indhold I Introduktion 3 1 Notation 3 II Begreber 4 2 Grundbegreber om programmering 4 3 Grundbegreber om modellering 4 III Sprogkonstruktioner 5 4 Klasser

Læs mere

Fraktaler Mandelbrots Mængde

Fraktaler Mandelbrots Mængde Fraktaler Mandelbrots Mængde Foredragsnoter Af Jonas Lindstrøm Jensen Institut For Matematiske Fag Århus Universitet Indhold Indhold 1 1 Indledning 3 2 Komplekse tal 5 2.1 Definition.......................................

Læs mere

PHP 3 UGERS FORLØB PHP, MYSQL & SQL

PHP 3 UGERS FORLØB PHP, MYSQL & SQL PHP 3 UGERS FORLØB PHP, MYSQL & SQL Uge 1 & 2 Det basale: Det primære mål efter uge 1 og 2, er at få forståelse for hvordan AMP miljøet fungerer i praksis, og hvordan man bruger PHP kodesproget til at

Læs mere

Iteration af et endomorft kryptosystem. Substitutions-permutations-net (SPN) og inversion. Eksklusiv disjunktion og dens egenskaber

Iteration af et endomorft kryptosystem. Substitutions-permutations-net (SPN) og inversion. Eksklusiv disjunktion og dens egenskaber Produktsystemer, substitutions-permutations-net samt lineær og differentiel kryptoanalyse Kryptologi, fredag den 10. februar 2006 Nils Andersen (Stinson 3., afsnit 2.7 3.4 samt side 95) Produkt af kryptosystemer

Læs mere

Rekursion C#-version

Rekursion C#-version Note til Programmeringsteknologi Akademiuddannn i Informationsteknologi Rekursion C#-version Finn Nordbjerg 1 Rekursion Rekursionsbegrebet bygger på, at man beskriver noget ved "sig selv". Fx. kan tallet

Læs mere

Programmering I Java/C#

Programmering I Java/C# Programmering I Java/C# Dit første projekt Datatekniker Intro to C# C# (C Sharp) Et enkelt, moderne, generelt anvendeligt, objektorienteret programmeringssprog Udviklet af Microsoft, ledet af danskeren

Læs mere

Programmering C RTG - 3.3 09-02-2015

Programmering C RTG - 3.3 09-02-2015 Indholdsfortegnelse Formål... 2 Opgave formulering... 2 Krav til dokumentation af programmer... 3 ASCII tabel... 4 Værktøjer... 5 Versioner af ASCII tabel... 6 v1.9... 6 Problemer og mangler... 6 v2.1...

Læs mere

Kursusarbejde 3 Grundlæggende Programmering

Kursusarbejde 3 Grundlæggende Programmering Kursusarbejde 3 Grundlæggende Programmering Arne Jørgensen, 300473-2919 klasse dm032-1a 21. november 2003 Indhold 1. Kode 2 1.1. forestillinger.h............................................. 2 1.2. forestillinger.cc.............................................

Læs mere

Exceptions i Delphi. Try except

Exceptions i Delphi. Try except Exceptions i Delphi Exceptions er en teknik til at fange fejl under programafviklingen. Ikke programmeringsfejl, men fejl der opstår i forskellige situationer, f.eks. en fil der mangler en fil der er skrivebeskyttet,

Læs mere

dintprog Manual Revision: 731 September 30, 2009 1 Introduktion 3 1.1 Notation... 3 I Begreber 4 2 Grundbegreber om programmering 4

dintprog Manual Revision: 731 September 30, 2009 1 Introduktion 3 1.1 Notation... 3 I Begreber 4 2 Grundbegreber om programmering 4 dintprog Manual Revision: 731 September 30, 2009 Indhold 1 Introduktion 3 1.1 Notation................................. 3 I Begreber 4 2 Grundbegreber om programmering 4 3 Grundbegreber om modellering

Læs mere

Computerarkitektur. - en introduktion til computerarkitektur med LINDA

Computerarkitektur. - en introduktion til computerarkitektur med LINDA Computerarkitektur - en introduktion til computerarkitektur med LINDA faraz@butt.dk Faraz Butt mads@danquah.dk Mads Danquah doktor@dyregod.dk Ulf Holm Nielsen Roskilde Universitetscenter Naturvidenskabelig

Læs mere

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet ksamen 06, side af sider anmarks Tekniske Universitet Skriftlig prøve, den 6. maj 0. ursusnavn: lgoritmer og datastrukturer ursus nr. 06. Tilladte hjælpemidler: Skriftlige hjælpemidler. Varighed: timer

Læs mere

MIPS, registerallokering og MARS

MIPS, registerallokering og MARS MIPS, registerallokering og MARS Torben Mogensen 2011 Resumé Vi beskriver modulerne Mips.sml og RegAlloc.sml, samt hvordan de bruges sammen med MIPS-emulatoren MARS. 1 MIPS modulet Modulet Mips.sml indeholder

Læs mere

Opgave: BOW Bowling. Rules of Bowling. danish. BOI 2015, dag 1. Tilgængelig hukommelse: 256 MB. 30.04.2015

Opgave: BOW Bowling. Rules of Bowling. danish. BOI 2015, dag 1. Tilgængelig hukommelse: 256 MB. 30.04.2015 Opgave: BOW Bowling danish BOI 0, dag. Tilgængelig hukommelse: 6 MB. 30.04.0 Byteasar er fan af både bowling og statistik. Han har nedskrevet resultaterne af et par tidligere bowling spil. Desværre er

Læs mere

Matematisk induktion

Matematisk induktion Induktionsbeviser MT01.0.07 1 1 Induktionsbeviser Matematisk induktion Sætninger der udtaler sig om hvad der gælder for alle naturlige tal n N, kan undertiden bevises ved matematisk induktion. Idéen bag

Læs mere

Et udtrykstrç med de ære regnearter, heltalskonstanter og variabler beskrives. Type Expr = Sumèplus, minus, times, div: Args, const: Int, name: Textè

Et udtrykstrç med de ære regnearter, heltalskonstanter og variabler beskrives. Type Expr = Sumèplus, minus, times, div: Args, const: Int, name: Textè Opgave 1 è20èè Et udtrykstrç med de ære regnearter, heltalskonstanter og variabler beskrives af fçlgende rekursive Trine-type: Type Expr = Sumèplus, minus, times, div: rgs, const: Int, name: Textè Type

Læs mere

Kursus 02199: Programmering. Kontrol af programudførelsen. afsnit 3.1-3.5. if (indkomst > 267000) topskat = (indkomst-267000) * 0.

Kursus 02199: Programmering. Kontrol af programudførelsen. afsnit 3.1-3.5. if (indkomst > 267000) topskat = (indkomst-267000) * 0. Kursus 02199: Programmering afsnit 3.1-3.5 Anne Haxthausen IMM, DTU 1. Kontrol af programudførn (afsnit 3.1) 2. Valg-sætninger (if og switch) (afsnit 3.2 og 3.3) 3. Bloksætninger (afsnit 3.2) 4. Logiske

Læs mere

Regularitet og Automater

Regularitet og Automater Plan dregaut 2007 Regularitet og Automater Hvad er Regularitet og Automater? Praktiske oplysninger om kurset Ugens emner Introduktion til ugens opgaver 2 Regularitet og Automater Formål med kurset: at

Læs mere

Eksamen dcomnet Q2/2010. Navn

Eksamen dcomnet Q2/2010. Navn 2582 Eksamen dcomnet Q2/2010 ID Navn Example I A32-prg1 Betragt følgende program skrevet i IA-32 symbolsk maskinsprog:.section.data x:.long 2 r:.long 27.section.text.globl _start _start: pushl x movl $0,%ebx

Læs mere

Vejledning til Teknisk opsætning

Vejledning til Teknisk opsætning Vejledning til Teknisk opsætning v. 1.0 Adm4you, 2010. Indhold Kort om denne vejledning... 3 Generelt om easyourtime... 3 Installation af databasen... 3 Sikkerhed og rettigheder... 4 SQL Login... 4 Rettigheder

Læs mere

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet side af sider Danmarks Tekniske Universitet Skriftlig prøve, den. maj 00. Kursusnavn Algoritmer og datastrukturer Kursus nr. 06. Tilladte hjælpemidler: Alle hjælpemidler. Vægtning af opgaverne: Opgave

Læs mere

Spilstrategier. 1 Vindermængde og tabermængde

Spilstrategier. 1 Vindermængde og tabermængde Spilstrategier De spiltyper vi skal se på her, er primært spil af følgende type: Spil der spilles af to spillere A og B som skiftes til at trække, A starter, og hvis man ikke kan trække har man tabt. Der

Læs mere

Klasser. Grundlæggende Programmering med Projekt. Peter Sestoft Tirsdag 2. september 2008. (Tak til Jakob Bardram for nogle slides) Dagens begreber

Klasser. Grundlæggende Programmering med Projekt. Peter Sestoft Tirsdag 2. september 2008. (Tak til Jakob Bardram for nogle slides) Dagens begreber Klasser Grundlæggende Programmering med Projekt Peter Sestoft Tirsdag 2. september 2008 (Tak til Jakob Bardram for nogle slides) Dagens begreber Felt (field) Metode (method) Parameter (parameter) Sætning,

Læs mere

5. Kontrolstrukturer - Motivation og Oversigt

5. Kontrolstrukturer - Motivation og Oversigt 5. Kontrolstrukturer - Motivation og Oversigt I dette og de følgende afsnit vil vi - vigtigst af alt - møde forgreninger og løkker. Sådanne kaldes kontrolstrukturer, fordi vi med disse kan kontrollere

Læs mere

Start på Arduino og programmering

Start på Arduino og programmering Programmering for begyndere Brug af Arduino Start på Arduino og programmering EDR Hillerød Knud Krogsgaard Jensen / OZ1QK 1 Start på Arduino og programmering Sidste gang (Introduktion) Programmeringssproget

Læs mere

Mandelbrot smartphone applikation

Mandelbrot smartphone applikation Mandelbrot smartphone applikation Navne: Troels Leth Jensen & Morten Møller Studienumre: 20095039 & 20093873 Fag: ITSMAP 6-1-2012 Indholdsfortegnelse Introduktion... 2 Kravspecifikation... 2 Teori... 2

Læs mere

Oprids over grundforløbet i matematik

Oprids over grundforløbet i matematik Oprids over grundforløbet i matematik Dette oprids er tænkt som en meget kort gennemgang af de vigtigste hovedpointer vi har gennemgået i grundforløbet i matematik. Det er en kombination af at repetere

Læs mere

1 Program for forelæsningen

1 Program for forelæsningen 1 Program for forelæsningen Udvidelser af Bims (Kontrolstrukturer) Repeat-løkker For-løkker Non-determinisme God Ond parallelitet Alle emner hører under semantisk ækvivalens. 1.0.1 Fra tidligere.. Bims

Læs mere

Mini AT-forløb om kommunalvalg: Mandatfordeling og Retfærdighed 1.x og 1.y 2009 ved Ringsted Gymnasium MANDATFORDELING

Mini AT-forløb om kommunalvalg: Mandatfordeling og Retfærdighed 1.x og 1.y 2009 ved Ringsted Gymnasium MANDATFORDELING MANDATFORDELING Dette materiale er lavet som supplement til Erik Vestergaards hjemmeside om samme emne. 1 http://www.matematiksider.dk/mandatfordelinger.html I dette materiale er en række øvelser der knytter

Læs mere

Repræsentation af tal

Repræsentation af tal Repræsentation af tal DM526 Rolf Fagerberg, 2009 Bitmønstre 01101011 0001100101011011... Bitmønstre skal fortolkes for at have en betydning: Tal (heltal, kommatal) Bogstaver Computerinstruktion (program)

Læs mere

Algorithms & Architectures II

Algorithms & Architectures II Algorithms & Architectures II Algorithms & Architectures II Jens Myrup Pedersen Hans Peter Schwefel Kursusholdere Dagens lektion Overordnet mål: At etablere en forståelse for hvordan hardware og hardwarearkitekturer

Læs mere

Simulering af stokastiske fænomener med Excel

Simulering af stokastiske fænomener med Excel Simulering af stokastiske fænomener med Excel John Andersen, Læreruddannelsen i Aarhus, VIA Det kan være en ret krævende læreproces at udvikle fornemmelse for mange begreber fra sandsynlighedsregningen

Læs mere

Computer Science Camp

Computer Science Camp Computer Science Camp Uge 29, 2015 Ungdommens Naturvidenskabelige Forening Det faglige team Søren Dahlgaard (koordinator) Mathias Bæk Tejs Knudsen (koordinator) Kasper Fabæch Brandt Davy Leth Eskildsen

Læs mere

Sortering. Sortering ved fletning (merge-sort) Del-og-hersk. Merge-sort

Sortering. Sortering ved fletning (merge-sort) Del-og-hersk. Merge-sort Sortering Sortering ved fletning (merge-sort) 7 2 9 4! 2 4 7 9 7 2! 2 7 9 4! 4 9 7! 7 2! 2 9! 9 4! 4 1 2 Del-og-hersk Merge-sort Del-og-hersk er et generelt paradigme til algoritmedesign Del: opdel input-data

Læs mere

Mini-formelsamling. Matematik 1

Mini-formelsamling. Matematik 1 Indholdsfortegnelse 1 Diverse nyttige regneregler... 1 1.1 Regneregler for brøker... 1 1.2 Potensregneregler... 1 1.3 Kvadratsætninger... 2 1.4 (Nogle) Rod-regneregler... 2 1.5 Den naturlige logaritme...

Læs mere

Introduktion til MatLab Matematisk Modellering af Dynamiske Modeller ved Kasper Bjering Jensen, RUC, februar 2010

Introduktion til MatLab Matematisk Modellering af Dynamiske Modeller ved Kasper Bjering Jensen, RUC, februar 2010 Introduktion til MatLab Matematisk Modellering af Dynamiske Modeller ved Kasper Bjering Jensen, RUC, februar 2010 Computere er uvurderlige redskaber for personer der ønsker at arbejde med matematiske modeller

Læs mere

DM13-1. Obligatoriske Opgave - Kredsløbs design

DM13-1. Obligatoriske Opgave - Kredsløbs design DM13-1. Obligatoriske Opgave - Kredsløbs design Jacob Christiansen moffe42@imada.sdu.dk Institut for MAtematik og DAtalogi, Syddansk Universitet, Odense 1. Opgaven Opgaven består i at designe et kredsløb,

Læs mere

Kursusarbejde 2 Grundlæggende Programmering

Kursusarbejde 2 Grundlæggende Programmering Kursusarbejde 2 Grundlæggende Programmering Arne Jørgensen, 300473-2919 klasse dm032-1a 31. oktober 2003 Indhold 1. Kode 2 1.1. hotel.h.................................................... 2 1.2. hotel.cc...................................................

Læs mere

Optimering af fraværsregistrering

Optimering af fraværsregistrering Journal Optimering af fraværsregistrering Eksamensprojekt i Programmering C, klasse 3.4, 2011 AFLEVERET 09-05-2014 Indhold Abstract... Fejl! Bogmærke er ikke defineret. Problemformulering... 2 Produktet...

Læs mere

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 Opgavebesvarelsen skal afleveres som enten en printerudskrift eller som et passende dokument sendt via email til fjj@noea.dk. Besvarelsen skal

Læs mere

Oversættere Skriftlig eksamen onsdag d. 25. januar 2006

Oversættere Skriftlig eksamen onsdag d. 25. januar 2006 Københavns Universitet Naturvidenskabelig Embedseksamen Oversættere Skriftlig eksamen onsdag d. 25. januar 2006 Eksamenstiden er to timer. Opgavernes vægt i procent er angivet ved hver opgave. Den skriftlige

Læs mere

DDD Runde 2, 2015 Facitliste

DDD Runde 2, 2015 Facitliste DDD Runde 2, 2015 Facitliste Søren Dahlgaard og Mathias Bæk Tejs Knudsen Opgaver og løsninger til 2. runde af DDD 2015. 1 4. 19. februar, 2015 linetest DK v1.0 Line Test Sigurd er begyndt i gymnasiet og

Læs mere

Hashing og hashtabeller

Hashing og hashtabeller Datastrukturer & Algoritmer, Datalogi C Forelæsning 16/11-2004 Hashing og hashtabeller Teknik til at repræsentere mængder Konstant tid for finde og indsætte men ingen sortering af elementerne Specielt

Læs mere

Lærevejledning. - en introduktion til maskinarkitektur. faraz@butt.dk Faraz Butt mads@danquah.dk Mads Danquah doktor@dyregod.dk Ulf Holm Nielsen

Lærevejledning. - en introduktion til maskinarkitektur. faraz@butt.dk Faraz Butt mads@danquah.dk Mads Danquah doktor@dyregod.dk Ulf Holm Nielsen Lærevejledning - en introduktion til maskinarkitektur faraz@butt.dk Faraz Butt mads@danquah.dk Mads Danquah doktor@dyregod.dk Ulf Holm Nielsen Roskilde Universitetscenter Naturvidenskabelig Basisuddannelse

Læs mere

Svingningsrapport. Projektopgave 2, 41035 Dynamik og Svingninger Danmarks Tekniske Universitet Jakob Wulff Andersen, s112985

Svingningsrapport. Projektopgave 2, 41035 Dynamik og Svingninger Danmarks Tekniske Universitet Jakob Wulff Andersen, s112985 Projektopgave 2, 41035 Dynamik og Svingninger Danmarks Tekniske Universitet Jakob Wulff Andersen, s112985 Opgaverne er udregnet i samarbejde med Thomas Salling, s110579 og Mikkel Seibæk, s112987. 11/12-2012

Læs mere

Mathcad Survival Guide

Mathcad Survival Guide Mathcad Survival Guide Mathcad er en blanding mellem et tekstbehandlingsprogram (Word), et regneark (Ecel) og en grafisk CAS-lommeregner. Programmet er velegnet til matematikopgaver, fysikrapporter og

Læs mere

Pilen ved træets rod. Hans Hüttel

Pilen ved træets rod. Hans Hüttel Pilen ved træets rod Hans Hüttel Foråret 2004 2 Forord Endnu et år er gået, og endnu en ny udgave af Pilen ved træets rod ser dagens lys. Dette er 2004-udgaven af bogen, der er blevet til i forbindelse

Læs mere

BOSK F2012, 1. del: Prædikatslogik

BOSK F2012, 1. del: Prædikatslogik ε > 0. δ > 0. x. x a < δ f (x) L < ε February 8, 2012 Prædikater Vi skal lære om prædikatslogik lad os starte med prædikater. Et prædikat er et orakel der svarer ja eller nej. Eller mere præcist: Prædikater

Læs mere

Skriftlig eksamen, Programmer som Data Onsdag 5. januar 2011

Skriftlig eksamen, Programmer som Data Onsdag 5. januar 2011 Skriftlig eksamen, Programmer som Data Onsdag 5. januar 2011 Version 1.1 af 2011-01-28 Dette eksamenssæt har 7 sider. Tjek med det samme at du har alle siderne. Eksamens varighed er 4 timer. Der er fire

Læs mere

Daniel Kaasing 2012.3 Roskilde Tekniske Gymnasium 13-05-2015. Programmeringsjournal. Lavet af Daniel Kaasing. Lærer: Karl G Bjarnason

Daniel Kaasing 2012.3 Roskilde Tekniske Gymnasium 13-05-2015. Programmeringsjournal. Lavet af Daniel Kaasing. Lærer: Karl G Bjarnason Programmeringsjournal Lavet af Daniel Kaasing Lærer: Karl G Bjarnason 1 "Jeg bekræfter herved med min underskrift, at opgavebesvarelsen er udarbejdet af mig. Jeg har ikke anvendt tidligere bedømt arbejde

Læs mere