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 ( der stiller regnekraft til rådighed for andre projekter, som fx SETI@home ( der analysere radiobølger modtaget fra rummet. 5 Fx GIMPS-projektet ( der udnytter alle forbundne processorer til at nde stadig større primtal. 6 Fx Folding@Home ( 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 Rascal (v. 2)

Sproget Rascal (v. 2) Sproget Rascal (v. 2) Til brug i K1 på kurset Oversættere Opdateret 29/11 2004 Abstract Rascal er et simpelt Pascal-lignende imperativt sprog. Dette dokument beskriver uformelt Rascals syntaks og semantik

Læs mere

Sproget Limba. Til brug i G1 og K1. Dat1E 2003

Sproget Limba. Til brug i G1 og K1. Dat1E 2003 Sproget Limba Til brug i G1 og K1 Dat1E 2003 Abstract Limba er et simpelt imperativt sprog med hoballokerede tupler. Dette dokument beskriver uformelt Limbas syntaks og semantik samt en fortolker for Limba,

Læs mere

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

1 Opsumering fra tidligere. 2 Dagsorden 3 BIMS. 4 Programtilstande. Statements/kommandoer (Stm) i bims. 3.1 Abstrakt syntaks for bims

1 Opsumering fra tidligere. 2 Dagsorden 3 BIMS. 4 Programtilstande. Statements/kommandoer (Stm) i bims. 3.1 Abstrakt syntaks for bims 1 Opsumering fra tidligere Hvis A er kontekstfrit, S er der et p > 0 s Alle s A hvor s p kan splittes op som s = uvxyz så argument 1-3 holder A er ikke kontekstfrit, hvis for ethvert bud på p kan findes

Læs mere

Python programmering. Per Tøfting. MacFest

Python programmering. Per Tøfting. MacFest Python programmering MacFest 2005 Per Tøfting http://pertoefting.dk/macfest/ Indhold Måder at afvikle Python program på Variabler Data typer Tal Sekvenser Strenge Tupler Lister Dictionaries Kontrolstrukturer

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

Rettelser til Pilen ved træets rod

Rettelser til Pilen ved træets rod Rettelser til Pilen ved træets rod Hans Hüttel Pr. 12. juni 2003 Nedenstående rettelser er indsamlet af mig selv, Peter Poulsen, Martin Maach og ikke mindst Lars Schunk i løbet af foråret 2003. Simple

Læs mere

OBS! Prøveeksamen med syntaks på tirsdag! Kursusgang 8

OBS! Prøveeksamen med syntaks på tirsdag! Kursusgang 8 Kursusgang 8 OBS! Prøveeksamen med syntaks på tirsdag! Kursusgang 8 Matematik Arkæologi Eksempel Semantik Bims (Basic Imperative Statements / Begrænset Imperativt Sprog) Abstrakt syntaks Transitionssystemer

Læs mere

Studiepraktik. Thomas Bøgholm Mikkel Hansen Jacob Elefsen

Studiepraktik. Thomas Bøgholm Mikkel Hansen Jacob Elefsen Studiepraktik Thomas Bøgholm boegholm@cs.aau.dk Mikkel Hansen mhan@cs.aau.dk Jacob Elefsen jelefs12@student.aau.dk 1 Studiepraktik -- program Program onsdag 10.00 10.15 Registrering af fremmøde og gennemgang

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

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

Skriftlig Eksamen Algoritmer og Datastrukturer (dads) Skriftlig Eksamen Algoritmer og Datastrukturer (dads) Datalogisk Institut Aarhus Universitet Mandag den 27. maj 2002, kl. 9.00 13.00 Opgave 1 (25%) Denne opgave handler om multiplikation af positive heltal.

Læs mere

Programmering for begyndere Lektion 2. Opsamling mm

Programmering for begyndere Lektion 2. Opsamling mm Lektion 2 Opsamling mm God tone Der er indlagt spørge sessioner Lektion 2 - Agenda Programmering for Lidt ændringer til teknikken, herunder hvordan du genser en lektion Lidt generelle tilbagemeldinger

Læs mere

Lær Python dag 1 - modul 1

Lær Python dag 1 - modul 1 Lær Python dag 1 - modul 1 Introduktion, basis python Steffen Berg Klenow Jonas Bamse Andersen Syddansk Universitet Indhold 1. Velkommen 2. Programmering i python 3. Typer, variabler og udtryk 1 Velkommen

Læs mere

26 Programbeviser I. Noter. PS1 -- Programbeviser I. Bevis kontra 'check af assertions' i Eiffel. Betingelser og bevisregler.

26 Programbeviser I. Noter. PS1 -- Programbeviser I. Bevis kontra 'check af assertions' i Eiffel. Betingelser og bevisregler. 26 Programbeviser I. Bevis kontra 'check af assertions' i Eiffel. Betingelser og bevisregler. Hvad er programverifikation? Bevisregel for 'tom kommando'. Bevisregel for assignment. Bevisregler for selektive

Læs mere

Noter til C# Programmering Selektion

Noter til C# Programmering Selektion Noter til C# Programmering Selektion Sætninger Alle sætninger i C# slutter med et semikolon. En sætning kontrollerer sekvensen i programafviklingen, evaluerer et udtryk eller gør ingenting Blanktegn Mellemrum,

Læs mere

Introduktion til funktioner, moduler og scopes i Python

Introduktion til funktioner, moduler og scopes i Python Denne guide er oprindeligt udgivet på Eksperten.dk Introduktion til funktioner, moduler og scopes i Python Denne artikel er fortsættelsen af "I gang med Python", som blevet publiceret her på sitet for

Læs mere

LØKKER METODER C S HISTORIE. Grundlæggende programmering Lektion 4

LØKKER METODER C S HISTORIE. Grundlæggende programmering Lektion 4 LØKKER METODER C S HISTORIE Grundlæggende programmering Lektion 4 1 LEKTIER UML struktur diagrammer om biler 2 OPERATORER Syntaks til at udføre forskellige beregninger og handlinger Booleans og hvorfor

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

16. december. Resume sidste gang

16. december. Resume sidste gang 16. december Resume sidste gang Abstrakt problem, konkret instans, afgørlighedsproblem Effektiv kodning (pol. relateret til binær kodning) Sprog L : mængden af instanser for et afgørlighedsproblem hvor

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

Programmering og Problemløsning, 2017

Programmering og Problemløsning, 2017 Programmering og Problemløsning, 2017 Typer og Mønstergenkendelse Martin Elsman Datalogisk Institut Københavns Universitet DIKU 23. Oktober, 2017 Martin Elsman (DIKU) Programmering og Problemløsning, 2017

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

Programmering i C. Lektion september 2009

Programmering i C. Lektion september 2009 Programmering i C Lektion 1 8. september 2009 Målgruppe Motivation Indhold Form Materiale 2 / 47 Kursusintroduktion 1 Målgruppe 2 Motivation 3 Indhold 4 Form 5 Materiale Målgruppe Motivation Indhold Form

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

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

Noter til C# Programmering Iteration

Noter til C# Programmering Iteration Noter til C# Programmering Iteration Programflow Programmer udfører det meste af deres arbejde vha. forgrening og løkker. Løkker Mange programmeringsproblemer kan løses ved at gentage en handling på de

Læs mere

Forelæsning Uge 2 Mandag

Forelæsning Uge 2 Mandag Forelæsning Uge 2 Mandag Sætninger Simple sætninger (assignment, interne og eksterne metodekald) Sammensatte sætninger (blok, selektion, gentagelse) Udtryk og operatorer Java syntax og style guide Afleveringsopgave:

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2016 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 29. februar, 2016 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Syntaks og syntaksgenkendelse, særligt regulære udtryk og tilstandsmaskiner og lidt om anvendelser i bioinformatik

Syntaks og syntaksgenkendelse, særligt regulære udtryk og tilstandsmaskiner og lidt om anvendelser i bioinformatik Datalogi C, RUC Forelæsning 22. november 2004 Henning Christiansen Syntaks og syntaksgenkendelse, særligt regulære udtryk og tilstandsmaskiner og lidt om anvendelser i bioinformatik Dagens program Hvad

Læs mere

Kapitel 4 Løkker i C#

Kapitel 4 Løkker i C# Kapitel 4 Løkker i C# Løkker en vigtig del af alle programmeringssprog, og C# er ikke andeles. En løkke er en måde at udføre en del af koden gentagne gange. Ideen er at du fortsætter med at udføre en opgave

Læs mere

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

Skriftlig Eksamen Algoritmer og Datastrukturer (dads) Skriftlig Eksamen Algoritmer og Datastrukturer (dads) Datalogisk Institut Aarhus Universitet Tirsdag den 27. maj 2003, kl. 9.00 3.00 Opgave (25%) For konstanten π = 3.4592... gælder identiteten π 2 6 =

Læs mere

DM507 Algoritmer og datastrukturer

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

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

It og informationssøgning Forelæsning september 2006 Nils Andersen. Underprogrammer og betingelser. Standardfunktioner, typeomsætning

It og informationssøgning Forelæsning september 2006 Nils Andersen. Underprogrammer og betingelser. Standardfunktioner, typeomsætning It og informationssøgning Forelæsning 2 13. september 2006 Nils Andersen Underprogrammer og betingelser Standardfunktioner, typeomsætning Funktionskald Moduler, lange navne Brugerdefinerede funktioner

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

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2019 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 27. februar, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

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

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507)

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507) Skriftlig Eksamen Algoritmer og Datastrukturer (DM507) Institut for Matematik og Datalogi Syddansk Universitet, Odense Onsdag den 0. juni 009, kl. 9 Alle sædvanlige hjælpemidler (lærebøger, notater, osv.)

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

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

Forelæsning Uge 2 Mandag

Forelæsning Uge 2 Mandag Forelæsning Uge 2 Mandag Sætninger Simple sætninger (assignment, interne og eksterne metodekald) Sammensatte sætninger (blok, selektion, gentagelse) Udtryk og operatorer Java syntax og style guide Afleveringsopgaver

Læs mere

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Torsdag Forelæsning Uge 2 Torsdag Java syntax og style guide Sætninger Simple sætninger (assignment, interne og eksterne metodekald) Sammensatte sætninger (blok, selektion, gentagelse) Udtryk og operatorer Brug

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

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

Algoritmer og invarianter

Algoritmer og invarianter Algoritmer og invarianter Iterative algoritmer Algoritmen er overordnet set een eller flere while eller for-løkker. Iterative algoritmer Algoritmen er overordnet set een eller flere while eller for-løkker.

Læs mere

Forelæsning Uge 2 Mandag

Forelæsning Uge 2 Mandag Forelæsning Uge 2 Mandag Sætninger Simple sætninger (assignment, interne og eksterne metodekald) Sammensatte sætninger (blok, selektion, gentagelse) Udtryk og operatorer Java syntax og style guide Afleveringsopgaver

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

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

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

Programmering i C. Lektion november 2008

Programmering i C. Lektion november 2008 Programmering i C Lektion 3 18. november 2008 Kontrolstrukturer Udvælgelse Gentagelse Eksempler Fra sidst 1 Kontrolstrukturer 2 Udvælgelse 3 Gentagelse 4 Eksempler Kontrolstrukturer Udvælgelse Gentagelse

Læs mere

Programmering i C. Lektion september 2009

Programmering i C. Lektion september 2009 Programmering i C Lektion 2 14. september 2009 Kontrolstrukturer Udvælgelse Gentagelse Eksempler Kommentarer Format - scanf og printf 2 / 27 Fra sidst 1 Kontrolstrukturer 2 Udvælgelse 3 Gentagelse 4 Eksempler

Læs mere

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer Skriftlig Eksamen DM507 Algoritmer og Datastrukturer Institut for Matematik og Datalogi Syddansk Universitet, Odense Mandag den 6. juni 2016, kl. 15:00 19:00 Besvarelsen skal afleveres elektronisk. Se

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

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi DATALOGISK INSTITUT, AARHUS UNIVERSITET Det Naturvidenskabelige Fakultet EKSAMEN Grundkurser i Datalogi Antal sider i opgavesættet (incl. forsiden): 12 (tolv) Eksamensdag: Tirsdag den 20. marts 2012, kl.

Læs mere

DM507 Algoritmer og datastrukturer

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

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

Programmering i C. Lektion oktober 2008

Programmering i C. Lektion oktober 2008 Programmering i C Lektion 2 20 oktober 2008 Historie Processen At kompilere 2 / 23 Fra sidst 1 Historie 2 Processen 3 At kompilere Historie Processen At kompilere 3 / 23 ALGOL 60 1963 CPL 1966 BCPL 1969

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

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

Forelæsning Uge 2 Mandag

Forelæsning Uge 2 Mandag Forelæsning Uge 2 Mandag Sætninger Simple sætninger (assignment, interne og eksterne metodekald) Sammensatte sætninger (blok, selektion, gentagelse) Udtryk og operatorer Java syntax og style guide Afleveringsopgave:

Læs mere

16. marts P NP. Essentielle spørgsmål: NP P? Et problem Q kaldes NP -fuldstændigt 1 Q NP 2 R NP : R pol Q. Resume sidste gang

16. marts P NP. Essentielle spørgsmål: NP P? Et problem Q kaldes NP -fuldstændigt 1 Q NP 2 R NP : R pol Q. Resume sidste gang 16. marts Resume sidste gang Abstrakt problem konkret instans afgørlighedsproblem Effektiv kodning (pol. relateret til binær kodning) Sprog L : mængden af instanser for et afgørlighedsproblem hvor svaret

Læs mere

METODER ARV KLASSER. Grundlæggende programmering Lektion 5

METODER ARV KLASSER. Grundlæggende programmering Lektion 5 METODER KLASSER ARV Grundlæggende programmering Lektion 5 1 METODER Sekvenser af kode om samme emne 2 REPETITION Række af statements der udfører en handling Mindst én metode der hedder main Forskellen

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

Undersøgende aktivitet om primtal. Af Petur Birgir Petersen

Undersøgende aktivitet om primtal. Af Petur Birgir Petersen Undersøgende aktivitet om primtal. Af Petur Birgir Petersen Definition: Et primtal er et naturligt tal større end 1, som kun 1 og tallet selv går op i. Eksempel 1: Tallet 1 ikke et primtal fordi det ikke

Læs mere

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

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4 DM502 Forelæsning 4 Flere kontrolstrukturer for-løkke switch-case Metoder Indhold Arrays og sortering af arrays String-funktioner for-løkke Ofte har man brug for at udføre det samme kode, for en sekvens

Læs mere

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi INSTITUT FOR DATALOGI, AARHUS UNIVERSITET Det Naturvidenskabelige Fakultet EKSAMEN Grundkurser i Datalogi Antal sider i opgavesættet (incl. forsiden): 12 (tolv) Eksamensdag: Fredag den 16. august 2013,

Læs mere

Boolsk algebra For IT studerende

Boolsk algebra For IT studerende Boolsk algebra For IT studerende Henrik Kressner Indholdsfortegnelse 1 Indledning...2 2 Logiske kredsløb...3 Eksempel:...3 Operatorer...4 NOT operatoren...4 AND operatoren...5 OR operatoren...6 XOR operatoren...7

Læs mere

Listen over reserverede ord er meget lang, men de væsentligste vil jeg beskrive her i denne artikel:

Listen over reserverede ord er meget lang, men de væsentligste vil jeg beskrive her i denne artikel: Denne guide er oprindeligt udgivet på Eksperten.dk SQL og ASP En artikel omkring simpel SQL og hvordan disse opbygges, udformes og udføres, sådan at man kan få et brugbart resultat i ASP. Dette ligefra

Læs mere

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi DATALOGISK INSTITUT, AARHUS UNIVERSITET Det Naturvidenskabelige Fakultet EKSAMEN Grundkurser i Datalogi Antal sider i opgavesættet (incl. forsiden): 12 (tolv) Eksamensdag: Fredag den 13. august 2010, kl.

Læs mere

Introduktion. Philip Bille

Introduktion. Philip Bille Introduktion Philip Bille Plan Algoritmer og datastrukturer Toppunkter Algoritme 1 Algoritme 2 Algoritme 3 Algoritmer og datastrukturer Hvad er det? Algoritmisk problem: præcist defineret relation mellem

Læs mere

Introduktion til prædikatlogik

Introduktion til prædikatlogik Introduktion til prædikatlogik Torben Braüner Datalogisk Afdeling Roskilde Universitetscenter 1 Plan Symbolisering af sætninger Syntaks Semantik 2 Udsagnslogik Sætningen er den mindste syntaktiske enhed

Læs mere

22 Hobe. Noter. PS1 -- Hobe. Binære hobe. Minimum-hob og maximum-hob. Den abstrakte datatype minimum-hob. Opbygning af hobe. Operationen siv-ned.

22 Hobe. Noter. PS1 -- Hobe. Binære hobe. Minimum-hob og maximum-hob. Den abstrakte datatype minimum-hob. Opbygning af hobe. Operationen siv-ned. 22 Hobe. Binære hobe. Minimum-hob og maximum-hob. Den abstrakte datatype minimum-hob. Opbygning af hobe. Operationen siv-ned. Indsættelse i hobe. Sletning af minimalt element i hobe. Repræsentation. 327

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

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet Eksamen 02105, F14 side 1 af 14 Danmarks Tekniske Universitet Skriftlig prøve, den 22. maj 2014. Kursusnavn: Algoritmer og datastrukturer 1 Kursusnummer: 02105 Hjælpemidler: Skriftlige hjælpemidler. Det

Læs mere

Moduler i Standard ML

Moduler i Standard ML Moduler i Standard ML Hans Hüttel December 2001 I løbet af datalogikurset har vi haft glæde af en hel række forskellige standardmoduler som f.eks. Math, Int, Real og String. Disse moduler kan, har vi set,

Læs mere

Sortering af information er en fundamental og central opgave.

Sortering af information er en fundamental og central opgave. Sortering Sortering Input: Output: Eksempel: n tal De n tal i sorteret orden 6, 2, 9, 4, 5, 1, 4, 3 1, 2, 3, 4, 4, 5, 9 Mange opgaver er hurtigere i sorteret information (tænk på ordbøger, telefonbøger,

Læs mere

DANMARKS TEKNISKE UNIVERSITET

DANMARKS TEKNISKE UNIVERSITET DANMARKS TEKNISKE UNIVERSITET Skriftlig prøve, 14. december 2018, 4 timer Side 1 af 18 Kursus navn: 02101 Indledende Programmering Kursus : 02101 Tilladte hjælpemidler: Ikke-digitale skriftlige hjælpemidler

Læs mere

Skriftlig eksamen i Datalogi

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

Læs mere

Hjælp! Der er brok med mit ML-program

Hjælp! Der er brok med mit ML-program Hjælp! Der er brok med mit ML-program Hans Hüttel December 2001 Indhold 1 Formålet med denne note 1 2 Der er ere slags fejl 2 2.1 Brugerfejl............................. 2 2.2 Syntaksfejl.............................

Læs mere

Dat 2/F6S: Syntaks og semantik 2005 Centrale emner og eksamenspensum

Dat 2/F6S: Syntaks og semantik 2005 Centrale emner og eksamenspensum Dat 2/F6S: Syntaks og semantik 2005 Centrale emner og eksamenspensum Hans Hüttel 14. juni 2005 Indhold 1 Centrale emner 1 2 Fuldt pensum 2 3 Reduceret pensum 3 3.1 Hvad er fjernet her?........................

Læs mere

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: (logn) 7 n 1/2 2 n /n 3 2logn n 2 /logn

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: (logn) 7 n 1/2 2 n /n 3 2logn n 2 /logn Eksamen august 0 Algoritmer og Datastrukturer (00-ordning) Side af sider Opgave (%) n er Ω(n)? n er O( n )? n er O(8logn)? + er O(n)? n er O(n / )? Opgave (%) Opskriv følgende funktioner efter stigende

Læs mere

Sortering. Eksempel: De n tal i sorteret orden

Sortering. Eksempel: De n tal i sorteret orden Sortering 1 / 32 Sortering Input: Output: Eksempel: n tal De n tal i sorteret orden 6, 2, 9, 4, 5, 1, 4, 3 1, 2, 3, 4, 4, 5, 9 2 / 32 Sortering Input: Output: Eksempel: n tal De n tal i sorteret orden

Læs mere

Bevisteknikker. Bevisteknikker (relevant både ved design og verifikation) Matematisk induktion. Matematisk induktion uformel beskrivelse

Bevisteknikker. Bevisteknikker (relevant både ved design og verifikation) Matematisk induktion. Matematisk induktion uformel beskrivelse Bevisteknikker Bevisteknikker (relevant både ved design og verifikation) Bevisførelse ved modstrid (indirekte bevis) Antag, at det givne teorem er falsk Konkluder, at dette vil føre til en modstrid Teorem:

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

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

Skriftlig eksamen, Programmer som Data Onsdag 6. januar Spørgsmål 1 (20 %): Regulære udtryk og automater

Skriftlig eksamen, Programmer som Data Onsdag 6. januar Spørgsmål 1 (20 %): Regulære udtryk og automater Skriftlig eksamen, Programmer som Data Onsdag 6. januar 2010 Dette eksamenssæt har 5 sider. Tjek med det samme at du har alle siderne. Eksamens varighed er 4 timer. Der er fire spørgmål. For at få fuldt

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

Udsagnslogik. Anker Mørk Thomsen. 6. december 2013

Udsagnslogik. Anker Mørk Thomsen. 6. december 2013 Udsagnslogik Anker Mørk Thomsen 6. december 2013 Logiske Udsagn Sætningstyper Spørgende (interrogative): Hvor længe bliver du i byen? Befalinger (imperative): Gå tilvenstre efter næste sving? Ønsker (optative):

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

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

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

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

DM13-1. Obligatorisk opgave E.05. Jacob Aae Mikkelsen

DM13-1. Obligatorisk opgave E.05. Jacob Aae Mikkelsen DM13-1. Obligatorisk opgave E.05 Jacob Aae Mikkelsen - 191076 26. september 2005 Indhold Analyse af problemstillingen........................ 2 Spørgsmål 1................................. 3 Spørgsmål

Læs mere

Sortering. Eksempel: De n tal i sorteret orden

Sortering. Eksempel: De n tal i sorteret orden Sortering 1 / 34 Sortering Input: Output: Eksempel: n tal De n tal i sorteret orden 6, 2, 9, 4, 5, 1, 4, 3 1, 2, 3, 4, 4, 5, 9 2 / 34 Sortering Input: Output: Eksempel: n tal De n tal i sorteret orden

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

Oversættere Skriftlig eksamen onsdag d. 24. januar 2007

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

Læs mere

Skriftlig Eksamen Algoritmer og Sandsynlighed (DM538)

Skriftlig Eksamen Algoritmer og Sandsynlighed (DM538) Skriftlig Eksamen Algoritmer og Sandsynlighed (DM538) Institut for Matematik og Datalogi Syddansk Universitet, Odense Fredag den 25. januar 2013 kl. 1013 Alle hjælpemidler (computer, lærebøger, notater,

Læs mere

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: n 2 n (log n) 2. 3 n /n 2 n + (log n) 4

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: n 2 n (log n) 2. 3 n /n 2 n + (log n) 4 Eksamen. kvarter 00 Side 1 af sider Opgave 1 ( %) Ja Nej n log n er O(n / )? n 1/ er O(log n)? n + n er O(n )? n( n + log n) er O(n / )? n er Ω(n )? Opgave ( %) Opskriv følgende funktioner efter stigende

Læs mere

Forelæsning Uge 4 Torsdag

Forelæsning Uge 4 Torsdag Forelæsning Uge 4 Torsdag Algoritmeskabeloner findone, findall, findnoof, findsumof (i mandags) findbest Levetid for variabler og parametre Virkefeltsregler Hvor kan man bruge de forskellige variabler?

Læs mere

Lektion 4. Grundlæggende programmering i VR

Lektion 4. Grundlæggende programmering i VR Lektion 4 Grundlæggende programmering i VR Plan for i dag Simpelt FPS C# og objekt orienteret programmering Metoder Loops / løkker Random Vi koder 3D uden modeller Simpelt FPS Træk kuglen fra hierarkiet

Læs mere