INF2440 Uke 10, v2015 : Arne Maus PSE, Inst. for informatikk

Størrelse: px
Begynne med side:

Download "INF2440 Uke 10, v2015 : Arne Maus PSE, Inst. for informatikk"

Transkript

1 INF2440 Uke 10, v2015 : Arne Maus PSE, Inst. for informatikk 1

2 Hva så vi på i uke 9 Et sitat om tidsforbruk ved faktorisering Om en feil i Java 7 ved tidtaking Hvordan parallellisere rekursive algoritmer Gå ikke i direkte oversettelses-fella eksemplifisert ved Kvikk-sort, 3 ulike løsninger Oblig3 det sekvensielle tilfellet Bla. bør lage klasse IntList (hvis tid) Hvor lang tid tar de ulike mekanismene vi har i Java? 2

3 Hva skal vi se på i Uke10 Hvor lang tid de ulike mekanismene vi har i Java tar. Java 6 (2012) og Java 8 (2015) Automatisk parallellisering av rekursjon PRP- Parallel Recursive Procedures Nåværende løsning (Java, multicore CPU, felles hukommelse) implementasjon: Peter L. Eidsvik Mange tidligere implementasjoner fra 1994 (C over nettet, C# på.net, Java over nettet,..) Demo av to kjøringer Hvordan ikke gå i fella: Et Rekursivt kall = En Tråd Halvautomatisk Hvordan kan vi bygge en kompilator (preprosessor) for automatisk parallellisering Prinsipper ( bredde-først og dybde-først traversering av r-treet) Datastruktur Eksekvering Krav til et program som skal bruke PRP 3

4 Hvor lang tid tar egentlig ulike mekanismer i Java? (fra Petter A. Busteruds master-oppgave: Invesigating Different Concurrency Mechanisms in Java) - i 2012 Dette er målinger på en relativt ny CPU (2009): Intel Pentium i7 920 GHz 4 core 2 GB DDR2 533 MHz Windows 7 32bit og Java 6 (med noe HotSpot kompilering) Linux Mint 13, 32bit Det er de relative hastighetene som teller Petter målte bl.a. : kalle en metode lage et nytt objekt (new C() ) + kalle en metode lage en Tråd (new Thread + kalle run() ) Lage en ExecutorService + legge inn tråder Tider på int[] og trådsikre AtomicIntegerArray Generelt er Linux 15-20% raskere enn Windows (ikke optimalisert) 4

5 Hvor lang tid i µs tar egentlig ulike mekanismer i Java? (fra Petter A. Busteruds master-oppgave: Investigating Different Concurrency Mechanisms in Java) A) Metodekall på Windows og Linux (ikke optimalisert) Generelt er kan vi gjøre mer enn metodekall per millisek. 5

6 Å lage et nytt objekt av en klasse (new) og kalle en metode i objektet (µs) Object Konklusjon: - Verken det å kalle en metode eller å lage et objekt tar særlig lang tid - Mye blir optimalisert videre - Forskjellen mellom første og andre kall er at det sannsynligvis er blitt JIT-kompilert til maskinkode, men ikke optimalisert 6

7 Lage en tråd (new Thread()) og kalle run() - µs 7

8 Lage en ExecutorService 8

9 Lage og bruke en vanlig int [] a (IKKE trådsikker) mot AtomicIntegerArray (trådsikre heltall) 9

10 Oppsummering om kjøretider fra Petter: Metodekall tar svært liten tid: 2-5 µs og kan også optimaliseres bort (og gis speedup >1) Å lage et objekt av en klasse (og kalle en metode i det) tar liten tid: ca.785 µs Å lage en tråd og starte den opp tar en del tid: ca.1500 µs, men lite, ca. 180 µs for de neste trådene (med start() ) Å lage en en tråd-samling og legge tråder (og Futures) opp i den tar ca µs for første tråd og ca. 210 µs for neste tråd. Å bruke trådsikre heltall (AtomicInteger og AtomicIntegerArray) mot vanlige int og int[] tar vanligvis x så lang tid, men for mye bruk (> 10 6 ) tar det bare ca. 2x tid (det siste er sannynligvis en cache-effekt) En parallell løsning må alltid sammenlignes med hvor mye vi kunne ha gjort (f.eks sortert) sekvensielt på den samme tida! 10

11 Nye målinger i Java8 i 2015 metodekall-eks. mm. //Metodekall s ="Metodekall"; t = System.nanoTime(); k=neste(k); d = (double) ((System.nanoTime() -t)/1000.0); println(s+format.align(d,10,4)+"us. forste gang"); t = System.nanoTime(); for (int i = 0; i<n; i++) { k+=neste(k); d = (double) ((System.nanoTime() -t)/(n*1000.0)); println(s+format.align(d,10,4)+"us.snitt " + n+" ganger"); // Koden de andre tilfellene som ble testet ia = new int[100]; // new Array (t1 = new Thread(new Arbeider(3))).start(); // new Thread start&join() try{t1.join();catch (Exception e){ k= new C(k).les(); // lage Object C + metodekall k= new D(k).les(); // lage Object D+ metodekall ia[i%100] =i; k = ia[i%55]; // skriv i array // les fra array 11

12 Hva med i dag (Java 8) har kjøretidene endret seg? Tid første (us) Tid neste (us) Snitt tid 10 (us) Snitt tid (us) Speedup Metodekall new int[100] new Thread() start()+join() new C() + metodekall new D() + metodekall Ett Array write/read Konklusjoner:!) Ulik speedup. Best: å lage objekter, og metodekall 2) relativt lite speedup på arrayer Det er vår program som blir raskere, IKKE JVM (java) som tolker det bedre. De på det å lage objekter av en klasse C, gjør ikke noe for klasse D-objekter 12

13 Sammenlignet med Petters tider? Java8: Tid første (us) Java8 Snitt tid neste 10 (us) Java 6: Tid første (us) Java6: Snitt tid 16 (us) Uten join() Metodekall new int[100] new Thread() start()+join() new C() + metodekall new D() + metodekall Ett Array write/read Konklusjoner:!) Ulik speedup. Best: å lage objekter, og metodekall 2) relativt lite speedup på arrayer Det er vår program som blir raskere, IKKE JVM (java) som tolker det bedre. De på det å lage objekter av en klasse C, gjør ikke noe for klasse D-objekter 13

14 2) Generelt om rekursiv oppdeling av a[] i to deler void Rek (int [] a, int left, int right) { <del opp omradet a[left..right] > int deling = partition (a, left,right); if (deling - left > LIMIT ) Rek (a,left,deling-1); else <enkel løsning>; if (right - deling > LIMIT) Rek (a,deling, right); else <enkel løsning> void Rek(int [] a, int left, int right) { <del opp omradet a[left..right]> int deling = partition (a, left,right); Thread t1 = null, t2= null; if (deling - left > LIMIT ) t1 = new Thread (a,left,deling-1); else <enkel løsning>; if (right - deling > LIMIT) t2 = new Thread (a,deling, right); else <enkel løsning> try{ if (t1!=null)t1.join(); if (t2!=null)t2.join(); catch(exception e){..; 14

15 Hvor mange kall gjør vi i en rekursiv løsning? Anta Quicksort av n =2 k tall (k= 10 n = 1000, k= 20 n= 1 mill) Kalltreet vil på første nivå ha 2 lengder av 2 19, på neste: 4 = 2 2 hver med 2 18 og helt ned til nivå 20, hvor vi vil ha 2 20 kall hver med 1 = 2 0 element. I hele kalltreet gjør vi altså 2 millioner -1 kall for å sortere 1 mill tall! Bruker vi innstikksortering for n < 32 = 2 5 så får vi bare = 2 15 = kall. Metodekall tar : µs og kan også optimaliseres bort (og gis speedup >1) Å lage en tråd og starte den opp tar: ca.1500 µs, men ca. 180 µs for de neste trådene (med start() og join()) nivå: Vi kan IKKE bare erstatte rekursive kall med nye tråder i en rekursiv løsning! 15

16 Konklusjon om å parallellisere rekursjon Antall tråder må begrenses! I toppen av treet brukes tråder (til vi ikke har flere og kanskje litt mer) I resten av treet bruker vi sekvensiell løsning i hver tråd! Viktig også å kutte av nedre del av treet (her med insertsort) som å redusere treets størrelse drastisk (i antall noder) Vi har for n = gått fra: n sekv.tid(ms) para.tid(ms) Speedup Ren trådbasert Med insertsort Avkutting i toppen Speedup > 1 og ca x fortere enn ren oversettelse. 16

17 Drømmen om lage automatisk parallelliseing Parallellisering gir lang og vanskelig å lage kode Det finnes særlig to typer av sekvensielle programmer som tar lang tid: A) Med løkker (enkle, doble,..) B) Rekursive Drømmen er man bare helt automatisk, eller bare med noen få kommandoer kan oversette et sekvensielt program til et parallelt. Med løkker hadde vi bl.a HPFortran (Fortran90) som paralleliserte løkker (slo ikke helt an) Reursive metoder vi skal se på PRP (et system jeg har fått lager som hovedfagsoppgaver flere ganger siden ca. 1995) 17

18 PRP: Den grunnleggende ideen: Rekursjonstreet og treet av tråder er like, men Rekursjon Tråder 3 D 4 2 A 1 8 B C 5 E F G D A 1 2 B C E F G Dybde først Bredde først Tråder: - Kan ikke bruke svaret fra venstre-tråd til å lage parametere for høyre-tråd - Venter på trådene (og svaret ) først når begge trådene er sendt ut.. 18

19 Fra rekursjon til parallelle prosedyrer (metoder) Rekursjon Multikjerne CPU Kjerne 0 A Kjerne 1 A Kjerne 2 D B C E F G Kjerne3 D B C Kjerne 4 E F G 19

20 I Uke 9 så vi på å overføre Rekursjon til tråder - her fra Peter Eidsviks masteroppgave Vi skal nå automatisere det Vi lager en preprosessor: javaprp dvs. et Java-program som leser et annet Java-program og omformer det til et annet, gyldig Java-program (som er det parallelliserte programmet med tråder) For at JavaPRP skal kunne gjøre dette, må vi legge inn visse kommentarer i koden: Hvor er den rekursive metoden Hvor er de rekursive kallene Bare rekursive metoder med to eller flere kall, kan paralllelliseres. 20

21 Et eksempel før mer teori med en kjørbar sekvensiell Quicksort import java.util.random; class QuicksortProg{ public static void main(string[] args){ import java.util.random; int len = Integer.parseInt(args[0]); int [] tid = new int[11]; class QuicksortProg{ public for(int static i void = 0; main(string[] i < 11; i++){ args){ int len int[] = Integer.parseInt(args[0]); arr = new int[len]; for(int Random i = 0; i < r = 11; new i++){ Random(); int[] for(int arr = j new = 0; int[len]; j < arr.length; j++){ Random r = new Random(); arr[j] = r.nextint(len-1); for(int j = 0; j < arr.length; j++){ arr[j] = r.nextint(len-1); long start = System.nanoTime(); long int[] start k = System.nanoTime(); int[] k = new QuicksortCalc().quicksort (arr,0,arr.length-1); long timetakenns = System.nanoTime() - start; tid[i] = (int) timetakenns/ ; System.out.println(timeTakenNS/ ); new QuicksortCalc().quicksort (arr,0,arr.length-1); long timetakenns = System.nanoTime() - start; System.out.println(timeTakenNS/ ); tid = QuicksortCalc.insertSort(tid,0,10); System.out.println("Median sorteringstid for 11 gjennomlop:"+tid[5]+"ms. for n="+len); class QuicksortCalc{ int INSERT_LIM = 48; int[] quicksort (int[] a, int left, int right){ if (right-left < INSERT_LIM){ return insertsort(a,left,right); else{ int pivotvalue = a[(left + right) / 2]; swap(a, (left + right) / 2, right); int index = left; for (int i = left; i < right; i++) { if (a[i] <= pivotvalue) { swap(a, i, index); index++; swap(a, index, right); int index2 = index; while(index2 > left && a[index2] == pivotvalue){ index2--; a = quicksort (a, left, index2); a = quicksort (a, index + 1, right); return a; Nesten helt vanlig QuickSort vi har riktignok pakket den inn i en klasse Vi kompilerer og kjører den og tar tiden (11 ganger) 21

22 QuickSort av 10 mill tall (ca sek) sekvensielt M:\INF2440Para\PRP>java QuicksortProg Median sorteringstid for 11 gjennomlop:948ms. for n=

23 Nå legger vi til tre kommentarer så den kan preprosessereres over i en parallell versjon (/*REC*/ og /*FUNC*/ ): import java.util.random; class QuicksortProg{ public static void main(string[] args){ int len = Integer.parseInt(args[0]); int [] tid = new int[11]; for(int i = 0; i < 11; i++){ for(int i = 0; i < 11; i++){ int[] arr = new int[len]; Random r = new Random(); for(int j = 0; j < arr.length; j++){ arr[j] = r.nextint(len-1); long start = System.nanoTime(); int[] k = new QuicksortCalc().quicksort(arr,0,arr.length-1); long timetakenns = System.nanoTime() - start; tid[i] = (int) timetakenns/ ; System.out.println(timeTakenNS/ ); tid = QuicksortCalc.insertSort(tid,0,10); System.out.println("Median sorteringstid for 11 gjennomlop:"+tid[5]+"ms. for n="+len); class QuicksortCalc{ int INSERT_LIM = 48; /*FUNC*/ int[] quicksort(int[] a, int left, int right){ if (right-left < INSERT_LIM){ return insertsort(a,left,right); else{ int pivotvalue = a[(left + right) / 2]; swap(a, (left + right) / 2, right); int index = left; for (int i = left; i < right; i++) { if (a[i] <= pivotvalue) { swap(a, i, index); index++; swap(a, index, right); int index2 = index; while(index2 > left && a[index2] == pivotvalue){ index2--; /*REC*/ a = quicksort(a, left, index2); /*REC*/ a = quicksort(a, index + 1, right); return a; 23

24 Kompilér JavaPRP -systemet, så start det M:\INF2440Para\PRP>javac JavaPRP.java M:\INF2440Para\PRP>java JavaPRP Det starter et GUI-interface 24

25 25

26 Trykker: Choose a file 26

27 27

28 Trykket så Compile: - Kompilerte da den parallelliserte filen: QuicksortProgPara.java - Legger så inn parameter (10 mill) på kommandolinja og velger Execute. 28

29 Resultatet kommer i log-vinduet. -en OK speedup for den parallelle utførelsen: S=948/525= 1,80 29

30 Oversettelsen : Quicksort import java.util.random; class QuicksortProgPara{ public static void main(string[] args){ new Admin(args); class QuicksortProg{ public static void main(string[] args){ int len = Integer.parseInt(args[0]); for(int i = 0; i < 11; i++){ int[] arr = new int[len]; Random r = new Random(); for(int j = 0; j < arr.length; j++){ arr[j] = r.nextint(len-1); long start = System.nanoTime(); int[] k = new QuicksortCalc().quicksort (arr,0,arr.length-1); long timetakenns = System.nanoTime() - start; System.out.println(timeTakenNS/ ); Starten på brukerens kode (77 linjer) class Admin{ public Admin(String[] args){ initiateparallel(args); void initiateparallel(string[] args){ int len = Integer.parseInt(args[0]); for(int i = 0; i < 11; i++){ int[] arr = new int[len]; Random r = new Random(); for(int j = 0; j < arr.length; j++){ arr[j] = r.nextint(len-1); long start = System.nanoTime(); int[] k = startthreads (arr,0,arr.length-1); long timetakenns = System.nanoTime() - start System.out.println(timeTakenNS/ ); Starten på oversatt kode (245 linjer) 30

31 Dette kan også kjøres delvis linjeorientert Din sekvensielle rekursive løsning (som er annotert for PRP) heter MittProg.java 1) Hvis du ønsker det, kjør ditt egent program og notere eksekveringstiden. >javac MittProg.java >java MittProg ) Kompilér PRP-systemet (hvis du ikke har gjort det tidligere) >java javaprp.java 3) Oversett ditt program (MittProg.java) til et parallelt program (MittProgPara.java) dette må gjøres via GUI >java javaprp velg da MittProg.java og trykk Compile 4) Kjør det genererte parallelle programmet (MittProgPara.java) > java MittProgPara

32 PRP kan også kan parallelliseres et fasedelt program Et fasedelt PRP-program har flere faser som hver består av først en parallell rekursiv del og så en sekvensiell del (kan sløyfes). Da må brukeren beskrive det i en egen ADMIN metode: /*ADMIN*/ public int minadminmetode(...){ int svar = rekursivmetode1(...); sekvensiellkode1(); svar = rekursivmetode2(...); sekvensiellkode2(...); svar = rekursivmetode3(...); sekvensiellkode3(...); svar = rekursivmetode4(...); sekvensiellkode4(...); return svar; Innfører da to nye Kommentarkoder: /*ADMIN*/ og /*FUNC 1*/, /*FUNC 2*/, osv 32

33 Og hver av disse rekursive metodene er i hver sin klasse. class MittFaseProgram{ public static void main(string[] args){ <returverdi> svar = new MittFaseProgram().minAdminMetode(...); /*ADMIN*/ <returverdi> minadminmetode(...){ <returverdi> svar1 = new Fase1().rekursivMetode(...); sekvensiellkode1(...); <returverdi> svar2 = new Fase2().rekursivMetode(...); sekvensiellkode2(...); return...; void sekvensiellkode1(...){ void sekvensiellkode2(...){ // end MittFaseProgram class Fase1{ /*FUNC 1*/ <returverdi> rekursivmetode(...){ /*REC*/ <returverdi> svar1 = rekursivmetode(...); /*REC*/ <returverdi> svar2 = rekursivmetode(...); return...; class Fase2{ /*FUNC 2*/ <returverdi> rekursivmetode(...){ /*REC*/ <returverdi> svar1 = rekursivmetode(...); /*REC*/ <returverdi> svar2 = rekursivmetode(...); /*REC*/ <returverdi> svar3 = rekursivmetode(...); return...; 33

34 Hvordan gjøres dette? Administrator arbeider modell Oppgaver legges ut i et fellesområde Arbeiderne tar oppgaver og legger svar tilbake i fellesområdet 34

35 Fra sekvensielt program til parallelt: Figur 5: Fra det sekvensielle programmet, gjennom Java PRP og til det parallelle resultatet. Det nye, parallelle programmet vil inneholde en klasse for main, Admin, Worker pluss eventuelt andre klasser fra det sekvensielle programmet, som ikke er en del av parallelliseringen. 35

36 Eksempel: Parallellisering med to tråder PRP: Toppen kjøres med tråder bredde-først, så går hver tråd over til dybde først og vanlige rekursive kall Figur 6: Visualisering av treet der vi ønsker å parallellisere med to tråder. Toppen av treet tilsvarer bredde først traversering til vi ender på, i dette tilfelle, to subtrær. Disse to subtrærne vil traverseres dybde først 36

37 Fra bredde først til dybde først og så vanlig rekursjon Trådene blir når de lages lagt i en LenkaListe (FIFO-kø) Så tas den første(a) i køen ut, og den lager to nye barne-tråder (B,C) som legges i lista. A legges i en stack (LIFO-kø) Neste på i Lista (B) tas ut og dens nye barne-tråder (D,E) legges inn i Lista B legges på stacken, osv. Bunnen av bredde-først ligger da på toppen av stacken Figur 7: Administratoren oppretter datastrukturen til arbeiderne. Figur 8: Datastrukturen etter at Figur 7 er ferdig. 37

38 Kjøring og retur av verdier Når trådene er brukt opp, pop-es stacken (f.eks øverst er E) og vanlige rekursive kall gjøres fra E, neste pop-es osv. til stacken er tom Svarene fra ethvert element som tas av stacken legges i en tabell og plukkes opp av den som kalte elementet. Den som kalte, kan så fortsette sin kode og selv returnere sitt svar,.. Figur 9: Arbeiderstacken beregner seg innover til roten. 38

39 Svarene genereres nederst stacken og svarene propaganderer oppover til første kall på den rekursive metoden 39

40 Hvorfor dette med bredde-og dybde-først? Kunne vi ikke bare startet trådene og latt de alle gå i parallell? NEI fordi: Vi har lovet rekursiv semantikk (virkemåte) i den parallelle. Vi skal derfor oversette det rekursive programmet slik at det gir alltid samme resultat parallelt. Eks Quicksort: Anta at vi parallelliserer ned til nivå 3 i treet Hvis nivå 2 og 3 går samtidig, vil dette gå galt fordi de prøver begge lagene og flytte på de samme elementene i a[]. 40

41 Hva gjøres teknisk vår program består av (minst) to klasser Klassen med main og en klasse som inneholder den rekursive metoden Er det flere rekursive metoder som skal parallelliseres, så skal de være inne i hver sin klasse Det genererte programmet består av minst følgende klasser: Admin Worker Kort og greit: Det oversatte programmet xxxxxpara.java skal vi egentlig ikke se på og spesielt ikke endre. Det bare virker og parallelliserer etter visse prinsipper. 41

42 Eksempel 2: Største tall i en array class Search{ int k = 5; /*FUNC*/ int findlargest(int[] arr, int start, int end){ class LargestNumber{ public static void main(string[] args){ int len = Integer.parseInt(args[0]); int cores = Runtime.getRuntime().availableProcessors(); int[] arr = new int[len]; Random r = new Random(); for(int i = 0; i < arr.length; i++){ arr[i] = r.nextint(len-1); long t = System.nanoTime(); /*CALL*/ int k = (new Search()).findLargest(arr,0,arr.length); Double t2 =(System.nanoTime()-t)/ ; System.out.println("Largest number is " + k+ ", paa:"+t2+"ms."); if((end-start) < k){ return largest_basecase(arr,start,end); int half = (end-start) / 2; int mid = start + half; /*REC*/ int leftval = findlargest (arr,start,mid); /*REC*/ int rightval = findlargest (arr,mid+1,end); if(leftval > rightval) return leftval; return rightval; int largest_basecase(int[] arr, int start, int end){ int largest = 0; for(int i = start; i < end; i++){ if(arr[i] > largest){ largest = arr[i]; return largest; 42

43 NB. for å få kjøretiden riktig for det parallelle programmet N.B det som oppgis som «program execution time» er med overhead fra GUI løsningen. Fra GUI-en: Opening: LargestNumber.java Created: LargestNumberPara.java javac LargestNumberPara.java java LargestNumberPara Largest number is , paa: ms. program execution time: ms Kjør det i linjemodus (n= 100 mill.): M:\INF2440Para\PRP>java LargestNumberPara Largest number is , paa: ms. M:\INF2440Para\PRP>java LargestNumber Largest number is , paa: ms. 43

44 Hva så vi på i Uke10 Automatisk parallellisering av rekursjon PRP- Parallel Recursive Procedures Nåværende løsning (Java, multicore CPU, felles hukommelse) implementasjon: Peter L. Eidsvik Demo av to eksempler kjøring Hvordan ikke gå i fella: Et Rekursivt kall = En Tråd Halvautomatisk oversettelse (hint/kommandoer fra kommentarer) Hvordan virker en kompilator (preprosessor) for automatisk parallellisering Prinsipper ( bredde-først og dybde-først traversering av r-treet) Datastruktur Eksekvering Krav til et program som skal bruke PRP Slik bruker du PRP Ukeoppgave neste uke. 44

INF2440 Uke 10, v2014 : Arne Maus OMS, Inst. for informatikk

INF2440 Uke 10, v2014 : Arne Maus OMS, Inst. for informatikk INF2440 Uke 10, v2014 : Arne Maus OMS, Inst. for informatikk 1 Hva så vi på i uke 9 Et sitat om tidsforbruk ved faktorisering En presisering av Oblig2. Om en feil i Java ved tidtaking (tid == 0??) Hvor

Detaljer

INF2440 Uke 10, v2016 : Arne Maus PSE, Inst. for informatikk

INF2440 Uke 10, v2016 : Arne Maus PSE, Inst. for informatikk INF2440 Uke 10, v2016 : Arne Maus PSE, Inst. for informatikk 1 Hva så vi på i uke 9 Et sitat om tidsforbruk ved faktorisering Om en feil i Java 7 ved tidtaking Hvordan parallellisere rekursive algoritmer

Detaljer

INF2440 Uke 10, v2017 : Arne Maus PSE, Inst. for informatikk

INF2440 Uke 10, v2017 : Arne Maus PSE, Inst. for informatikk INF2440 Uke 10, v2017 : Arne Maus PSE, Inst. for informatikk 1 Hva skal vi se på i uke 9: 1. Om oblig3 generell Radix-sortering (MultiRadix) Dette er en variant av Radix-sortering som automatisk prøver

Detaljer

INF2440 Uke 10, v2018 : Arne Maus PSE, Inst. for informatikk

INF2440 Uke 10, v2018 : Arne Maus PSE, Inst. for informatikk INF2440 Uke 10, v2018 : Arne Maus PSE, Inst. for informatikk 1 Hva så på i uke 9: Et sitat om tidsforbruk ved faktorisering Om en feil i Java ved tidtaking (tid == 0??) Hvordan parallellisere rekursive

Detaljer

INF2440 Uke 8, v2017. Arne Maus PSE, Inst. for informatikk

INF2440 Uke 8, v2017. Arne Maus PSE, Inst. for informatikk INF2440 Uke 8, v2017 Arne Maus PSE, Inst. for informatikk 1 Hva har vi sett på i uke 7: 1. Svar på et oblig2-spørsmål 2. Hvilken orden O() har Eratosthenes Sil? 3. Hvordan parallellisere Oblig2 - alternativer

Detaljer

INF2440 Uke 9, v2014 : Arne Maus OMS, Inst. for informatikk

INF2440 Uke 9, v2014 : Arne Maus OMS, Inst. for informatikk INF2440 Uke 9, v2014 : Arne Maus OMS, Inst. for informatikk 1 Hva har vi sett på i uke 8: 1. En effektiv Threadpool? Executors.newFixedThreadPool 2. Mer om effektivitet og JIT-kompilering! 3. Om et problem

Detaljer

Java PRP brukermanual

Java PRP brukermanual Java PRP brukermanual 1.1 Introduksjon 1.1.1 Hva er Java PRP Java PRP (Parallel Recursive Procedure) gir oss muligheten til automatisk parallellisering av programmer, som baserer seg på noen rekursive

Detaljer

INF2440 Uke 9, v2015 : Arne Maus PSE, Inst. for informatikk

INF2440 Uke 9, v2015 : Arne Maus PSE, Inst. for informatikk INF2440 Uke 9, v2015 : Arne Maus PSE, Inst. for informatikk 1 Hva har vi sett på i uke 8: 1. En første gjennomgang av Oblig3 Den sekvensielle løsningen m. tips 2. En effektiv Threadpool? Executors.newFixedThreadPool

Detaljer

INF NOV PARALLELL SORTERING. Arne Maus, PSE, Ifi

INF NOV PARALLELL SORTERING. Arne Maus, PSE, Ifi INF2220-2. NOV. 2017 PARALLELL SORTERING Arne Maus, PSE, Ifi 2 Dagens forelesning Hva er et parallelt program med tråder (i Java) Typer av parallelle programmer her vil vi ha raskere programmer Hva er

Detaljer

I et Java-program må programmøren lage og starte hver tråd som programmet bruker. Er dette korrekt? Velg ett alternativ

I et Java-program må programmøren lage og starte hver tråd som programmet bruker. Er dette korrekt? Velg ett alternativ INF2440-V18 Information INF2440 Vår 2018 eksamen Dato og tid: 11. juni 2018 09:00. Varighet: 4 timer Hjelpemidler: Alt skriftlig materiale er tillatt. Ingen elektroniske hjelpemidler er tillatt. Powerpoint

Detaljer

INF2440 Uke 13, v2015. Arne Maus PSE, Inst. for informatikk

INF2440 Uke 13, v2015. Arne Maus PSE, Inst. for informatikk INF2440 Uke 13, v2015 Arne Maus PSE, Inst. for informatikk 1 Hva så vi på i Uke 12 I) Om «siffere» i Om Oblig 4 II) Om optimalisering av Oblig2 nye tall med Java8 III) Java8 Forbedringer Feilen med tidtaking

Detaljer

INF2440 Prøveeksamen, løsningsforslag, 20 mai Arne Maus PSE, Inst. for informatikk

INF2440 Prøveeksamen, løsningsforslag, 20 mai Arne Maus PSE, Inst. for informatikk INF2440 Prøveeksamen, løsningsforslag, 20 mai 2015 Arne Maus PSE, Inst. for informatikk 1 Prøveeksamen Er en modell av hva du får til eksamen: - like mange (+-1) oppgaver som eksamen og nesten samme type

Detaljer

INF2440 Uke 13, v2014. Arne Maus OMS, Inst. for informatikk

INF2440 Uke 13, v2014. Arne Maus OMS, Inst. for informatikk INF2440 Uke 13, v2014 Arne Maus OMS, Inst. for informatikk 1 Hva så vi på i Uke 12 I) Om «siffere» i Om Oblig 3 II) Om optimalisering av Oblig2 nye tall med Java8 III) Java8 Forbedringer Feilen med tidtaking

Detaljer

INF2440 Eksamen 2016 løsningsforslag. Arne Maus, PSE ifi, UiO

INF2440 Eksamen 2016 løsningsforslag. Arne Maus, PSE ifi, UiO INF2440 Eksamen 2016 løsningsforslag Arne Maus, PSE ifi, UiO 1 Oppgave 1 (10 poeng) a) Beskriv meget kortfattet de to viktigste egenskapene ved tråder i et Java-program. 1. En tråd er sekvensielt programdel

Detaljer

INF3030, Uke 3, våren 2019 Regler for parallelle programmer, mer om cache og Matrise-multiplikasjon. Arne Maus / Eric Jul PSE, Inst.

INF3030, Uke 3, våren 2019 Regler for parallelle programmer, mer om cache og Matrise-multiplikasjon. Arne Maus / Eric Jul PSE, Inst. INF3030, Uke 3, våren 2019 Regler for parallelle programmer, mer om cache og Matrise-multiplikasjon Arne Maus / Eric Jul PSE, Inst. for informatikk 1 Hva har vi sett på i Uke2 Én stygg feil vi kan gjøre:

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i: INF2440 Effektiv parallellprogrammering Eksamensdag: 2. juni 2015 Tidspunkter: 09.00 13.00 Oppgavesettet er på: 3 sider + 2 sider

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i: INF2440 Effektiv parallellprogrammering Eksamensdag: 7. juni 2016 Tidspunkter: 09.00 13.00 Oppgavesettet er på: 3 sider + 1 side

Detaljer

INF2440 Uke 12, v2014. Arne Maus OMS, Inst. for informatikk

INF2440 Uke 12, v2014. Arne Maus OMS, Inst. for informatikk INF2440 Uke 12, v2014 Arne Maus OMS, Inst. for informatikk 1 Fra hjemmesida til INF2440: To trykkfeil rettet i Oblig3 Rediger 1) Stegene i algoritmene ble i koden referert som a,b,c,c - skal selvsagt være:

Detaljer

Fig1. Den konvekse innhyllinga av 100 tilfeldige punkter i planet (de samme som nyttes i oppgaven.)

Fig1. Den konvekse innhyllinga av 100 tilfeldige punkter i planet (de samme som nyttes i oppgaven.) Oblig3 i INF2440 våren 2015-ver3. Den konvekse innhyllinga til en punktmengde - et rekursivt geometrisk problem. Innleveringsfrist fredag 27. mars kl. 23.59 En punktmengde P i planet består av n forskjellige

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Prøveeksamen i : INF2440 Praktisk parallell programmering Prøveeksamensdag : 26. mai 2014 Tidspunkter: 11.00 Utdeling av prøveeksamen 15:15

Detaljer

Prøveeksamen INF2440 v Arne Maus PSE, Inst. for informatikk

Prøveeksamen INF2440 v Arne Maus PSE, Inst. for informatikk Prøveeksamen INF2440 v 2016 Arne Maus PSE, Inst. for informatikk 1 Oppgave 1 (10 poeng) Forklar hva som skjer ved en synkronisering: a) Når to tråder synkroniserer på samme synkroniseringsobjekt (f.eks

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Prøveeksamen i: INF2440 Effektiv parallellprogrammering Prøveeksamensdag: 1. juni 2016 Tidspunkter: 09.00 16.00 Oppgavesettet er på: 4 sider

Detaljer

INF2440 Uke 8, v2015 : Om Oblig 3, Ulike Threadpools, JIT-kompilering. Arne Maus PSE, Inst. for informatikk

INF2440 Uke 8, v2015 : Om Oblig 3, Ulike Threadpools, JIT-kompilering. Arne Maus PSE, Inst. for informatikk INF2440 Uke 8, v2015 : Om Oblig 3, Ulike Threadpools, JIT-kompilering Arne Maus PSE, Inst. for informatikk 1 Hva har vi sett på i uke 7 1. Mer om matrisemultiplikasjon 1. Radvis (ikke kolonnevis) beregning

Detaljer

INF2440 Uke 11, v2014 om parallell debugging og Goldbachs problem, om Oblig 3. Arne Maus OMS, Inst. for informatikk

INF2440 Uke 11, v2014 om parallell debugging og Goldbachs problem, om Oblig 3. Arne Maus OMS, Inst. for informatikk INF2440 Uke 11, v2014 om parallell debugging og Goldbachs problem, om Oblig 3 Arne Maus OMS, Inst. for informatikk 1 Fra hjemmesida til INF2440: Plan for resten av semesteret: Forelesninger: 28.mars (i

Detaljer

INF2440 Uke 7, våren2015. Arne Maus PSE, Inst. for informatikk

INF2440 Uke 7, våren2015. Arne Maus PSE, Inst. for informatikk INF2440 Uke 7, våren2015 Arne Maus PSE, Inst. for informatikk 1 Hva så vi på i Uke (4,5 og) 6 1. Kommentarer til svar på ukeoppgaven om matrisemultiplikasjon 1. Hvorfor disse gode resultatene (speedup

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i : INF2440 Praktisk parallell programmering Eksamensdag : 2. juni 2014 Tidspunkter: 14.30 Oppgavesettet er på : 4 sider Vedlegg

Detaljer

INF2440 Uke 4, våren2014 Avsluttende om matrisemultiplikasjon og The Java Memory Model + bedre forklaring Radix. Arne Maus OMS, Inst.

INF2440 Uke 4, våren2014 Avsluttende om matrisemultiplikasjon og The Java Memory Model + bedre forklaring Radix. Arne Maus OMS, Inst. INF Uke, våren Avsluttende om matrisemultiplikasjon og The Java Memory Model + bedre forklaring Radix Arne Maus OMS, Inst. for informatikk Hva så vi på i uke. Presisering av hva som er pensum. Samtidig

Detaljer

Arne Maus OMS, Inst. for informatikk

Arne Maus OMS, Inst. for informatikk INF2440 Uke 5, våren2014 Sluttkommentarer om Matrisemultiplikasjon, Modellkode for parallelle systemer, Vranglås + evt. Oppdeling av et problem for parallellisering Arne Maus OMS, Inst. for informatikk

Detaljer

INF2440 Effektiv parallellprogrammering Uke 2 -, våren2015 - tidtaking. Arne Maus PSE, Inst. for informatikk

INF2440 Effektiv parallellprogrammering Uke 2 -, våren2015 - tidtaking. Arne Maus PSE, Inst. for informatikk INF2440 Effektiv parallellprogrammering Uke 2 -, våren2015 - tidtaking Arne Maus PSE, Inst. for informatikk 1 Oppsummering Uke1 Vi har gjennomgått hvorfor vi får flere-kjerne CPUer Tråder er måten som

Detaljer

Sortering med tråder - Quicksort

Sortering med tråder - Quicksort Sortering med tråder - Quicksort Skisser til to programmer INF1010 våren 2016 Stein Gjessing Institutt for informatikk Universitetet i Oslo Sortering som tema, slikt som valg av sorteringsmetode, hastigheten

Detaljer

Rekursjon. (Big Java kapittel 13) Fra Urban dictionary: recursion see recursion. IN1010 uke 8 våren Dag Langmyhr

Rekursjon. (Big Java kapittel 13) Fra Urban dictionary: recursion see recursion. IN1010 uke 8 våren Dag Langmyhr Fakultet Rekursjon Fibonacci Sjakk Hanois tårn Lister Oppsummering Rekursjon (Big Java kapittel 13) Fra Urban dictionary: recursion see recursion. n! = n x n-1 x n-2 x... x 2 x 1 Å beregne fakultet Den

Detaljer

Rekursjon. (Big Java kapittel 13) Fra Urban dictionary: recursion see recursion. IN1010 uke 8 våren Dag Langmyhr

Rekursjon. (Big Java kapittel 13) Fra Urban dictionary: recursion see recursion. IN1010 uke 8 våren Dag Langmyhr Fakultet Bredde Rekursjon Fibonacci Sjakk Hanois tårn Lister Oppsummering Rekursjon (Big Java kapittel 13) Fra Urban dictionary: recursion see recursion. n! = n x n-1 x n-2 x... x 2 x 1 Å beregne fakultet

Detaljer

INF2440 Effektiv parallellprogrammering Uke 1, våren Arne Maus PSE, Inst. for informatikk

INF2440 Effektiv parallellprogrammering Uke 1, våren Arne Maus PSE, Inst. for informatikk INF2440 Effektiv parallellprogrammering Uke 1, våren 2017 Arne Maus PSE, Inst. for informatikk 1 Hva vi skal lære om i dette kurset: Lage parallelle programmer (algoritmer) som er: Riktige Parallelle programmer

Detaljer

INF2440 Uke 7, våren2017. Arne Maus PSE, Inst. for informatikk

INF2440 Uke 7, våren2017. Arne Maus PSE, Inst. for informatikk INF2440 Uke 7, våren2017 Arne Maus PSE, Inst. for informatikk 1 Hva så vi på i uke 6 1. Hva er raskest: Modell2 eller Modell3 kode? 2. Avslutning om matrisemultiplikasjon 1. Radvis (ikke kolonnevis) beregning

Detaljer

Kap 19. Mer om parallelle programmer i Java og Kvikksort

Kap 19. Mer om parallelle programmer i Java og Kvikksort Arne Maus, 5.april 2011: Kap 19. Mer om parallelle programmer i Java og Kvikksort Parallell programmering er vanskelig, og det er derfor utviklet flere synkroniseringsmåter og biblioteker for mer strukturert

Detaljer

Fra Python til Java, del 2

Fra Python til Java, del 2 Fra Python til Java, del 2 Hvordan kjøre Java? På Ifis maskiner På egen maskin Et eksempel Array-er For-setninger Lesing og skriving Metoder Biblioteket Hva trenger vi egentlig? Å kjøre Java For å kunne

Detaljer

INF2440, Uke 3, våren2015 Regler for parallelle programmer, mer om cache og Radix-algoritmen. Arne Maus OMS, Inst. for informatikk

INF2440, Uke 3, våren2015 Regler for parallelle programmer, mer om cache og Radix-algoritmen. Arne Maus OMS, Inst. for informatikk INF2440, Uke 3, våren2015 Regler for parallelle programmer, mer om cache og Radix-algoritmen Arne Maus OMS, Inst. for informatikk 1 Hva har vi sett på i Uke2 I) Tre måter å avslutte tråder vi har startet.

Detaljer

EKSAMEN. Dato: 28. mai 2018 Eksamenstid: 09:00 13:00

EKSAMEN. Dato: 28. mai 2018 Eksamenstid: 09:00 13:00 EKSAMEN Emnekode: ITF20006 Emne: Algoritmer og datastrukturer Dato: 28. mai 2018 Eksamenstid: 09:00 13:00 Hjelpemidler: Alle trykte og skrevne Faglærer: Jan Høiberg Om eksamensoppgavene: Oppgavesettet

Detaljer

INF2440 Effektiv parallellprogrammering Uke 1, våren Arne Maus PSE, Inst. for informatikk

INF2440 Effektiv parallellprogrammering Uke 1, våren Arne Maus PSE, Inst. for informatikk INF2440 Effektiv parallellprogrammering Uke 1, våren 2016 Arne Maus PSE, Inst. for informatikk 1 Hva vi skal lære om i dette kurset: Lage parallelle programmer (algoritmer) som er: Riktige Parallelle programmer

Detaljer

INF2440 Uke 13, v2017. Arne Maus PSE, Inst. for informatikk

INF2440 Uke 13, v2017. Arne Maus PSE, Inst. for informatikk INF2440 Uke 13, v2017 Arne Maus PSE, Inst. for informatikk 1 Hva så vi på i Uke 12 Om å lage en egen ArrayList for heltall Hvorfor og hvordan (kan lage arrayer av IntList) For oblig 4 Debugging av Parallelle

Detaljer

Innhold. Forord Det første programmet Variabler, tilordninger og uttrykk Innlesing og utskrift...49

Innhold. Forord Det første programmet Variabler, tilordninger og uttrykk Innlesing og utskrift...49 Innhold Forord...5 1 Det første programmet...15 1.1 Å kommunisere med en datamaskin 16 1.2 Programmeringsspråk 17 1.3 Et program som skriver på skjermen 18 1.4 Kompilering og kjøring 19 1.5 Kommentarer

Detaljer

INF2220: Forelesning 1. Praktisk informasjon Analyse av algoritmer (kapittel 2) (Binær)trær (kapittel )

INF2220: Forelesning 1. Praktisk informasjon Analyse av algoritmer (kapittel 2) (Binær)trær (kapittel ) INF2220: Forelesning 1 Praktisk informasjon Analyse av algoritmer (kapittel 2) (Binær)trær (kapittel 4.1-4.3 + 4.6) PRAKTISK INFORMASJON 2 Praktisk informasjon Kursansvarlige Ragnhild Kobro Runde (ragnhilk@ifi.uio.no)

Detaljer

UNIVERSITETET I OSLO Institutt for informatikk. PRP-2014: Parallelle, faseoppdelte og rekursive algoritmer. Masteroppgave. Peter Ludvik Eidsvik

UNIVERSITETET I OSLO Institutt for informatikk. PRP-2014: Parallelle, faseoppdelte og rekursive algoritmer. Masteroppgave. Peter Ludvik Eidsvik UNIVERSITETET I OSLO Institutt for informatikk PRP-2014: Parallelle, faseoppdelte og rekursive algoritmer Masteroppgave Peter Ludvik Eidsvik 27. april 2014 Sammendrag Parallell programmering blir mer og

Detaljer

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr IN1010 Fra Python til Java En introduksjon til programmeringsspråkenes verden dag@ifi.uio.no Oversikt Introduksjon Python Java Noe er likt Noe bare ser anderledes ut Noe er helt forskjellig Et par eksempler

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i: INF2440 Effektiv parallellprogrammering Eksamensdag: 2. juni 2015 Tidspunkter: 09.00 13.00 Oppgavesettet er på: 3 sider + 2 sider

Detaljer

INF2440 Uke 5, våren2016. Arne Maus PSE, Inst. for informatikk

INF2440 Uke 5, våren2016. Arne Maus PSE, Inst. for informatikk INF2440 Uke 5, våren2016 Arne Maus PSE, Inst. for informatikk 1 Hva så vi på i Uke4 1. Kommentarer til svar på ukeoppgaven om matrisemultiplikasjon 1. Hvorfor disse gode resultatene (speedup > 40) 2. Hvordan

Detaljer

INF2440 Uke 6, våren2014 Mer om oppdeling av et problem for parallellisering, mye om primtall + thread-safe. Arne Maus OMS, Inst.

INF2440 Uke 6, våren2014 Mer om oppdeling av et problem for parallellisering, mye om primtall + thread-safe. Arne Maus OMS, Inst. INF2440 Uke 6, våren2014 Mer om oppdeling av et problem for parallellisering, mye om primtall + thread-safe Arne Maus OMS, Inst. for informatikk 1 Oppsummering Uke1 Vi har gjennomgått hvorfor vi får flere-kjerne

Detaljer

INF2440 Uke 13, v2016. Arne Maus PSE, Inst. for informatikk

INF2440 Uke 13, v2016. Arne Maus PSE, Inst. for informatikk INF2440 Uke 13, v2016 Arne Maus PSE, Inst. for informatikk 1 Hva så vi på i Uke 12 Om å lage en egen ArrayList for heltall Hvorfor og hvordan (kan lage arrayer av IntList) For oblig 4 Debugging av Parallelle

Detaljer

Løsnings forslag i java In115, Våren 1999

Løsnings forslag i java In115, Våren 1999 Løsnings forslag i java In115, Våren 1999 Oppgave 1a Input sekvensen er: 9, 3, 1, 3, 4, 5, 1, 6, 4, 1, 2 Etter sortering av det første, midterste og siste elementet, har vi følgende: 2, 3, 1, 3, 4, 1,

Detaljer

INF2440 Uke 11, v2017 om Goldbachs problem og Oblig 2,3. Arne Maus PSE, Inst. for informatikk

INF2440 Uke 11, v2017 om Goldbachs problem og Oblig 2,3. Arne Maus PSE, Inst. for informatikk INF2440 Uke 11, v2017 om Goldbachs problem og Oblig 2,3 Arne Maus PSE, Inst. for informatikk 1 Fra hjemmesida til INF2440: Plan for resten av semesteret: Forelesninger: 29. Mars (i dag), 5.april, 19.april,

Detaljer

INF1000 : Forelesning 4

INF1000 : Forelesning 4 INF1000 : Forelesning 4 Kort repetisjon av doble (nestede) løkker Mer om 1D-arrayer Introduksjon til 2D-arrayer Metoder Ole Christian Lingjærde Biomedisinsk forskningsgruppe Institutt for informatikk Universitetet

Detaljer

i=0 i=1 Repetisjon: nesting av løkker INF1000 : Forelesning 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker j=0 j=1 j=2 j=3 j=4

i=0 i=1 Repetisjon: nesting av løkker INF1000 : Forelesning 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker j=0 j=1 j=2 j=3 j=4 Repetisjon: nesting av løkker Kort repetisjon av doble (nestede) løkker Mer om D-arrayer Introduksjon til D-arrayer Metoder Ole Christian Lingjærde Biomedisinsk forskningsgruppe Institutt for informatikk

Detaljer

INF2220 høsten 2017, 12. okt.

INF2220 høsten 2017, 12. okt. INF høsten 7,. okt. Sortering (kap. 7.) sekvensiell sortering I Arne Maus, Gruppen for Programmering og Software Engineering (PSE) Inst. for informatikk, Univ i Oslo Essensen av INF Lære et sett av gode

Detaljer

INF2440, Uke 3, våren2014 Regler for parallelle programmer, mer om cache og Radix-algoritmen. Arne Maus OMS, Inst. for informatikk

INF2440, Uke 3, våren2014 Regler for parallelle programmer, mer om cache og Radix-algoritmen. Arne Maus OMS, Inst. for informatikk INF2440, Uke 3, våren2014 Regler for parallelle programmer, mer om cache og Radix-algoritmen Arne Maus OMS, Inst. for informatikk 1 Hva har vi sett på i Uke2 I) Tre måter å avslutte tråder vi har startet.

Detaljer

Binære søketrær. En ordnet datastruktur med raske oppslag. Sigmund Hansen

Binære søketrær. En ordnet datastruktur med raske oppslag. Sigmund Hansen Binære søketrær En ordnet datastruktur med raske oppslag Sigmund Hansen Lister og trær Rekke (array): 1 2 3 4 Lenket liste (dobbelt-lenket): 1 2 3 4 Binært søketre: 3 1 4 2 Binære

Detaljer

Binære søketrær. Et notat for INF1010 Stein Michael Storleer 16. mai 2013

Binære søketrær. Et notat for INF1010 Stein Michael Storleer 16. mai 2013 Binære søketrær Et notat for INF Stein Michael Storleer 6. mai 3 Dette notatet er nyskrevet og inneholder sikkert feil. Disse vil bli fortløpende rettet og datoen over blir oppdatert samtidig. Hvis du

Detaljer

Algoritmer og Datastrukturer

Algoritmer og Datastrukturer Eksamen i Algoritmer og Datastrukturer IAI 21899 Høgskolen i Østfold Avdeling for informatikk og automatisering Lørdag 15. desember 2001, kl. 09.00-14.00 Hjelpemidler: Alle trykte og skrevne hjelpemidler.

Detaljer

INF1010 Rekursive metoder, binære søketrær. Algoritmer: Mer om rekursive kall mellom objekter Ny datastruktur: binært tre

INF1010 Rekursive metoder, binære søketrær. Algoritmer: Mer om rekursive kall mellom objekter Ny datastruktur: binært tre INF1010 Rekursive metoder, binære søketrær Algoritmer: Mer om rekursive kall mellom objekter Ny datastruktur: binært tre public void skrivutmeg ( ) { System. out. println (navn + " er venn med " + minbestevennheter

Detaljer

Forkurs INF1010. Dag 1. Andreas Færøvig Olsen Tuva Kristine Thoresen

Forkurs INF1010. Dag 1. Andreas Færøvig Olsen Tuva Kristine Thoresen Forkurs INF1010 Dag 1 Andreas Færøvig Olsen (andrefol@ifi.uio.no) Tuva Kristine Thoresen (tuvakt@ifi.uio.no) Institutt for Informatikk, 6. januar 2014 Forkurs INF1010 - dag 1 Hello, World! Typer Input/output

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i INF1010 Objektorientert programmering Dato: 9. juni 2016 Tid for eksamen: 09.00 15.00 (6 timer) Oppgavesettet er på 7 sider. Vedlegg:

Detaljer

Ny/utsatt EKSAMEN. Dato: 5. januar 2018 Eksamenstid: 09:00 13:00

Ny/utsatt EKSAMEN. Dato: 5. januar 2018 Eksamenstid: 09:00 13:00 Ny/utsatt EKSAMEN Emnekode: ITF20006 Emne: Algoritmer og datastrukturer Dato: 5. januar 2018 Eksamenstid: 09:00 13:00 Hjelpemidler: Alle trykte og skrevne Faglærer: Jan Høiberg Om eksamensoppgavene: Oppgavesettet

Detaljer

Repetisjon: Statiske språk uten rekursive metoder (C1 og C2) Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

Repetisjon: Statiske språk uten rekursive metoder (C1 og C2) Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7) Dagens tema Kjøresystemer (Ghezzi&Jazayeri.6,.7) Repetisjon Språk med rekursjon (C3) og blokker (C4) Statisk link Dynamisk allokering (C5) Parameteroverføring 1/5 Repetisjon: Statiske språk uten rekursive

Detaljer

Rekursjon. Binærsøk. Hanois tårn.

Rekursjon. Binærsøk. Hanois tårn. Rekursjon Binærsøk. Hanois tårn. Hvorfor sortering (og søking) er viktig i programmering «orden» i dataene vi blir fort lei av å lete poleksempel internett «alt» er søking og sortering alternativer til

Detaljer

Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7) Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7) Repetisjon Språk med rekursjon (C3) og blokker (C4) Statisk link Dynamisk allokering (C5) Parameteroverføring 1/25 Forelesning 11 5.11.2003 Repetisjon:

Detaljer

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5) Dagens tema Litt mer om vanlige lister Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5) Nyttige varianter av lister: Stabler («stacks») (Big Java 15.5.1) Køer («queues») (Big Java 15.5.2)

Detaljer

INF2440 Uke 4, v2017 Om å samle parallelle svar, matrisemultiplikasjon og The Java Memory Model + evt bedre forklaring Radix

INF2440 Uke 4, v2017 Om å samle parallelle svar, matrisemultiplikasjon og The Java Memory Model + evt bedre forklaring Radix INF Uke, v7 Om å samle parallelle svar, matrisemultiplikasjon og The Java Memory Model + evt bedre forklaring Radix Arne Maus PSE, Inst. for informatikk Hva så vi på i uke. Presisering av hva som er pensum.

Detaljer

MER OM PARALLELLE PROGRAMMER I JAVA OG KVIKKSORT

MER OM PARALLELLE PROGRAMMER I JAVA OG KVIKKSORT {Arne Maus, 23. mai 2011 Kapittel 19 MER OM PARALLELLE PROGRAMMER I JAVA OG KVIKKSORT Parallell programmering er vanskelig, og det er derfor utviklet flere synkroniseringsmåter og biblioteker for mer strukturert

Detaljer

Rekursiv programmering

Rekursiv programmering Rekursiv programmering Babushka-dukker En russisk Babushkadukke er en sekvens av like dukker inne i hverandre, som kan åpnes Hver gang en dukke åpnes er det en mindre utgave av dukken inni, inntil man

Detaljer

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5) Dagens tema Litt mer om vanlige lister Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5) Nyttige varianter av lister: Stabler («stacks») (Big Java 15.5.1) Køer («queues») (Big Java 15.5.2)

Detaljer

i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4

i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4 Forelesning inf - Java 4 Repetisjon: arrayer Tema: Løkker Arrayer Metoder Ole Christian Lingjærde,. september Deklarere og opprette array - eksempler: int[] a = new int[]; String[] a = new String[]; I

Detaljer

Forelesning inf Java 4

Forelesning inf Java 4 Forelesning inf1000 - Java 4 Tema: Løkker Arrayer Metoder Ole Christian Lingjærde, 12. september 2012 Ole Chr. Lingjærde Institutt for informatikk, 29. august 2012 1 Repetisjon: arrayer Deklarere og opprette

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i: INF 2220 Algoritmer og datastrukturer Eksamensdag: 8. desember 2016 Tid for eksamen: 09:00 13:00 (4 timer) Oppgavesettet er på:

Detaljer

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Dagens tema Lister og generiske klasser, del I Array-er og ArrayList (Big Java 6.1 & 6.8) Ulike lagringsformer (Collection) i Java (Big Java 15.1) Klasser med typeparametre («generiske klasser») (Big Java

Detaljer

Inf 1000 høst 2005 Løsningsforslag ordinær eksamen

Inf 1000 høst 2005 Løsningsforslag ordinær eksamen Inf 1000 høst 2005 Løsningsforslag ordinær eksamen Oppgave 1 (10 poeng) a) 11 x 3 = 33 b) 4 c) 4 d) 10 x 9 = 90 Oppgave 2 (16 poeng) Er disse programsetningene lovlige i Java? JA x NEI int i=1, j =i; x

Detaljer

Bakgrunnen for INF2100. Velkommen til INF2100. Prosjektet. Hva gjør en kompilator?

Bakgrunnen for INF2100. Velkommen til INF2100. Prosjektet. Hva gjør en kompilator? Kursopplegg Velkommen til INF2100 Bakgrunnen Bakgrunnen for INF2100 Jeg er Dag Langmyhr (dag@ifi.uio.no). Dagens tema: Hva går kurset ut på? Bakgrunn for kurset Hvordan gjennomføres kurset? Hvordan får

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i INF2220 Algoritmer og datastrukturer Eksamensdag: 16. desember 2013 Tid for eksamen: 14.30 18.30 Oppgavesettet er på 8 sider.

Detaljer

Løsnings forslag i java In115, Våren 1996

Løsnings forslag i java In115, Våren 1996 Løsnings forslag i java In115, Våren 1996 Oppgave 1a For å kunne kjøre Warshall-algoritmen, må man ha grafen på nabomatriseform, altså en boolsk matrise B, slik at B[i][j]=true hvis det går en kant fra

Detaljer

Løsnings forslag i java In115, Våren 1998

Løsnings forslag i java In115, Våren 1998 Løsnings forslag i java In115, Våren 1998 Oppgave 1 // Inne i en eller annen klasse private char S[]; private int pardybde; private int n; public void lagalle(int i) if (i==n) bruks(); else /* Sjekker

Detaljer

Binære trær: Noen algoritmer og anvendelser

Binære trær: Noen algoritmer og anvendelser Binære trær: Noen algoritmer og anvendelser Algoritmer / anvendelser: Søking i usortert binært tre Telling av antall noder og nivåer i treet Traversering av binære trær Binære uttrykkstrær Kunstig intelligens(?):

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i: INF1010 Objektorientert programmering Dato: 9. juni 2016 Tid for eksamen: 09.00 15.00 (6 timer) Oppgavesettet er på 7 sider.

Detaljer

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF1000 - Høst 2011)

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF1000 - Høst 2011) Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF1000 - Høst 2011) Løsningsforslag til oppgave 7, 8, og 9 mangler Klasser og objekter (kap. 8.1-8.14 i "Rett på Java" 3. utg.) NB! Legg merke til at disse

Detaljer

"behrozm" Oppsummering - programskisse for traversering av en graf (dybde først) Forelesning i INF februar 2009

behrozm Oppsummering - programskisse for traversering av en graf (dybde først) Forelesning i INF februar 2009 Rekursiv programmering BTeksempel Datastruktur I klassen Persontre (rotperson==) Rekursjon Noen oppgaver/problemer er rekursive «av natur» Eksempel på en rekursiv definisjon Fakultetsfunksjonen

Detaljer

INF110 Algoritmer og datastrukturer TRÆR. Vi skal i denne forelesningen se litt på ulike typer trær:

INF110 Algoritmer og datastrukturer TRÆR. Vi skal i denne forelesningen se litt på ulike typer trær: TRÆR Vi skal i denne forelesningen se litt på ulike typer trær: Generelle trær (kap. 4.1) Binærtrær (kap. 4.2) Binære søketrær (kap. 4.3) Den siste typen trær vi skal behandle, B-trær (kap. 4.7) kommer

Detaljer

INF1000 Metoder. Marit Nybakken marnybak@ifi.uio.no 16. februar 2004

INF1000 Metoder. Marit Nybakken marnybak@ifi.uio.no 16. februar 2004 INF1000 Metoder Marit Nybakken marnybak@ifi.uio.no 16. februar 2004 Motivasjon Når man begynner å skrive store programmer, vil man fort oppleve at programmene blir uoversiktlige. Det blir vanskeligere

Detaljer

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre Dagens tema Lister og generiske klasser, del I Array-er og ArrayList (Big Java 6.1 & 6.8) Ulike lagringsformer (Collection) i Java (Big Java 15.1) Klasser med typeparametre («generiske klasser») (Big Java

Detaljer

INF2440 Uke 4, v2015 Om å samle parallelle svar, matrisemultiplikasjon og The Java Memory Model + evt bedre forklaring Radix

INF2440 Uke 4, v2015 Om å samle parallelle svar, matrisemultiplikasjon og The Java Memory Model + evt bedre forklaring Radix INF Uke, v Om å samle parallelle svar, matrisemultiplikasjon og The Java Memory Model + evt bedre forklaring Radix Arne Maus PSE, Inst. for informatikk Hva så vi på i uke. Presisering av hva som er pensum.

Detaljer

Algoritmer og datastrukturer Løsningsforslag

Algoritmer og datastrukturer Løsningsforslag 1 Algoritmer og datastrukturer Løsningsforslag Eksamen 29. november 2011 Oppgave 1A Verdien til variabelen m blir lik posisjonen til den «minste»verdien i tabellen, dvs. bokstaven A, og det blir 6. Oppgave

Detaljer

INF1010, 22. mai Prøveeksamen (Eksamen 12. juni 2012) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

INF1010, 22. mai Prøveeksamen (Eksamen 12. juni 2012) Stein Gjessing Inst. for Informatikk Universitetet i Oslo INF, 22. mai 23 Prøveeksamen 23 (Eksamen 2. juni 22) Stein Gjessing Inst. for Informatikk Universitetet i Oslo Oppgave a Tegn klassehierarkiet for de 9 produkttypene som er beskrevet over. Inkluder også

Detaljer

EKSAMEN. Dato: 18. mai 2017 Eksamenstid: 09:00 13:00

EKSAMEN. Dato: 18. mai 2017 Eksamenstid: 09:00 13:00 EKSAMEN Emnekode: ITF20006 Emne: Algoritmer og datastrukturer Dato: 18. mai 2017 Eksamenstid: 09:00 13:00 Hjelpemidler: Alle trykte og skrevne Kalkulator Faglærer: Jan Høiberg Om eksamensoppgavene: Oppgavesettet

Detaljer

INF2440 Uke 15, v2015 oppsummering. Arne Maus PSE, Inst. for informatikk

INF2440 Uke 15, v2015 oppsummering. Arne Maus PSE, Inst. for informatikk INF2440 Uke 15, v2015 oppsummering Arne Maus PSE, Inst. for informatikk 1 Hva skal vi se på i Uke15 I) Presisering og utvidelse av en uttalelse om en eller flere tråder i en GUI (+ TegnUt til Oblig3).

Detaljer

INF 1000 høsten 2011 Uke september

INF 1000 høsten 2011 Uke september INF 1000 høsten 2011 Uke 2 30. september Grunnkurs i Objektorientert Programmering Institutt for Informatikk Universitetet i Oslo Siri Moe Jensen og Arne Maus 1 INF1000 undervisningen Forelesningene: Første

Detaljer

INF1010 Sortering. Marit Nybakken 1. mars 2004

INF1010 Sortering. Marit Nybakken 1. mars 2004 INF1010 Sortering Marit Nybakken marnybak@ifi.uio.no 1. mars 2004 Dette dokumentet skal tas med en klype salt og forfatter sier fra seg alt ansvar. Dere bør ikke bruke definisjonene i dette dokumentet

Detaljer

INF1010 notat: Binærsøking og quicksort

INF1010 notat: Binærsøking og quicksort INF1010 notat: Binærsøking og quicksort Ragnhild Kobro Runde Februar 2004 I dette notatet skal vi ta for oss ytterligere to eksempler der rekursjon har en naturlig anvendelse, nemlig binærsøking og quicksort.

Detaljer

INF2440 Uke 11, v2015 om parallell debugging og Goldbachs problem, om Oblig 2,3 og 4. Arne Maus PSE, Inst. for informatikk

INF2440 Uke 11, v2015 om parallell debugging og Goldbachs problem, om Oblig 2,3 og 4. Arne Maus PSE, Inst. for informatikk INF2440 Uke 11, v2015 om parallell debugging og Goldbachs problem, om Oblig 2,3 og 4 Arne Maus PSE, Inst. for informatikk 1 Fra hjemmesida til INF2440: Plan for resten av semesteret: Forelesninger: 8.

Detaljer

INF Notater. Veronika Heimsbakk 10. juni 2012

INF Notater. Veronika Heimsbakk 10. juni 2012 INF1010 - Notater Veronika Heimsbakk veronahe@student.matnat.uio.no 10. juni 2012 1 Tilgangsnivåer 2 CompareTo Modifier Class Package Subclass World public Y Y Y Y protected Y Y Y N no modifier Y Y N N

Detaljer

INF2440 Uke 14, v2016. Arne Maus PSE, Inst. for informatikk

INF2440 Uke 14, v2016. Arne Maus PSE, Inst. for informatikk INF2440 Uke 14, v2016 Arne Maus PSE, Inst. for informatikk 1 Resten av INF2440 v2016 Denne forelesningen uke14 Mer om hvordan parallellisere ulike problemer 11.mai forelesning uke15 Oppsummering av pensum,

Detaljer

Oppgave 1 a. INF1020 Algoritmer og datastrukturer. Oppgave 1 b

Oppgave 1 a. INF1020 Algoritmer og datastrukturer. Oppgave 1 b Oppgave 1 1 a INF1020 Algoritmer og datastrukturer Forelesning 14: Gjennomgang av eksamen vår 2001 oppgave 1,2,4 Arild Waaler Institutt for informatikk, Universitetet i Oslo Oppgave 1 a Programmer en ikke-rekursiv

Detaljer

INF1000 undervisningen INF 1000 høsten 2011 Uke september

INF1000 undervisningen INF 1000 høsten 2011 Uke september INF1000 undervisningen INF 1000 høsten 2011 Uke 2 30. september Grunnkurs i Objektorientert Programmering Institutt for Informatikk Universitetet i Oslo Siri Moe Jensen og Arne Maus Forelesningene: Første

Detaljer

Heap* En heap er et komplett binært tre: En heap er også et monotont binært tre:

Heap* En heap er et komplett binært tre: En heap er også et monotont binært tre: Heap Heap* En heap er et komplett binært tre: Alle nivåene i treet, unntatt (muligens) det nederste, er alltid helt fylt opp med noder Alle noder på nederste nivå ligger til venstre En heap er også et

Detaljer

EKSAMEN med løsningsforslag

EKSAMEN med løsningsforslag EKSAMEN med løsningsforslag Emnekode: ITF20006 Emne: Algoritmer og datastrukturer Dato: Eksamenstid: 20. mai 2009 kl 09.00 til kl 13.00 Hjelpemidler: 8 A4-sider (4 ark) med egne notater Kalkulator Faglærer:

Detaljer