Registerallokator til Dat1E. Jens Jakob Jensen, Nils Daniel Brixen og Henrik Stuart

Størrelse: px
Starte visningen fra side:

Download "Registerallokator til Dat1E. Jens Jakob Jensen, Nils Daniel Brixen og Henrik Stuart"

Transkript

1 Registerallokator til Dat1E Jens Jakob Jensen, Nils Daniel Brixen og Henrik Stuart 23. maj 2002

2 Indholdsfortegnelse 1 Oversigt over opgaven Formål Læsevejledng Sammenfatng Analyse af emneområdet Emnekontekst Defition af problemet Overordnet prcip Virtuelle registre Interferens En dskrænkng Optimalitet Formulerg som graffarvng Graffarvng Interferensgrafen Registerallokerg som graffarvng Grundlægge metode Renumberg Build Coalesce Spill Costs Simplify Spill Code Select Optimistisk farvng Simplify Select Resultat Forbedret coalescg Konservativ coalescg Iterativ coalescg Resultater Spill-omkostnger Defition af spill cost Chait s metode Bedst af tre Ændret spill cost og specialtilfælde

3 INDHOLDSFORTEGNELSE Spill-kode Alternative metoder Liveness-analyse Andre teknikker Prioritetsbaseret farvng Graffusion Implementationen Mål for implementationen Indskrænkng af struktionssæt MIPS Intel IA Introduktion af pseudo-struktioner Repræsentation af arkitektur og struktionssæt Grænseflade til allokatoren Grænseflade Mere generel grænseflade Oversigt over det implementerede DList TDListFn StrgSet Worklists RegisterAllocator Om implementationen Ændrger til Appel s pseudo-kode Prioriterg af MOVE-struktioner Liveness-analyse Beregng af spill cost Implementation af spill Automatisk callee saves-bevarg Debuggg Brugervejledng Anvelse Implementation af kald-konventioner Defition af en arkitektur Afprøvng Metode til afprøvng Lovlig registerallokerg Mål for afprøvng Praktiske begrænsnger Afprøvng med MIPS Kriterier for afprøvng Beskrivelse af uddata Eksempel fra Appel & George ([App99]) Eksempel fra Torben Mogensen ([Mog00]) Afprøvng med Intel Sammenligng med den eksistere Sammenligng af allokerg og coalescg Sammenligng af kørselsresultater

4 INDHOLDSFORTEGNELSE 3 5 Konklusion 74 6 Litteratur 76 A Kildetekst 78 A.1 DList.sig A.2 DList.sml A.3 TDListFn.sml A.4 StrgSet.sig A.5 StrgSet.sml A.6 Worklists.sig A.7 Worklists.sml A.8 RegisterAllocator.sml A.9 Architecture.sig A.10 ArchAppel3.sml A.11 ArchAppel4.sml A.12 ArchMIPS.sml A.13 ArchIntel.sml A.14 RegAllocTest.sml

5 Kapitel 1 Oversigt over opgaven 1.1 Formål Registerallokatoren der benyttes til 1.-delskurset Datalogi 1E er begrænset ved kun at understøtte en delmængde af MIPS-struktionssættet, og ved ikke at understøtte spill. Desuden er den relativt ufleksibel med hensyn til angivelse af caller-/callee-savesregistre. Målet med denne opgave er at udvikle en ny registerallokator, som kan erstatte den eksistere, til brug på kurset Datalogi 1E. Vi vil derfor lægge vægt på en simpel grænseflade til allokatoren, samt fyldestgøre dokumentation af den praktiske brug. Desuden er det vigtigt at registerallokergen er korrekt, men ikke nødvigvis optimal. På Datalogi 1E bruges sproget Standard ML til at implementere en oversætter, og da registerallokatoren skal fungere som en del heraf, er det er krav, at implementationen foretages i Standard ML mere specifikt skal den fungere ved brug af Moscow MLoversætteren Læsevejledng For at kunne konstruere en registerallokator, har vi undersøgt en del af teorien bag registerallokerg. Det giver sig udslag i, at opgaven består af to dele: en teoretisk del, og en praktisk del. Den teoretiske del består af en undersøgelse af grene af teorien bag registerallokerg. Denne undersøgelse danner grundlaget for den anden del, som omhandler den konkrete implementerg af en registerallokator. Kapitel 2 deholder den teoretiske del. Det består af en præciserg af emneområdet og problemet for opgaven (afsnit 2.1 og 2.2). Herefter beskrives en klassisk tilgang til problemet i afsnit 2.3 og 2.4. Afsnit 2.5 til 2.8 omhandler nogle forbedrger til den grundlægge metode. Afsnit 2.10 opsummerer kort nogle andre metoder at gribe registerallokergsproblemet an på. Vi gør os ikke forhåbnger om at dække hele registerallokergsområdet der er en ganske stor mængde litteratur om området. Vi har forsøgt at vælge de dele, som lader til at have gennemslagskraft, det vil sige tages med i efterfølge forskng. 1 Se sestoft/mosml.html.

6 1.3 Sammenfatng 5 I den teoretiske del af opgaven vil vi udelukke koncentrere os om at beskrive problemstillger og mulige løsnger. Vi vil ikke i den del tage overvejelser omkrg implementation med - således vil kapitel 2 deholde teori for nogle teknikker, som vi ikke vil tage med i vores implementerg. Kapitel 3 beskriver den konkrete implementation vi har foretaget. Der begyndes i afsnit 3.1 og 3.2 med at præcisere, hvilke dele af den beskrevne teori vi vil tage med i vores registerallokator, og hvilke årsager vi har til at vælge de dele ud, som vi har valgt. I afsnit 3.3 til 3.6 behandles forskellige dele af registerallokatorimplementationen, og afsnit 3.7 deholder en praktisk vejledng i brug af implementationen - herunder hvordan forskellige kaldkonventioner kan realiseres. Afprøvng af en registerallokator kan gribes an på mange forskellige måder. I afsnit 4.1 diskuteres nogle af disse, og den strategi som vi har valgt til at afprøve implementationen præsenteres. Dette er første del af kapitel 4 som omhandler afprøvngen af den implementerede registerallokator. Resten af dette kapitel beskriver hvilke afprøvnger, der er foretaget, og resultaterne af dem. Til sidst i opgaven, kapitel 5, er der placeret en konklusion. Da emneområdet for opgaven er behandlet i kurset Datalogi 1E, vil vi i kapitel 2 forudsætte, at læseren har et kskab til registerallokerg og oversætterteknik generelt svare til en person der har fulgt kurset Datalogi 1E. Dog er afsnit 3.7 rettet specielt mod personer der skal benytte registerallokatoren, det vil sige nogle der er i gang med at tage kurset Datalogi 1E. 1.3 Sammenfatng Der er implementeret en registerallokator ud fra beskrivelsen i [App99] som resulterer i lovlige registerallokererger i de afprøvede tilfælde. Sammenlignet med den eksistere registerallokator er der ikke den store forskel for programmer som ikke spiller, hvilket tyder på at den implementerede registerallokator foretager en rimelig allokerg og fjerner et rimeligt antal MOVE-struktioner. Der er tilstræbt en enkel grænseflade til registerallokatoren som samtidig er fleksibel med hensyn til valg af arkitektur og kaldkonvention. Det mener vi er lykkedes. Alt i alt mener vi at have udviklet et rimeligt alternativ til den eksistere registerallokator på Datalogi 1E, som desuden kan benyttes til videre undersøgelse af emnet registerallokerg.

7 Kapitel 2 Analyse af emneområdet 2.1 Emnekontekst Registerallokerg er en del af processen at oversætte fra et programmergssprog til maskkode. Som bekt er der mange former for lager i en maske. Disse er, for eksempel, registre, CPU-cache, arbejdslager og diske. Af disse er det kun registrene, som oversætteren har fuld kontrol over - for eksempel kan oversætteren ikke kontrollere hvilke tg der er placeret i CPU ens cache. Da tilgangstiden til registrene er væsentlig lavere resten af lageret, er det ønskeligt at udnytte disse i videst mulig udstrækng. Vi vil i resten af opgaven bruge betegnelsen hukommelse om alle typer for lager, som ikke er registre. Hvis ambitionen med oversætteren blot er at få bevaret programmets semantik, kan man ignorere problemet med at udnytte registrene optimalt. Man kan så klare sig med et ganske lavt antal registre, og opbevare alt i hukommelsen; hver gang en værdi skal bruges, hentes den d i et register og skrives tilbage til hukommelsen efter en eventuel ændrg. Dette resulterer i et højt antal hukommelsestilgange for programmet, og disse antages at være væsentlig langsommere registertilgange. Hvis ambitionen derimod, er at oversættelse, for eksempel fra et højniveau-sprog til maskkode, skal resultere i kode der er (mdst) lige så god som håndprogrammeret maskkode, så er det en vigtig del af processen, at udnytte registrene godt. Det er registerallokatorens opgave at bestemme, hvad der skal placeres i de forskellige registre på forskellige tidspunkter. Opgaven går således ud på at udføre denne fordelg, så antallet af hukommelsestilgange for det resultere program mimeres. Oversættelse af et program foregår ofte i flere tr, hvor der bruges en mellemkode (se [App99] kapitel 7). På denne mellemkode udføres nogle forskellige optimerger, som for eksempel afhænger af rækkefølgen af struktionerne, og ikke af det konkrete format for struktionerne. Denne del af oversættelsen kalder vi optimerg. 2.2 Defition af problemet I dette afsnit vil vi præcisere hvad der forstås ved problemet registerallokerg.

8 2.2 Defition af problemet Overordnet prcip En metode som er helt fundamental for hvordan vi griber registerallokergen an på, er at lade optimergsfasen af oversættelsen tro, at der er et ubegrænset antal registre til rådighed. Når optimergsfasen er overstået, er det så op til registerallokatoren at sørge for, at der kun benyttes registre, som rent faktisk er til stede i masken. På denne måde bliver registerallokergen altså adskilt fra resten af oversættelsesprocessen Virtuelle registre I de dele af oversættelsen der ligger før registerallokergen dføres altså såkaldte virtuelle registre 1, som oversætteren kan benytte til at deholde variable i programmet, mellemresultater eller konstanter. Registerallokerg består så i at konstruere en afbildng fra virtuelle registre til maskregistre. På denne måde bliver hvert virtuelt register knyttet til et maskregister. Det er dog ikke ligegyldigt hvordan denne afbildng konstrueres. Hvis, for eksempel, en struktion skal læse to argumenter (antag at de henholdsvis har værdierne 3 og 5) og disse er placeret i to forskellige virtuelle registre i mellemkoden, bliver programmets semantik ikke bevaret, hvis de to virtuelle registre afbildes i samme maskregister - så vil struktionen enten få værdien 3 eller 5 på begge argumenter. I resten af opgaven vil vi bruge betegnelsen kildeprogrammet, om den sekvens af maskkode-struktioner som gives som ddata til registerallokatoren. Kildeprogrammet består altså af struktioner skrevet i et bestemt masksprog, blot med den forskel, at der antages et vilkårligt stort antal registre Interferens Ovenståe problematik med overlap i brug kan formaliseres som begrebet terferens (følge defition er den ultimative defition af terferens som dført af Chait et al. i [CAC + 81] side 55). To virtuelle registre terfererer, hvis der fdes et sted i kildeprogrammet, og en mulig eksekvergsrækkefølge af struktionerne, så der gælder at: 1. Begge virtuelle registre er deferede 2. Begge virtuelle registre bliver brugt 3. Der er forskellige værdier i de to virtuelle registre Registerallokergen skal altså foregå, så tet par af virtuelle registre der terfererer allokeres til samme maskregister. Hvis bare et af de tre punkter ovenfor ikke er opfyldt, kan de to virtuelle registre tildeles samme maskregister på det pågælde punkt, for den pågælde eksekverg af kildeprogrammet der er gen forskel på de to virtuelle registre. På den anden side, hvis alle tre er opfyldte, så er der forskel på de to virtuelle registre, og det vil være forkert at benytte samme maskregister på det punkt, i den pågælde eksekverg. Med ovenståe defition, er det ikke nemt at afgøre, om to virtuelle registre terfererer man skal for samtlige steder i kildeprogrammet og samtlige mulige eksekverger af dette undersøge de tre punkter. [CAC + 81] bemærker, at dette i det generelle tilfælde er uafgørligt. Derfor benyttes en anden defition af, om de virtuelle 1 For at undgå forvirrg med de fysiske registre, vil vi betegne disse som maskregistre, hvor det er nødvigt for at undgå misforståelser.

9 2.2 Defition af problemet 8 registre terfererer ved en struktion, som tilnærmer de tre punkter. Denne er vist i defition 2.1. Defition 2.1 Interferens To virtuelle registre u og v terfererer ved en struktion i, hvis 1. u og v begge er tilgængelige. Det vil sige, der fdes en vej fra en defition af u til i, og en vej fra en defition af v til i. 2. u er leve ved en defition af v (eller omvt). Hvor en variabel v er leve ved en struktion i, hvis der fdes en vej fra i til en struktion der læser v, og der ikke er nogen skrivng til v på vejen. Denne defition af terferens er naturligvis et konservativt estimat af den ultimative defition, så der vil være tilfælde, hvor virtuelle registre tildeles forskellige maskregistre, selvom de kunne have delt et maskregister. Fordelen er dog, at denne defition af terferens kan implementeres forholdsvis let. Dette gøres ved hjælp af liveness-analyse, der fder ud af hvilke virtuelle registre, der er leve på de forskellige punkter i kildeprogrammet. Dette er kort beskrevet i afsnit 2.9. Alt i alt er registerallokerg altså det problem, at konstruere en afbildng fra de virtuelle registre til maskregistrene, således at to virtuelle registre der terfererer på noget punkt i kildeprogrammet, ikke tildeles samme maskregister. Da der kan være et vilkårligt stort antal virtuelle registre, men kun et fast (lille) antal maskregistre, kan man naturligvis ikke forvente, at det altid kan lade sig gøre at konstruere afbildngen fra virtuelle- til maskregistre. Hvis dette er tilfældet, må man opbevare dholdet af et eller flere virtuelle registre i hukommelsen - man spiller registret. Den kode der skal sørge for at dlæse og skrive registret tilbage til hukommelsen kaldes spill kode. Briggs nævner i [Bri92], at prcippet med adskillelsen af registerallokerg fra resten af oversættelsesprocessen er en god idé, hvis der er tilstrækkeligt mange registre til rådighed, men ikke nødvigvis, hvis der er meget få registre. Vi vil dog (jvf. antagelsen i afsnit 2.1) behandle registerallokergen som beskrevet i afsnit Med dette valg, er der forskellige måder at foretage registerallokergen på: der kan for eksempel udføres registerallokerg for hvert udtryk (se for eksempel [App99] afsnit 11.4), for hver procedure eller for et helt program. Registerallokerg for en procedure af gangen kaldes global registerallokerg 2, og er den metode vi vil undersøge En dskrænkng Briggs bemærker i [Bri92] (afsnit 2.2.1), at et virtuelt register v kan bruges til flere forskellige opgaver i løbet af en procedure, og at det ikke er nødvigt at tildele det samme maskregister til alle disse forskellige opgaver. Dette benyttes til at defere begrebet live range, som altså er disjunkte sekvenser af struktioner høre til forskellige opgaver for et virtuelt register. Hvis man i løbet af oversættelsen dfører rigeligt af virtuelle registre - det vil sige et for hver opgave, kan man opnå, at der kun er én live range for hvert virtuelt register. På denne måde kan man nøjes med at behandle virtuelle registre under registerallokergen, og ikke live ranges. Dette kræver naturligvis også, at det oprdelige program er skrevet på denne måde - for eksempel, at man 2 Se for eksempel [Bri92] afsnit 1.2.

10 2.3 Formulerg som graffarvng 9 ikke bruger samme variabel i til to helt forskellige opgaver denfor samme procedure, men derimod deferer en variabel per opgave. Vi vil dskrænke os til at behandle virtuelle registre under registerallokergen, og ikke live ranges. Dette svarer til, at vi lader et virtuelt register og en live range være samme tg. Dette valg begrænser ikke mulighederne for resten af registerallokergen hvis processen ønskes udvidet med live ranges, kan der dføres et separat tr der identificerer live ranges i kildeproceduren (se for eksempel [CH90] afsnit 4.1) Optimalitet I den hidtidige beskrivelse har vi været lidt vage omkrg hvad der forstås ved at udnytte maskregistrene bedst muligt. Målet med registerallokergen er at foretage tildelgen af virtuelle registre til maskregistre, så kildeprogrammets semantik bevares (ved hjælp af terferens-begrebet), og så antallet af hukommelsestilgange i det resultere program mimeres. Hvis det på nogen måde er muligt at foretage allokergen, så der ikke spilles, så er en optimal registerallokerg en, der opnår dette. Hvis det ikke er muligt, er en optimal registerallokerg, en, der giver det laveste antal hukommelsestilgange som følge af spill kode. Registerallokergsproblemet kan reduceres til et graffarvngsproblem (se afsnit 2.3). Ifølge [CAC + 81] er graffarvngsproblemet N P-hårdt. Det vil sige registerallokergsproblemet er også N P-hårdt. Det betyder, at man ikke skal regne med at kunne konstruere en registerallokator der udfører optimal registerallokerg denfor overskuelig tid i samtlige tilfælde. 2.3 Formulerg som graffarvng Den klassiske metode til at behandle registerallokerg på, er ved at reducere det til et graffarvngsproblem. Det var Chait et al. der i i [CAC + 81] først beskrev en implementation af en registerallokator bygget ud fra formulergen af registerallokergsproblemet som et graffarvngsproblem Graffarvng Givet et graf G = (V, E) kan graffarvng betyde to forskellige tg: enten er det kanterne i E, der skal farves, eller også er det knuderne i V der skal farves (se for eksempel [Bry92]). I forbdelse med registerallokerg benyttes udtrykket graffarvng om knudefarvngsproblemet. En farvng af G er en tildelg af en farve til hver af knuderne i V, således, at tet par af knuder, der er forbundne af en kant i E, får samme farve. Det mdste antal farver som kan bruges til at farve G, kaldes det knude-kromatiske tal (eller blot det kromatiske tal) for G Interferensgrafen Antag nu, at vi skal udføre registerallokerg for en procedure P fra et givent kildeprogram 3. Vi skal (som beskrevet i afsnit 2.2.3) tildele hvert virtuelt register et maskregister. Vi kan modellere dette ved at konstruere en terferensgraf, hvor der er en knude for hvert virtuelle register i P, og hvor der er en kant imellem to knuder, hvis 3 Som nævnt i afsnit på side 8 vil vi undersøge global registerallokerg, så vi behandler hver procedure for sig.

11 2.3 Formulerg som graffarvng 10 de terfererer (se afsnit for en diskusion af begrebet terferens). Desuden er der én knude for hvert maskregister, og disse terfererer alle med handen - de udgør altså en k-klike, hvis der er k maskregistre. De knuder der svarer til maskregistre betegnes præfarvede knuder - at de terfererer med handen skyldes, at de naturligt nok ikke kan være i det samme maskregister. En fordel ved at medtage præfarvede knuder i terferensgrafen er, at tg der er specifikke for maskarkitekturen kan dkodes i grafen. For eksempel nævner [CAC + 81] at i maskkoden til IBM System/370 kan base-registret til en LOAD-struktion ikke placeres i registret R0. Denne type formation er yderst specifik for den givne arkitektur, men ved at lade alle virtuelle registre i kildeprogrammet der benyttes som base-registre til load-struktioner terferere med det præfarvede register R0, kan formationen puttes d i terferensgrafen, og behandles på samme måde som alle andre terferenser. Interferensgrafen kan på denne måde benyttes til at abstrahere mange detaljer omkrg arkitekturen Registerallokerg som graffarvng Hvis der er k maskregistre, og vi kan graffarve terferensgrafen med k farver, svarer det til en allokerg af registrene: hvert virtuelle register er tildelt et maskregister (det vil sige har fået en farve), og hvis to virtuelle registre på noget punkt i kildeproceduren terfererer (det vil sige de er kantforbundne i grafen), så sørges der for, at de tildeles forskellige maskregistre (det vil sige, får forskellig farve). En optimal løsng af graffarvngsproblemet er altså, at fde en farvng, der benytter et antal farver, der svarer til det kromatiske tal for grafen. Det vil sige, vi omformulerer registerallokergsproblemet til et problem, der mimerer antallet af brugte registre for kildeproceduren. Registerallokergsproblemet søgte (se afsnit 2.2.5), at mimere antallet af hukommelsetilgange i det resultere program. Dette er et svært problem, da mange faktorer spiller d på antallet af hukommelsetilgange i det køre program. Vi omformulerer altså problemet til det mere håndgribelige, at mimere antallet af brugte registre. Den normale formulerg af graffarvngsproblemet er: fd det kromatiske tal for grafen. At fde en farvng der benytter dette antal farver er det vi søger. Afgørlighedsproblemet: Kan grafen farves med k farver? er ifølge [CAC + 81] N P-fuldstændigt. Det vil sige, vi skal ikke forvente at kunne fde en farvng af terferensgrafen, der benytter det færrest mulige antal farver. Når det handler om registerallokerg er det altså ikke så teressant at fde det kromatiske tal for grafen der ønskes farvet. Hvis vi givet et antal maskregistre k kan fde en farvng, der højst benytter k farver, er vi tilfredse. Bemærk her, at da de præfarvede knuder udgør en klike i grafen, vil det kromatiske tal altid være mdst k (se for eksempel [Bry92] kap. 11). Det der er relevant er altså hvor få farver vi kan klare os med, hvis vi ser bort fra de præfarvede knuder. Dette svarer til, at vi ikke kan sikre at vi benytter det færrest mulige antal maskregistre, men stiller os tilfredse med at kunne have plads til alle virtuelle registre i maskregistre dog forsøger vi at mimere antallet af benyttede maskregistre. Sammenfattet kan formulergen som graffarvng beskrives som angivet i defition 2.2. Defition 2.2 Registerallokerg ved graffarvng Givet en procedure P fra et kildeprogram og antallet af registre på den pågælde maskarkitektur, k, ønsker vi at fde en k-farvng af terferens-grafen for P. I beskrivelsen af registerallokerg som graffarvng i defition 2.2, har vi ignore-

12 2.4 Grundlægge metode 11 ret den mulighed, at den konstruerede terferensgraf har et kromatisk tal, der er højere det antal registre der er til rådighed (k). Hvis det er tilfældet, kan der naturligvis ikke fdes en k-farvng af grafen, og man siger at grafen ikke er farvelig. Dette svarer til at med formationen fra terferensgrafen er der ikke plads til de virtuelle registre i maskregistrene. Der må derfor dsættes spill-kode (se side 8). Da graffarvngsproblemet er N P-fuldstændigt, kan man heller ikke afgøre om den givne terferensgraf er farvelig. Det vil sige, der vil være grafer der erklæres som ikke farvelige, selvom de rent faktisk er det 4. Da terferensgrafen kun er et konservativt estimat af, hvordan de virtuelle registre terfererer (se afsnit 2.2.3), vil der ligeledes være kildeprogrammer for hvilke terferensgrafen vil blive angivet som ikke farvelig, selvom der godt kunne have været plads til de virtuelle registre i maskregistrene. Der er altså tilfælde hvor der spilles, selvom det ikke er nødvigt. I forhold til semantikken af kildeprogrammet er dette ikke noget problem - vi skal alligevel kunne håndtere at registre skal spilles. 2.4 Grundlægge metode I de foregåe afsnit har vi kun beskæftiget os med formulergen af registerallokerg. Nu vil vi beskrive en metode til rent faktisk at foretage allokergen udfra den givne beskrivelse af problemet. Den grundlægge algoritme for registerallokerg ved graffarvng stammer fra forskerholdet fra IBM Watson Research Center 5. Denne allokator er også kt som Yorktown allokatoren, eftersom IBM s ovennævnte forskngsafdelg befder sig i Yorktown Heights, New York. I den oprdelige artikel af Chait et al. ([CAC + 81]) er behandlgen af spill ret ad hoc-præget. Dette kommenteres i slutngen af artiklen, hvor der foreslås en anden metode til at håndtere spill, som tager udgangspunkt i terferensgrafen. Denne idé blev taget op, og i [Cha82] præsenteres den modificerede algoritme. Det er denne algoritme vi vil beskrive i det følge. Et overblik over algoritmen er afbilledet i figur 2.1. Betegnelserne for de enkelte tr vil ikke kunne fdes direkte i [CAC + 81] og [Cha82], men er dført af Briggs i [Bri92] i hans tolkng af artiklerne af Chait. Vi vil i det følge gennemgå de enkelte tr. Figur 2.1 Yorktown allokergs-algoritmen 4 I [CAC + 81] er det vist, at enhver graf kan opstå som terferensgraf for en kildeprocedure, hvilket viser eksistensen af de nævnte grafer. 5 Det vil sige, Chait et al. som beskrevet i [Cha82]

13 2.4 Grundlægge metode Renumberg Dette første tr går ud på at ddele brugen af de virtuelle registre i live ranges 6, som er beskrevet i afsnit Det er disse live ranges som dsættes i terferensgrafen. Hvordan man fder de forskellige live ranges i kildeproceduren er blandt andet beskrevet i [Bri92]. Som nævnt i afsnit vil vi begrænse os til kun at have én live range for hvert virtuelt register. Derfor er dette tr ikke så relevant for vores gennemgang Build Denne fase konstruerer terferensgrafen, der skal farvelægges i de næste tr af algoritmen. Hvordan grafen i praksis opbygges er beskrevet i for eksempel [Cha82] eller [App99] Coalesce Det overordnede prcip om at behandle registerallokerg som en separat del af oversættelsen (se afsnit 2.2.1) betyder som nævnt, at de tidligere faser i oversættelsesprocessen kan benytte et ubegrænset antal virtuelle registre, og der kan (se for eksempel [GA96] afsnit 1) være ganske mange MOVE-struktioner mellem sådanne virtuelle registre. Hvis antagelsen om at der er virkårligt mange registre til rådighed under kodegenerergen ikke skal resultere i unødvigt mange register-kopierger, må det kræves, at registerallokatoren er opmærksom på at fjerne overflødige register-til-register MOVE-struktioner. Det vil sige, hvis de to virtuelle registre v i og v j for en MOVEstruktion ikke terfererer, kan de slås sammen til ét og samme virtuelle register, som vi navngiver v ij, hvorved MOVE-struktionen ikke længere er nødvig dette betegnes coalescg. Når to virtuelle registre slås sammen til et, skal terferensgrafen naturligvis ændres. Det mest iøjnefalde resultat er, at to af knuderne i grafen er slået sammen til én. Hvis denne nye knude sættes til at terferere med alle knuder, som terfererede med mdst en af de oprdelige knuder, fås et konservativ estimat for hvilke knuder der terfererer med den nye knude. Grunden til at formationen ikke nødvigvis er præcis er, at der er fjernet en MOVE-struktion, og under opbygnigen af terferensgrafen tilføjes terferenser for hver struktion i kildeproceduren. I [Bri92] er der i afsnit angivet et eksempel, hvor den nye terferensgraf ikke er præcis. En løsng er at genopbygge terferensgrafen hver gang der fjernes en MOVE-struktion. Dette er dog ret dyrt, så normalt gås hele koden for kildeproceduren igennem, og der fjernes eventuelt flere MOVE-struktioner, og undervejs opdateres terferensgrafen konservativt, som beskrevet ovenfor. Hvis der efter et sådant gennemløb er fjernet nogle MOVE-struktioner returnerer vi til Build-stadiet, og gentager processen. Ifølge [BCT94] vil denne Build-Coalesce cyklus i praksis kun blive gentaget nogle få gange Spill Costs Dette skridt er optret til at farve grafen. For hvert virtuelt register i terferensgrafen, udregnes en omkostngsværdi for hvor dyrt det vil være at spille denne. Denne værdi bruges til at vælge hvilke virtuelle registre der skal spilles, hvis det skulle være nødvigt (se afsnit 2.4.5). 6 I Chait s formulerg kaldes de blot names.

14 2.4 Grundlægge metode 13 Overordnet er målet naturligvis at vælge at spille det register, som giver den mdste stigng i antallet af udførte LOAD-STORE struktioner for det resultere program. Dette estimeres ved at tildele spill costs, og foretage grådige valg, hvis det besluttes at der skal spilles. Den mest naive måde at dsætte spill-kode for et virtuelt register v der skal spilles, er at dsætte en LOAD-struktion før hver struktion der læser v, og efter hver skrivng til v at dsætte en STORE-struktion der kopierer v til hukommelsen. På denne måde kan prisen for at spille et virtuelt register v sættes til antallet af gange der læses og skrives til v. Dette antal kan ikke afgøres præcist, men ved at antage at en struktion udføres 10 gange så ofte hvis den er placeret i en løkke, kan det approksimeres. I Yorktown allokatoren benyttes groft sagt ovenståe metode til dsættelse af spill-kode, og den nævnte defiton af spill cost. Der er dog nogle forbedrger som er beskrevet i [Cha82]. Dette er en simpel måde at udregne ulempen/fordelen ved at spille det pågælde register. I afsnit 2.7 behandles andre måder at udregne spill costs Simplify Observationen der benyttes til at farve grafen er: lad G være en graf, som vi ønsker at farve med k farver, og antag at der fdes en knude v i G, af grad < k. Lad G være den graf der fås ved at fjerne v og alle kanter cidente med v fra G. Så gælder: G kan farves med k farver G kan farves med k farver Implikationen mod højre er oplagt. Antag at der er fundet en k-farvng af G. Da G er konstrueret fra G ved at fjerne en knude v at grad < k, vil der altid være mdst en farve ledig til også at farve v i G, som hermed altså også kan k-farves. Simplify processen undersøger repetativt knuderne i grafen G og alle knuder af grad < k, bliver lagt på en stak, samt fjernet fra grafen sammen med alle d- og udgåe kanter. Såfremt der kun er knuder, hvis grad er k tilbage i G, udvælges en af disse til at skulle spilles. Hvilken knude der vælges her afhænger af den valgte metode til at udregne spill omkostng se afsnit 2.7. I prcippet burde man her dsætte den nødvige spill-kode, og starte hele processen forfra. I stedet fortsættes med simplify processen, dtil grafen G er tom denne metode er billigere i køretid for registerallokergen. Hvis der er knuder der undervejs blev markeret til spill, genereres nu spill-kode for disse, og registerallokergen starter forfra. Hvis det ikke er tilfældet, fortsættes til næste fase: select Spill Code Såfremt en eller flere knuder i grafen er blevet markeret til spill, vil dette tr gennemgås. For hvert virtuelt register v der skal spilles, dsættes spill-kode. Den grundlægge metode til dette er (se for eksempel [Mog00] afsnit 8.6): i hver struktion i, der enten læser eller skriver v, erstattes v af v i. Efter hver struktion i der skriver til v dsættes en STORE-struktion der skriver værdien af v i til hukommelsen. Før hver struktion i der læser v, dsættes en LOAD-struktion der henter værdien fra hukommelsen til v i. Der dføres altså en masse nye virtuelle registre, som har kort levetid, i stedet for det register der skulle spilles. Dette er som også tidligere nævnt den mest grundlægge metode til at dsætte spill-kode i afsnit 2.8 behandles mere avancerede måder at dsætte spill-kode på.

15 2.5 Optimistisk farvng 14 Efter ændrg af kildeprogrammet så den kluderer spill-kode, er der kommet en del nye virtuelle registre, og det er derfor nødvigt at rekonstruere terferensgrafen. Dette gøres dog først efter at der er dsat spill-kode for alle de registre der blev markerede til spill i simplify-fasen. Ovenståe beskrivelse er under antagelsen af, at der er tale om en load-store arkitektur. Ved andre arkitektur-typer er det muligt at tilgå lageret direkte, f.eks. Intel s x86 assembler-struktionssæt som beskrevet i [Cor99b]. Der vil derfor her være tilfælde, hvor det ikke er nødvigt for eksempel at hente en spilled værdi d fra hukommelsen for at benytte den som argument til en struktion 7. Vi vil dog, for simplicitetens skyld, samt for at gøre implementationen nemmere antage, at vi har en load-store arkitektur, da Intel s IA-32 arkitektur uden problemer understøtter dette ligesåvel Select Denne del af algoritmen behandler stakken som simplify har opbygget. Knuderne afstakkes en ad gangen, og tildeles en farve. Da select først bliver aktiveret, når det lykkedes i simplify-fasen at tømme grafen for knuder uden at markere knuder til spill, og da der kun fjernes knuder af grad lavere k, vil der på ethvert tidspunkt i selectfasen være en ledig farve til den knude der betragtes. På denne måde er der fundet en k-farvng af terferensgrafen. Se for eksempel [Bri92] side for et eksempel på hvordan en farvng kan foregå. Der er foreslået adskillige forbedrger/ændrger til den algoritme, som er beskrevet i dette afsnit, nogle af disse beskrives i de følge afsnit. 2.5 Optimistisk farvng En af de vigtigste idéer præsenteret af Chait i artiklerne [CAC + 81] og [Cha82] er metoden brugt til at farve terferensgrafen. Denne metode er dog for konservativ: den producerer unødvigt meget spill. Da der er tale om heuristikker til farvngen, er det ikke muligt at konstruere en optimal farvng hver gang, men Chait s farvngsmetode kan forbedres, så den i mange tilfælde undgår unødvige spills. Dette er beskrevet af Briggs og andre i [PBKT89], [BCT94] og [Bri92]. Heri præsenteres en alternativ farvngsheuristik, som er en forbedrg af Chait s metode. Briggs bemærker to problemer ved Yorktown-allokatoren se for eksempel [BCT94] afsnit 3. Disse er: 1 For diamant-grafen vist i figur 2.2 vil Yorktown-allokatoren spille en af knuderne i grafen såfremt der søges en 2-farvng af denne. Dette er, som Briggs skriver, grundet Yorktown-allokatorens pessimistiske antagelse om at en knudes naboer alle får tildelt forskellige farver. For en 2-farvng af diamantgrafen betyder det, at én af knuderne vil spilles, selvom det ikke er nødvigt. 2 Det andet tilfælde hvori Briggs konstaterede en mangel i Yorktown-allokatoren var, som han skriver, ved oversættelse af en numerisk funktion, SVD, som er en sgulær værdi-dekomposition af Golub og Resch. Denne funktion består af en lang række dybt dlejrede løkker, omsluttet af mange virtuelle registre med lang 7 Det smarte her, at man sparer et register til at gemme den temporære variabel.

16 2.5 Optimistisk farvng 15 levetid. For disse vælger Yorktown-allokatoren at spille både virtuelle registre der forekommer i de dre løkker, og de lange ydre registre. Det viser sig, at der er ledige registre til rådighed i de dre løkker, hvorfor disse ikke behøver at spilles. Figur 2.2 Diamant-graf Det første problem opstår som nævnt, fordi Yorktown-allokatoren approksimerer x kan farves med x har grad < k. Dette er naturligvis en tilstrækkelig betgelse, men (som diamantgrafen viser) ikke en nødvig betgelse. Ved optimistisk at antage at nogle af en knude x s naboer vil få forskellige farver, kan man alligevel farve x. Det andet problem skyldes, at beslutngen om hvorvidt der skal spilles foretages, før allokatoren kan se, om det er nødvigt. For eksemplet med SVD betyder det at når allokatoren når til de dre virtuelle registre, markeres disse til spill, da de har den laveste spill cost. På dette tidspunkt er der ikke formation nok til rådighed til at allokatoren kan afgøre om det rent faktisk er nødvigt at spille eller ej efter hele allokergen kan det ses, at der er foretaget unødvige spills. Briggs foreslår en ny farvngsheuristik, som reparerer på de to nævnte problemer. Han kalder metoden for optimistisk farvng. Et overblik er vist i figur 2.3. Figur 2.3 Briggs-allokatoren (Optimistic Register Allocation) Denne modificerede algoritme beror på at udsætte beslutngen om, hvorvidt en given knude skal markeres til spill, og ændrer derfor på udformngen af simplify- og select-trene i algoritmen Simplify Først fjernes alle knuder i grafen for hvilke det gælder at antallet af naboer er < k. Såfremt det opdages at alle restere knuder i grafen har k naboer, vælges en kandidat til spill. Dette valg foretages på samme måde som i Yorktown-allokatoren,

17 2.6 Forbedret coalescg 16 udfra spill costs. Denne spill-kandidat lægges på stakken som alle andre knuder, og simplify køres igen for det restere af grafen dtil denne er tom. Det at knuden placeres på stakken alligevel er det optimistiske i metoden - man håber at nogle af en spill-kandidats naboknuder får samme farve, så der alligevel er en ledig farve Select Select-fasen kan nu ikke garantere at fde en farve til hver knude på stakken. Hvis den fder en knude, for hvilken der ikke er en ledig farve, må det være en af spillkandidaterne fra simplify-fasen. I dette tilfælde må knuden spilles, og select-fasen fortsættes dtil alle knuder har fået en farve, eller er markeret til spill. Hvis der er fundet knuder der skal spilles, dsættes spill code og allokergen starter forfra Resultat Den nye heuristik er en forbedrg af Chait s heuristik forstået på den måde, at hvis en graf kan k-farves med Yorktown-allokatoren, kan den også k-farves med den optimistiske farvng. Hvis Yorktown-allokatoren spiller registrene R, vil den optimistiske farvng resultere i en farvng, hvor de virtuelle registre der spilles er en delmængde af R. I [PBKT89] er der angivet detaljerede eksperimentelle data der viser, at den optimistiske farvng kan give en væsentlig forbedrg af antallet af virtuelle registre der spilles. 2.6 Forbedret coalescg Konservativ coalescg Den form for coalescg, som bliver brugt af Chait i Yorktown-allokatoren betegnes af George og Appel i [GA96] som aggresiv coalescg. Dette skyldes at Yorktownallokatoren fjerner alle MOVE-struktioner, hvor der ikke er terferens mellem de to virtuelle registre der dgår. I [Bri92] kapitel 5 dfører Briggs en anden strategi for coalescg, kaldet konservativ coalescg, som er deferet i defition 2.3. Defition 2.3 Konservativ coalescg To knuder v i og v j slås sammen, hvis og kun hvis den nye knude v ij har < k naboer af grad k (hvor k er antallet af farver der er til rådighed). Som beskrevet i afsnit fjernes under simplify-fasen først alle knuder af grad < k. Hvis der er flere knuder tilbage, har de grad k. For at en knude skal være tilbage efter alle af grad < k er fjernet, må den have haft k antal naboer alle af grad k. Derfor vil en knude der er dført ved konservativ coalescg aldrig blive markeret til spill Iterativ coalescg I artiklen [GA96] bemærkes det, at når to knuder i terferensgrafen slås sammen, vil den nye knude ofte have højere grad, de to der blev fjernet. Det vil sige, det bliver potentielt sværere at farve grafen. Derfor kan der opstå situationer (se figur 2.4), hvor en graf ikke kan farves med k farver efter coalescg, men hvor den oprdelige

18 2.6 Forbedret coalescg 17 graf godt kunne. Dette er uheldigt, da en MOVE-struktion antages at være væsentlig billigere, det at skulle spille et register. Denne situation vil kunne opstå, hvis der benyttes aggressiv coalescg. En anden tilgang er at benytte konservativ coalescg. Her vil man undgå at spille registre som resultat af coalescg 8. På figur 2.5 er vist et tilfælde, hvor konservativ coalescg i s forsigtighed ikke slår to knuder sammen, selvom det ikke ville være noget problem. Figur 2.4 (a) Interferensgraf der kan farves i to farver. Den stiplede lie betyder, at der fdes en MOVE-struktion med argumenter b og c. (b) Grafen efter coalescg af knude b og c. Grafen kan ikke længere farves med 2 farver nu skal der bruges 3. a a b c d bc d (a) (b) Figur 2.5 (a) Interferensgraf der kan farves i to farver. Den stiplede lie betyder, at der fdes en MOVE-struktion med argumenter b og c. Denne MOVE-struktion bliver ikke fjernet ved konservativ coalescg, da knuden bc får 2 naboer af grad 2. (b) Grafen efter coalescg af knude b og c. Grafen kan stadig farves med 2 farver. a a b c d bc d (a) (b) George og Appel var ikke tilfredse med at benytte hverken aggresiv eller konservativ coalescg til deres formål i [GA96] en registerallokator til en Standard MLoversætter. Derfor foreslog de en ny tilgang til coalescg: iterativ coalescg. En oversigt over den nye algoritme er vist i figur Idéen er, at ved at udføre simplify på knuder der ikke er MOVE-relaterede 10 som i den origale Chait-allokator (se afsnit 2.4.5) håber vi på, at reducere antallet af naboer af grad k for de MOVE-relaterede knuder. Hvis det lykkes, kan der foretages konservativ coalescg. Den nye allokator består af følge tr: Build Dette foregår som tidligere beskrevet, dog markeres hver knude i grafen som enten MOVE-relateret eller ej. Simplify Knuder der har grad < k og ikke er MOVE-relaterede fjernes fra grafen og lægges på en stak. 8 Motivationen for Briggs et al. i [BCT94] var at sikre effekten af rematerialization - se evt. afsnit Diagrammet er taget fra [GA96] 10 En knude er MOVE-relateret, hvis dens tilsvare virtuelle register dgår som argument til en MOVEstruktion på noget punkt i kildeproceduren.

19 2.6 Forbedret coalescg 18 Figur 2.6 Itereret coalescg Coalesce Her udføres konservativ coalescg. Der er herefter muligvis stadig unødvige MOVE-struktioner tilbage, og nogle knuder er muligvis ikke længere MOVE-relaterede. Derfor returneres til simplify-tret. Når de eneste knuder der er tilbage er MOVE-relaterede eller har grad k, stoppes simplify-coalesce løkken. Freeze Når processen kommer hertil, er der altså ikke flere MOVE-struktioner som vi kan fjerne ved konservativ coalescg. Derfor vælges en knude af grad < k der ikke er MOVE-relateret (hvis en sådan fdes). De MOVE-struktioner, som den valgte knude forekommer i, fryses (det vil sige det opgives at fjerne dem fra kildeprogrammet). Nu er der muligvis kommet flere knuder af grad < k der ikke er MOVE-relaterede, så derfor sprger vi tilbage til simplify tret. Potential spill Hvis der ikke er nogen knude at vælge i freeze-tret, vælges en spillkandidat, og der fortsættes til næste tr. Select & Actual spill Disse tr foregår på samme måde som beskrevet tidligere. På figuren er det antaget, at der benyttes optimistisk farvng (se afsnit 2.5), men Chait s origale farvngsheuristik kan benyttes istedet Resultater Som beskrevet i afsnit vil gen af de knuder, der er resultat af konservativ coalescg, blive markeret til spill. Som en konsekvens af dette, vises det i [GA96] afsnit 5, at hvis en graf G kan farves med Chait s simplify-heuristik, så vil konservativ coalescg på en graf fremkommet ved at foretaget et antal ændrger i G via simplify, ikke ændre ved det faktum af grafen er farvelig. Dette betyder, at den beskrevne algoritme er

20 2.7 Spill-omkostnger 19 fornuftig. Det bemærkes i [GA96], at hvis man benytter pessimistisk farvng, vil den nye algoritme ikke producere nye spills (i forhold til algoritmen fra afsnit 2.4), men hvis der benyttes optimistisk farvng, kan det ikke garanteres, at der er det samme antal spills. George og Appel anfører i deres artikel [GA96] resultaterne af nogle eksperimentelle undersøgelser af deres algoritme. De konkluderer, at deres tilgang fjerner mange flere MOVE-struktioer allokatorer, der udfører coalescg før simplify, og deres ændrger må derfor anses som en forbedrg. Deres undersøgelser foregår i et miljø, hvor der er mange MOVE-struktioner i koden fra optimergs- og kodegenerergsfaserne. Forskellen i køretid ved brug af iterativ coalescg må forventes at være størst i netop sådanne situationer - da det netop er MOVE-struktioner der fjernes. I en senere artikel beskriver Leung og George et problem med hensyn til køretiden for allokatoren ved brug af iterativ coalescg: i visse tilfælde vil allokatoren iterere unødigt mange gange mellem de tre faser simplify, coalesce og freeze. De beskriver i [LG], hvordan dette kan repareres. Ændrgen har gen betydng for selve allokergen, men forbedrer køretiden for allokatoren. 2.7 Spill-omkostnger Ved brug af en allokator der bruger pessimistisk farvng (beskrevet i afsnit 2.4.5) skal der i simplify-tret vælges en knude til spill. På samme måde skal der under selectfasen af en allokator med optimistisk farvng vælges en knude der potentielt skal spilles (se afsnit 2.5). Vi vil nu beskrive forskellige måder at afgøre hvilken knude der skal vælges Defition af spill cost Valget af knuder til spill-kandidater må være styret af et ønske om at mimere den del af køretiden for det resultere program, som bruges på at eksekvere spill-kode. Det vil sige, hvis vi kan estimere den forøgelse af køretiden, som det koster at spille et virtuelt register, har vi en god chance for at foretage kvalificerede valg. Der må naturligvis være tale om en relativ vurderg af de forskellige knuder de absolutte tider afhænger helt af den konkrete maske, og er som sådan uteressante. Til at approksimere de nævnte tider dfører Chait i [Cha82] en spill cost for et virtuelt register v: cost(v) = 10 dybde(i) + 10 dybde(i) (2.1) I uses(v) I defs(v) Her angiver dybde(i) hvor mange løkker struktion I er dlejret i og uses(v) (henholdsvis def s(v)) er mængden af struktioner der læser (henholdsvis skriver) v. Dette bruges som et estimat af, hvor mange gange LOAD- eller STORE-struktionerne dsat for at spille v bliver udført. Det antages altså, at en struktion udføres 10 gange så ofte, hvis den er de i en løkke Chait s metode Alle virtuelle registre kan på den ovenfor beskrevne måde tildeles en spill cost. Men der skal mere til at styre valget af knude under simplify- eller select-trene. I Chait s

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Grådige algoritmer Grådige algoritmer Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Grådige algoritmer Et generelt algoritme-konstruktionsprincip ( paradigme ) for

Læs mere

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Grådige algoritmer Grådige algoritmer Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Grådige algoritmer Et generelt algoritme-konstruktionsprincip ( paradigme ) for

Læs mere

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Grådige algoritmer Grådige algoritmer Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Grådige algoritmer Et generelt algoritme-konstruktionsprincip ( paradigme ) for

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

Dynamisk programmering

Dynamisk programmering Dynamisk programmering Dynamisk programmering Optimeringsproblem: man ønsker at finde bedste den kombinatoriske struktur (struktur opbygget af et endeligt antal enkeltdele) blandt mange mulige. Eksempler:

Læs mere

Sammenhængskomponenter i grafer

Sammenhængskomponenter i grafer Sammenhængskomponenter i grafer Ækvivalensrelationer Repetition: En relation R på en mængde S er en delmængde af S S. Når (x, y) R siges x at stå i relation til y. Ofte skrives x y, og relationen selv

Læs mere

Gruppeteori. Michael Knudsen. 8. marts For at motivere indførelsen af gruppebegrebet begynder vi med et eksempel.

Gruppeteori. Michael Knudsen. 8. marts For at motivere indførelsen af gruppebegrebet begynder vi med et eksempel. Gruppeteori Michael Knudsen 8. marts 2005 1 Motivation For at motivere indførelsen af gruppebegrebet begynder vi med et eksempel. Eksempel 1.1. Lad Z betegne mængden af de hele tal, Z = {..., 2, 1, 0,

Læs mere

LEKTION 4 MODSPILSREGLER

LEKTION 4 MODSPILSREGLER LEKTION 4 MODSPILSREGLER Udover at have visse fastsatte regler med hensyn til udspil, må man også se på andre forhold, når man skal præstere et fornuftigt modspil. Netop modspillet bliver af de fleste

Læs mere

Korteste veje i vægtede grafer. Længde af sti = sum af vægte af kanter på sti.

Korteste veje i vægtede grafer. Længde af sti = sum af vægte af kanter på sti. Korteste veje Korteste veje i vægtede grafer Længde af sti = sum af vægte af kanter på sti. Korteste veje i vægtede grafer Længde af sti = sum af vægte af kanter på sti. δ(u, v) = længden af en korteste

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

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

Rolf Fagerberg. Forår 2013

Rolf Fagerberg. Forår 2013 Forår 2013 Mål for i dag Dagens program: 1 2 3 4 5 6 Forudsætninger: DM536 og DM537 Timer: 50% forelæsninger, 50% øvelser Forudsætninger: DM536 og DM537 Eksamenform: Skriftlig eksamen: Timer: 50% forelæsninger,

Læs mere

Component based software enginering Diku 2005 Kritikopgave

Component based software enginering Diku 2005 Kritikopgave Component based software enginering Diku 2005 Kritikopgave Nicolas Møller Henschel 17. april 2005 1 Indhold 1 Indledning 3 2 Indhold 3 2.1 Introduktionen.......................... 3 2.1.1 Mangler..........................

Læs mere

Korteste veje i vægtede grafer. Længde af sti = sum af vægte af kanter på sti.

Korteste veje i vægtede grafer. Længde af sti = sum af vægte af kanter på sti. Korteste veje Korteste veje i vægtede grafer Længde af sti = sum af vægte af kanter på sti. Korteste veje i vægtede grafer Længde af sti = sum af vægte af kanter på sti. δ(u, v) = længden af en korteste

Læs mere

Spilstrategier. Indhold. Georg Mohr-Konkurrencen. 1 Vindermængde og tabermængde 2. 2 Kopier modpartens træk 4

Spilstrategier. Indhold. Georg Mohr-Konkurrencen. 1 Vindermængde og tabermængde 2. 2 Kopier modpartens træk 4 Indhold 1 Vindermængde og tabermængde 2 2 Kopier modpartens træk 4 3 Udnyt modpartens træk 5 4 Strategityveri 6 5 Løsningsskitser 7 Spilstrategier De spiltyper vi skal se på her, er primært spil af følgende

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

Mandags Chancen. En optimal spilstrategi. Erik Vestergaard

Mandags Chancen. En optimal spilstrategi. Erik Vestergaard Mandags Chancen En optimal spilstrategi Erik Vestergaard Spilleregler denne note skal vi studere en optimal spilstrategi i det spil, som i fjernsynet går under navnet Mandags Chancen. Spillets regler er

Læs mere

Grådige algoritmer. Et algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Grådige algoritmer. Et algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Grådige algoritmer Grådige algoritmer Et algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Grådige algoritmer Et algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Læs mere

Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Ideen er simpel:

Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Ideen er simpel: Grådige algoritmer Grådige algoritmer Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Ideen er simpel: Opbyg løsningen skridt for skridt ved hele tiden af vælge lige

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

Grafer og graf-gennemløb

Grafer og graf-gennemløb Grafer og graf-gennemløb Grafer En mængde V af knuder (vertices). En mængde E V V af kanter (edges). Dvs. ordnede par af knuder. Grafer En mængde V af knuder (vertices). En mængde E V V af kanter (edges).

Læs mere

Målet for disse slides er at diskutere nogle metoder til at gemme og hente data effektivt.

Målet for disse slides er at diskutere nogle metoder til at gemme og hente data effektivt. Merging og hashing Mål Målet for disse slides er at diskutere nogle metoder til at gemme og hente data effektivt. Dette emne er et uddrag af kurset DM507 Algoritmer og datastrukturer (2. semester). Mål

Læs mere

Grundlæggende køretidsanalyse af algoritmer

Grundlæggende køretidsanalyse af algoritmer Grundlæggende køretidsanalyse af algoritmer Algoritmers effektivitet Størrelse af inddata Forskellige mål for køretid Store -notationen Klassiske effektivitetsklasser Martin Zachariasen DIKU 1 Algoritmers

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

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

Sortering af information er en fundamental og central opgave.

Sortering af information er en fundamental og central opgave. Sortering 1 / 36 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, 6, 9 Mange opgaver er hurtigere i sorteret information (tænk på ordbøger, telefonbøger,

Læs mere

Ugeseddel 12(10.12 14.12)

Ugeseddel 12(10.12 14.12) Ugeseddel (..) Matematisk Programmering Niels Lauritzen..7 FORELÆSNINGER I ugen. 7. gennemgik vi algoritmer til løsning af heltalsprogrammer ved hjælp af simplex algoritmen. Dette er heltalsprogrammeringsugesedlen

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

Dynamisk programmering

Dynamisk programmering Dynamisk programmering Dynamisk programmering Optimeringsproblem: man ønsker at finde bedste den kombinatoriske struktur blandt mange mulige. Dynamisk programmering Optimeringsproblem: man ønsker at finde

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

Projektopgave Observationer af stjerneskælv

Projektopgave Observationer af stjerneskælv Projektopgave Observationer af stjerneskælv Af: Mathias Brønd Christensen (20073504), Kristian Jerslev (20072494), Kristian Mads Egeris Nielsen (20072868) Indhold Formål...3 Teori...3 Hvorfor opstår der

Læs mere

Lagervisning. Dina Friis, og Niels Boldt,

Lagervisning. Dina Friis, og Niels Boldt, Lagervisning Dina Friis, dina@diku.dk og Niels Boldt, boldt@diku.dk 6. april 2001 Kapitel 1 Sammenfatning Dette dokument er et eksempel på en delvis besvarelse af G-opgaven stillet på Datalogi 0 2000-2001.

Læs mere

Selvstudium 1, Diskret matematik

Selvstudium 1, Diskret matematik Selvstudium 1, Diskret matematik Matematik på første studieår for de tekniske og naturvidenskabelige uddannelser Aalborg Universitet I dette selfstudium interesserer vi os alene for tidskompleksitet. Kompleksitet

Læs mere

Skriftlig Eksamen Kombinatorik, sandsynlighed og randomiserede algoritmer (DM528)

Skriftlig Eksamen Kombinatorik, sandsynlighed og randomiserede algoritmer (DM528) Skriftlig Eksamen Kombinatorik, sandsynlighed og randomiserede algoritmer (DM528) Institut for Matematik & Datalogi Syddansk Universitet Mandag den 3 Januar 2011, kl. 9 13 Alle sædvanlige hjælpemidler

Læs mere

Hvad er formel logik?

Hvad er formel logik? Kapitel 1 Hvad er formel logik? Hvad er logik? I daglig tale betyder logisk tænkning den rationelt overbevisende tænkning. Og logik kan tilsvarende defineres som den rationelle tænknings videnskab. Betragt

Læs mere

Lageradministration. dopsys

Lageradministration. dopsys Lageradministration 1 Lageret i maskinarkitekturen Beregningsenhed, lagre (registre, RAM, disk), ydre enheder 2 Abstraktion over typerne: et hierarki En maskine har flere forskellige lagre Operativsystemet

Læs mere

Sider og segmenter. dopsys 1

Sider og segmenter. dopsys 1 Sider og segmenter dopsys 1 Lokal vs global sideallokering (1) Med (a) som udgangspunkt giver (b) lokal hhv. (c) global allokering forskellige resultater dopsys 2 Lokal vs global sideallokering (2) Den

Læs mere

FACEBOOK MARKETING. Simple teknikker der kan booste virksomhedens salg og omsætning via Facebook.

FACEBOOK MARKETING. Simple teknikker der kan booste virksomhedens salg og omsætning via Facebook. FACEBOOK MARKETING Simple teknikker der kan booste virksomhedens salg og omsætning via Facebook. Hvorfor skal jeg bruge Facebook Marketing? Mange virksomheder spørger sig selv dette spørgsmål. Men de skal

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2010 Projekt, del III Institut for matematik og datalogi Syddansk Universitet 24. april, 2010 (let justeret 10. maj og 21. maj 2010) Dette projekt udleveres i tre

Læs mere

Lightning Decision Jam. Ti enkle trin til at fastlægge fokus og realiserbare næste bedste skridt

Lightning Decision Jam. Ti enkle trin til at fastlægge fokus og realiserbare næste bedste skridt Lightning Decision Jam Ti enkle trin til at fastlægge fokus og realiserbare næste bedste skridt Lightning Decision Jam Lightning Decision Jam er en trin-for-trin proces, der hjælper teams til at identificere,

Læs mere

Datastrukturer (recap)

Datastrukturer (recap) Dictionaries Datastrukturer (recap) Data: Datastruktur = data + operationer herpå En ID (nøgle) + associeret data. Operationer: Datastrukturens egenskaber udgøres af de tilbudte operationer (API for adgang

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 DIAGRAMFUNKTIONER I EXCEL

INTRODUKTION TIL DIAGRAMFUNKTIONER I EXCEL INTRODUKTION TIL DIAGRAMFUNKTIONER I EXCEL I denne og yderligere at par artikler vil jeg se nærmere på diagramfunktionerne i Excel, men der er desværre ikke plads at gennemgå disse i alle detaljer, dertil

Læs mere

Mat H /05 Note 2 10/11-04 Gerd Grubb

Mat H /05 Note 2 10/11-04 Gerd Grubb Mat H 1 2004/05 Note 2 10/11-04 Gerd Grubb Nødvendige og tilstrækkelige betingelser for ekstremum, konkave og konvekse funktioner. Fremstillingen i Kapitel 13.1 2 af Sydsæters bog [MA1] suppleres her med

Læs mere

Datastrukturer (recap)

Datastrukturer (recap) Dictionaries Datastrukturer (recap) Data: Datastruktur = data + operationer herpå En ID (nøgle) + associeret data. Operationer: Datastrukturens egenskaber udgøres af de tilbudte operationer (API for adgang

Læs mere

Afstande, skæringer og vinkler i rummet

Afstande, skæringer og vinkler i rummet Afstande, skæringer og vinkler i rummet Frank Nasser 9. april 20 c 2008-20. Dette dokument må kun anvendes til undervisning i klasser som abonnerer på MatBog.dk. Se yderligere betingelser for brug her.

Læs mere

DM507 Eksamen Obligatorisk Opgave Rejseplanlægning

DM507 Eksamen Obligatorisk Opgave Rejseplanlægning Institut for Matematik og Datalogi Syddansk Universitet, Odense 21. februar 2011 LMF DM507 Eksamen Obligatorisk Opgave Rejseplanlægning 1 Problemet Denne opgave går ud på at lave et program, som ud fra

Læs mere

Grafer og graf-gennemløb

Grafer og graf-gennemløb Grafer og graf-gennemløb Grafer En mængde V af knuder (vertices). En mængde E V V af kanter (edges). Dvs. ordnede par af knuder. Grafer En mængde V af knuder (vertices). En mængde E V V af kanter (edges).

Læs mere

Pointen med Differentiation

Pointen med Differentiation Pointen med Differentiation Frank Nasser 20. april 2011 c 2008-2011. Dette dokument må kun anvendes til undervisning i klasser som abonnerer på MatBog.dk. Se yderligere betingelser for brug her. Bemærk:

Læs mere

Grafer og graf-gennemløb

Grafer og graf-gennemløb Grafer og graf-gennemløb Grafer En mængde V af knuder (vertices). En mængde E V V af kanter (edges). Dvs. ordnede par af knuder. Grafer En mængde V af knuder (vertices). En mængde E V V af kanter (edges).

Læs mere

af integrationsrådenes høringsret og økonomiske midler

af integrationsrådenes høringsret og økonomiske midler UNDERSØGELSE af integrationsrådenes høringsret og økonomiske midler Rådet for Etniske Minoriteter Marts 2004 BAGGRUND FOR UNDERSØGELSEN Rådet for Etniske Minoriteter afholdt den 3. maj 2003 en konference

Læs mere

Sider og segmenter. dopsys 1

Sider og segmenter. dopsys 1 Sider og segmenter dopsys 1 Lokal vs global sideallokering (1) Med (a) som udgangspunkt giver (b) lokal hhv. (c) global allokering forskellige resultater dopsys 2 Lokal vs global sideallokering (2) Den

Læs mere

DM507 Algoritmer og datastrukturer

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

Læs mere

Bliv opdaget på Internettet! - 10 gode råd til at optimere din hjemmeside til søgemaskiner

Bliv opdaget på Internettet! - 10 gode råd til at optimere din hjemmeside til søgemaskiner Bliv opdaget på Internettet! - 10 gode råd til at optimere din hjemmeside til søgemaskiner Af Henrik Bro og Martin T. Hansen I har måske allerede en flot, og informativ hjemmeside. Og alle jeres kursister

Læs mere

Matematisk modellering og numeriske metoder. Lektion 16

Matematisk modellering og numeriske metoder. Lektion 16 Matematisk modellering og numeriske metoder Lektion 16 Morten Grud Rasmussen 6. november, 2013 1 Interpolation [Bogens afsnit 19.3 side 805] 1.1 Interpolationspolynomier Enhver kontinuert funktion f på

Læs mere

Fable Kom godt i gang

Fable Kom godt i gang Fable Kom godt i gang Opdateret: 26-03-2018 Indholdsfortegnelse 1. Først skal du installere programmet på din computer 3 2. Når programmet er installeret er du klar til at pakke robotten ud 4 3. Nu er

Læs mere

Rolf Fagerberg. Forår 2012

Rolf Fagerberg. Forår 2012 Forår 2012 Mål for i dag Dagens program: 1 2 3 4 5 6 Forudsætninger: DM502 og DM503 Timer: 50% forelæsninger, 50% øvelser Forudsætninger: DM502 og DM503 Eksamenform: Skriftlig eksamen: Timer: 50% forelæsninger,

Læs mere

Kom godt i gang med Fable-robotten

Kom godt i gang med Fable-robotten Kom godt i gang med Fable-robotten 1. Først skal du installere programmet på din computer. Gå ind på shaperobotics.com og under support vælger du download: Her vælger du, under PC App om du kører Windows

Læs mere

Kontrol-strukturer i PHP

Kontrol-strukturer i PHP Denne guide er oprindeligt udgivet på Eksperten.dk Kontrol-strukturer i PHP Denne artikel gennemgår kontrolstrukturer i PHP. 'if', 'switch', 'while' og 'for' bliver gennemgået. Den forudsætter lidt grundlæggende

Læs mere

Køreplan Matematik 1 - FORÅR 2005

Køreplan Matematik 1 - FORÅR 2005 Lineær algebra modulo n og kryptologi Køreplan 01005 Matematik 1 - FORÅR 2005 1 Introduktion Kryptologi er en ældgammel disciplin, som går flere tusinde år tilbage i tiden. Idag omfatter disciplinen mange

Læs mere

Oversigt. Operativsystemer [6]: Virtuelt lager. Virtuel lager. Virtuelt lager. Virkemåde. Virtuelt lager eksempel virtuelt lager

Oversigt. Operativsystemer [6]: Virtuelt lager. Virtuel lager. Virtuelt lager. Virkemåde. Virtuelt lager eksempel virtuelt lager Operativsystemer [6]: Virtuelt lager Datalogi 1F Forår 2003 Jørgen Sværke Hansen cyller@diku.dk Oversigt Hvad er virtuelt lager Mekanismen bag tvungent sideskift Politikker (strategier) for tvungent sideskift:

Læs mere

Tjek. lønnen. Et værktøj til at undersøge lokal løndannelse og ligeløn på offentlige arbejdspladser. 2007 udgave Varenr. 7520

Tjek. lønnen. Et værktøj til at undersøge lokal løndannelse og ligeløn på offentlige arbejdspladser. 2007 udgave Varenr. 7520 Tjek lønnen Et værktøj til at undersøge lokal løndannelse og ligeløn på offentlige arbejdspladser 2007 udgave Varenr. 7520 Indholdsfortegnelse Forord... 3 Teknisk introduktion... 4 Indledning... 5 Introduktion

Læs mere

ALGORITMER OG DATA SOM BAGGRUND FOR FORUDSIGELSER 8. KLASSE. Udfordring

ALGORITMER OG DATA SOM BAGGRUND FOR FORUDSIGELSER 8. KLASSE. Udfordring ALGORITMER OG DATA SOM BAGGRUND FOR FORUDSIGELSER 8. KLASSE Udfordring INDHOLDSFORTEGNELSE 1. Forløbsbeskrivelse... 3 1.1 Overordnet beskrivelse tre sammenhængende forløb... 3 1.2 Resume... 5 1.3 Rammer

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

IDAP manual Emission

IDAP manual Emission IDAP manual Emission Dato: 08-06-2005 16:32:35 Indhold INDHOLD... 1 1 EMISSION... 2 1.1 KURVER... 2 1.2 RAPPORTER... 5 1.3 DATA REDIGERING... 6 1.3.1 Masse redigering... 7 1.3.2 Enkelt redigering... 10

Læs mere

Eksperimentel matematik Kommentarer til tag-med opgaver

Eksperimentel matematik Kommentarer til tag-med opgaver Eksperimentel matematik Kommentarer til tag-med opgaver Hypotesedannelse I har alle produceret grafer af typen 0.8 0.6 0.4 0.2 0 0. 0.2 0.3 0.4 0.5 (de lilla punkter er fundet ved en strenglængde på 35,

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

Generelle bemærkninger om statusrapporter

Generelle bemærkninger om statusrapporter Generelle bemærkninger om statusrapporter Opdateret den 19. december 2011 Indhold Alle grenspecialer... 2 Diverse:... 2 Litteratur:... 2 Praksis /Klinisk:... 3 Specielt for Onkologi... 4 Specielt for Radiologi...

Læs mere

Grafer og graf-gennemløb

Grafer og graf-gennemløb Grafer og graf-gennemløb Grafer En mængde V af knuder (vertices). En mængde E V V af kanter (edges). Dvs. ordnede par af knuder. Grafer En mængde V af knuder (vertices). En mængde E V V af kanter (edges).

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

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet Eksamen 005, F 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:

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 Mandag den 7. juni 00, kl. 9 Alle sædvanlige hjælpemidler (lærebøger, notater, osv.)

Læs mere

ANALOG vs DIGITAL. figur 1: fotografi af en blyantsstreg. figur 2: en linje beskrevet som formel er omsat til pixels

ANALOG vs DIGITAL. figur 1: fotografi af en blyantsstreg. figur 2: en linje beskrevet som formel er omsat til pixels ANALOG vs DIGITAL Ordet digitalt bliver brugt ofte indenfor skitsering. Definitionen af digitalt er en elektronisk teknologi der genererer, gemmer, og processerer data ved at benytte to tilstande: positiv

Læs mere

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet side af 2 sider Danmarks Tekniske Universitet Skriftlig prøve, den 23. maj 20. Kursusnavn: Algoritmer og datastrukturer I Kursus nr. 0205. Varighed: 4 timer Tilladte hjælpemidler: Alle skriftlige hjælpemidler.

Læs mere

Erfaringer med CPR-replikering

Erfaringer med CPR-replikering Erfaringer med CPR-replikering Dette dokument beskriver en række overvejelser vi har gjort os i forbindelse med at vi har udviklet en Proof of Concept (PoC) af en CPR-replikeringstjeneste for KOMBIT. CPRs

Læs mere

I denne artikel vil du ved hjælp af arrays kunne afrunde et decimaltal til et helt tal.

I denne artikel vil du ved hjælp af arrays kunne afrunde et decimaltal til et helt tal. Denne guide er oprindeligt udgivet på Eksperten.dk Afrund til helt tal I denne artikel vil du ved hjælp af arrays kunne afrunde et decimaltal til et helt tal. Skrevet den 03. Feb 2009 af tjomsen I kategorien

Læs mere

Matematikken i kunstig intelligens Opgaver om koordinerende robotter

Matematikken i kunstig intelligens Opgaver om koordinerende robotter Matematikken i kunstig intelligens Opgaver om koordinerende robotter Thomas Bolander 2. juni 2018 Vejledning til opgaver Opgave 1 kan eventuelt springes over, hvis man har mindre tid. De resterende opgaver

Læs mere

Afstande, skæringer og vinkler i rummet

Afstande, skæringer og vinkler i rummet Afstande, skæringer og vinkler i rummet Frank Villa 2. maj 202 c 2008-20. Dette dokument må kun anvendes til undervisning i klasser som abonnerer på MatBog.dk. Se yderligere betingelser for brug her. Indhold

Læs mere

Pointen med Funktioner

Pointen med Funktioner Pointen med Funktioner Frank Nasser 0. april 0 c 0080. Dette dokument må kun anvendes til undervisning i klasser som abonnerer på MatBog.dk. Se yderligere betingelser for brug her. Bemærk: Dette er en

Læs mere

Design af IT-medier. Skriftlig prøve 27. august 1999. Alle skriftlige hjælpemidler er tilladt.

Design af IT-medier. Skriftlig prøve 27. august 1999. Alle skriftlige hjælpemidler er tilladt. Design af IT-medier Skriftlig prøve 27. august 1999 Varighed: Hjælpemidler: Bedømmelse: Besvarelse: Opgaver: 4 timer. Alle skriftlige hjælpemidler er tilladt. Karakter efter 13-skalaen. Alle ark skal være

Læs mere

Fang Prikkerne. Introduktion. Scratch

Fang Prikkerne. Introduktion. Scratch Scratch 2 Fang Prikkerne All Code Clubs must be registered. Registered clubs appear on the map at codeclubworld.org - if your club is not on the map then visit jumpto.cc/ccwreg to register your club. Introduktion

Læs mere

ScanOBS nyhedsbrev. Dato: 4. maj 2018

ScanOBS nyhedsbrev. Dato: 4. maj 2018 NYHEDSBREV 1-2018 www..dk ScanOBS nyhedsbrev Dato: 4. maj 2018 Jeg fremsender hermed nyhedsbrev for ScanOBS, der omhandler de seneste ændringer i ScanOBSprogrammerne, og jeg vil samtidigt benytte lejligheden

Læs mere

Matematikken i kunstig intelligens Opgaver om koordinerende robotter LØSNINGER

Matematikken i kunstig intelligens Opgaver om koordinerende robotter LØSNINGER Matematikken i kunstig intelligens Opgaver om koordinerende robotter LØSNINGER Thomas Bolander 25. april 2018 Vejledning til opgaver Opgave 1 kan eventuelt springes over, hvis man har mindre tid. De resterende

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 Kursus nr. 06. Tilladte hjælpemidler: Skriftlige hjælpemidler. Varighed: timer Vægtning

Læs mere

Hukommelsesspil. Introduktion. Scratch

Hukommelsesspil. Introduktion. Scratch Scratch 2 Hukommelsesspil All Code Clubs must be registered. By registering your club we can measure our impact, and we can continue to provide free resources that help children learn to code. You can

Læs mere

Projekt 1.4 Tagrendeproblemet en instruktiv øvelse i modellering med IT.

Projekt 1.4 Tagrendeproblemet en instruktiv øvelse i modellering med IT. Projekt 1.4 Tagrendeproblemet en instruktiv øvelse i modellering med IT. Projektet kan bl.a. anvendes til et forløb, hvor en af målsætningerne er at lære om samspillet mellem værktøjsprogrammernes geometriske

Læs mere

Matematik opgave Projekt afkodning Zehra, Pernille og Remuss

Matematik opgave Projekt afkodning Zehra, Pernille og Remuss Matematik opgave Projekt afkodning Zehra, Pernille og Remuss Opgave A Sæt de overstående symboler ind i en matematisk sammenhæng der gør dem forståelige. Det kan være som en sætning eller med tal og bogstaver

Læs mere

Lineære differentialligningers karakter og lineære 1. ordens differentialligninger

Lineære differentialligningers karakter og lineære 1. ordens differentialligninger enote 11 1 enote 11 Lineære differentialligningers karakter og lineære 1. ordens differentialligninger I denne note introduceres lineære differentialligninger, som er en speciel (og bekvem) form for differentialligninger.

Læs mere

Matlab script - placering af kran

Matlab script - placering af kran Matlab script - placering af kran 1 Til at beregne den ideelle placering af kranen hos MSK, er der gjort brug af et matlab script. Igennem dette kapitel vil opbygningen af dette script blive gennemgået.

Læs mere

Projekt 9.5 Racefordomme i USA og Simpsons paradoks (B og A)

Projekt 9.5 Racefordomme i USA og Simpsons paradoks (B og A) Projekt 9.5 Racefordomme i USA og Simpsons paradoks (B og A) (Data er hentet fra M. Radelet, "Racial characteristics and imposition of death penalty", American Sociological Review, 46 (1981), pp 918-927

Læs mere

Skriftlig Eksamen Kombinatorik, sandsynlighed og randomiserede algoritmer (DM528)

Skriftlig Eksamen Kombinatorik, sandsynlighed og randomiserede algoritmer (DM528) Skriftlig Eksamen Kombinatorik, sandsynlighed og randomiserede algoritmer (DM58) Institut for Matematik & Datalogi Syddansk Universitet Torsdag den 7 Januar 010, kl. 9 13 Alle sædvanlige hjælpemidler (lærebøger,

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

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 Tirsdag den 24. juni 2014, kl. 10:00 14:00 Besvarelsen skal afleveres elektronisk. Se

Læs mere

Grafer og graf-gennemløb

Grafer og graf-gennemløb Grafer og graf-gennemløb Grafer En mængde V af knuder (vertices). En mængde E V V af kanter (edges). Dvs. ordnede par af knuder. Figur: Terminologi: n = V, m = E (eller V og E (mis)bruges som V og E ).

Læs mere

Vejledning i upload af serier til Danske tegneseriskaberes app.

Vejledning i upload af serier til Danske tegneseriskaberes app. Vejledning i upload af serier til Danske tegneseriskaberes app. En kort intro Version 1.2 22/11/2012 Danske Tegneserieskabere har lavet appen for at give medlemmer og andre en nem adgang til at publicere

Læs mere

Udarbejdet af CFU Absalon

Udarbejdet af CFU Absalon Chatbots i Scratch Introduktion: En chatbot er et lille program, der kan chatte. De bruges mange steder på internettet, enten for at kunne hjælpe i nogle bestemte situationer eller for at underholde. De

Læs mere

Periodiske kædebrøker eller talspektre en introduktion til programmet periodisktalspektrum

Periodiske kædebrøker eller talspektre en introduktion til programmet periodisktalspektrum Jørgen Erichsen Periodiske kædebrøker eller talspektre en introduktion til programmet periodisktalspektrum I artikelserien Studier på grundlag af programmet SKALAGENERATOREN kommer jeg bl.a. ind på begrebet

Læs mere

Artikel trykt i Controlleren. Gengivelse af denne artikel eller dele heraf er ikke tilladt ifølge dansk lov om ophavsret.

Artikel trykt i Controlleren. Gengivelse af denne artikel eller dele heraf er ikke tilladt ifølge dansk lov om ophavsret. Controlleren Artikel trykt i Controlleren. Gengivelse af denne artikel eller dele heraf er ikke tilladt ifølge dansk lov om ophavsret. Børsen Ledelseshåndbøger er Danmarks største og stærkeste videns-

Læs mere

Version

Version 1 af 20 Indholdsfortegnelse Skyggelærer, dobbeltlærer, lærerkandidat og samlæsning... 2 Om at bruge 0 i positionsfeltet for lærere, fag og/eller blokke... 8 Lange lærerinitialer, lokalenavne og holdbetegnelser...

Læs mere