UNIVERSITETET I OSLO

Like dokumenter
UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF2440 Prøveeksamen, løsningsforslag, 26 mai Arne Maus OMS, Inst. for informatikk

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Sortering med tråder - Quicksort

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF NOV PARALLELL SORTERING. Arne Maus, PSE, Ifi

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

UNIVERSITETET I OSLO

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

INF Uke 10. Ukesoppgaver oktober 2012

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

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

Oppgave 1. Oppgave 2. Oppgave 3. Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

UNIVERSITETET I OSLO

Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

UNIVERSITETET I OSLO

Oppgave 1. INF1000 Uke 13. Oppgave 2. Oppgave 3. Er dette lovlige deklarasjoner (når de foretas inni en metode)? JA NEI

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

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

INF1000: Forelesning 11. Oppgave 2. Oppgave 1. Husk å melde deg på prøveeksamen i INF1000! Ole Christian Lingjærde 7.november 2006

UNIVERSITETET I OSLO

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

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

UNIVERSITETET I OSLO

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

UNIVERSITETET I OSLO

Gjennomgang prøveeksamen oppgave 1, 2, 4, 5, 7

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

UNIVERSITETET I OSLO

Faglærerne prøver å besøker eksamenslokalet mellom klokka 15 og 16 for å oppklare eventuelle uklarheter og feil i oppgaveteksten.

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

Prøveeksamen IN1000. IN Prøveeksamen. Dato november 2017 Tid 12:30-12:00 Alle trykte og skrevne hjelpemidler er tillatt.

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

De neste ukene. INF1000 Uke 12. Prøveeksamen. Nå - Prøveeksamen. Forelesning om IT og samfunn neste uke (13/11).

2 Om statiske variable/konstanter og statiske metoder.

UNIVERSITETET I OSLO

EKSAMENSFORSIDE Skriftlig eksamen med tilsyn

TDT4100 Objektorientert programmering

EKSAMEN. Dato: 9. mai 2016 Eksamenstid: 09:00 13:00

UNIVERSITETET I OSLO

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl

GJØVIK INGENIØRHØGSKOLE

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert programmering i Java I

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

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

EKSAMEN 6108/6108N PROGRAMMERING I JAVA Alt trykt og skriftlig materiale.

INF2440 Uke 5, våren2015 Om oppdeling av et problem for parallellisering, mye om primtall + thread-safe. Arne Maus PSE, Inst.

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Java PRP brukermanual

Eksamen INF1010 V2009 Del B prøveeksamen V2010 Vekt 60 %

Arne Maus OMS, Inst. for informatikk

Transkript:

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 Gjennomgang av løsning (i StoreAud, KN hus) Oppgavesettet er på : 5 sider Vedlegg : Skisse av Model2-koden. Tillatte hjelpemidler : Alle trykte og skrevne Kontroller at oppgavesettet er komplett, og les nøye gjennom oppgavene før du løser dem. Poengangivelsen øverst i hver oppgave angir maksimalt antall poeng. Du kan legge dine egne forutsetninger til grunn og gjøre rimelige antagelser, så lenge de ikke bryter med oppgavens "ånd". Gjør i så fall rede for disse forutsetningene og antagelsene. Til eksamen skal svarene skrives på gjennomslagspapir. Da må du huske å skrive hardt nok til at besvarelsen blir mulig å lese på alle gjennomslagsarkene, og ikke legge andre deler av eksamensoppgaven under når du skriver. Til eksamen skal du selv beholde underste arket etter levering av de to øverste til eksamensinspektøren. Nummerer sidene, og husk å skrive kandidatnummeret ditt på besvarelsen. En av oppgavene (3c) står det kan puffes. Det betyr at du bare får E på dette punktet hvis det er blankt (ikke F) I vedlegget finner du en litt forenklet versjon av Model2-koden som ble nyttet i kurset (en ytre klasse med main-tråden og en indre klasse hvor objekter av denne blir egne tråder). I den skissen er det markert med store bokstaver ulike områder av denne koden som det blir referert til i oppgavene. Oppgave 1 (10 poeng) a) Når vi synkroniserer i Java, hva annet skjer i tillegg til at vi evt. får ordnet trådene tidsmessig (svar kortfattet, maksimalt 10 linjer) b) Hvilken effekt ville det ha på programutførelsen av et parallelt program i Java hvis alle metodene var synchronized og deklarert i A-området (se vedlegget) 1

Oppgave 2 (10 poeng) Du skal beskrive forskjellene av Gustafsons lov kontra Amdahls lov. Anta at du har et program som for en gitt n har 10% sekvensiell kode. Hva sier de to lovene om hva som vil skje med hvor stor maksimal speedup vi kan få på dette programmet hvis vi kjører programmet med en langt større n på problemet. Hvilken av de to lovene er mest optimistiske med hensyn til å få størst mulig speedup. Oppgave 3(25 poeng) Goldbach hadde egentlig to påstander i 1743. Den første om partall har vi jobbet mye med. Hans andre påstand var at ethvert oddetall kan skrives som summen av tre primtall. Dette er visstnok bevist i 2013 i et 133 siders bevis (sist revidert 14. april 2014!). a) Skisser hvordan du vil lage et sekvensielt program som sjekker dette for alle oddetall n < M, og hvor M er et vilkårlig stort tall. Du kan godt bruke din løsning på Goldbachs påstand om partall som en del av løsningen. b) Skisser så hvordan du vil parallellisere det å vise Goldbachs påstand om alle oddetall n < M. c) Kan puffes: Hvis Goldbachs påstand om partall var bevist (noe det ikke er), men anta likevel det. Bevis da at Goldbachs påstand om oddetall er sann (meget lett, tips: 3 er et primtall). Oppgave 4 (20 poeng) Anta at at du har startet 5 tråder og at du i felt A i vedlegget deklararer følgende to variable: int teller2 =0 Semaphore abc = new Semaphore(2); Trådene eksekverer kode i sin run()-metode som før eller siden alle prøver å utføre: try{abc.acquire(); catch (Exception e) {return; teller2 ++; Vi antar at dette gjør trådene slik at det ikke blir data-kappløp om teller2 mellom trådene. a) Hva er verdien av teller2 etter at første tråden prøver å utføre denne koden. b) Hva er verdien av teller2 etter at andre tråden prøver å utføre denne koden. c) Hva er verdien av teller2 etter at tredje tråden prøver å utføre denne koden. d) Hva er verdien av teller2 etter at fjerde tråden prøver å utføre denne koden. Oppgave 5 (40 poeng) Skriv først en sekvensiell og så en parallell metode for å løse følgende problem: I en matrise: int[][]a = new int[n][n] er det slik at to av radene er sortert, mens de resterende n-2 radene ikke er sortert (dvs. i hver av disse n-2 radene er det minst en indeks i slik at i rad k er a[k][i] > a[k][i+1]). Oppgaven din nå er å finne disse to 2

radene. La til slutt main-tråden skrive ut svaret (indeksen på de to radene som er sortert) i både det sekvensielle og parallelle programmet N.B. Du skal ikke skrive hele programmet, men bare den sekvensielle metoden, de datastrukturer du trenger og den/de metodene du trenger i det parallelle tilfellet som kalles fra run() - metoden. For begge deler, skriv med kommentar i koden hvilke områder (A eller B) i vedlegget du tenker disse plassert. Du kan eventuelt lage en ny konstruktør i class Arbeider hvis du trenger det. Oppgave 6 (20 poeng) Du har et trådbasert system og vil øke en int variabel num hver gang med 1 slik at den til slutt blir så stor at den av maskinen blir betraktet som et negativt tall ved at verdien kommer opp i fortegnsbitet til variabelen. For det formålet starter du opp 10 tråder. Du skal da benytte følgende to programsetninger s1 og s2: // setninger s1 int num =1; // setninger s2 synchronized int leggtil(int num) { num++ ; return num; Vi tenker oss at det i hver run-metode i trådene utføres følgende kode: while (num > 0 ){ num = leggtil(num); Selve problemløsningen din tar utgangspunkt følgende sekvensielle kode: while (num >= 0) num++; System.out.println (" num < 0: + num+ ", i mål ); Spørsmål: Hva er effekten av å plassere de to setningene (s1 og s2) ulike steder i Model2koden (vedlegget): a) s1 og s2 i A? b) s1 i A og s2 i B? c) s1 i B og s2 i A? d) s1 og s2 i B? Gi en kort begrunnelse på hvert av punktene a)-d). 3

Oppgave 7 (70 poeng) Flettesortering, sekvensiell og parallell. (For dere som har glemt hva flette-sortering er: Du har i en array a[] to sorterte sekvenser s1 og s2 (av lengde l1 og l2) som ligger etter hverandre i a[] dvs. at hvis s1 s siste element er i a[k], så starter s2 i a[k+1]. Kopier disse to over i en array b[] slik at du stadig tar det minste elementet av s1 eller s2 i a[] som enda ikke er kopiert som neste element du kopierer over til b[]. Du plukker altså elementene fra toppen hver av de to sekvensene til alle elementene er kopiert over til b[]. I b[] er det etter kopieringa da en sortert sekvens av lengde = l1+l2. ) a) Du skal nå først skrive en sekvensiell, rekursiv versjon av flettesortering, som består av to metoder (omtrent som quicksort) - her er den første oppgitt: void flettesort(int [] a) { if (a.length <= 50) insertsort(a,0,a.length-1); else { int [] b = new int [a.length]; flette(a,b,0,a.length-1); // end flettesort Du skal skrive den rekursive metoden flette: void flette (int [] a, int [] b, int v, int h){ <..din kode her.. > som sorterer en del av en heltallsarray fra og med element a[v] til og med element a[h] dvs: a[v..h] som følger: 1. Du skal bruke: void insertsort (int [] a, int v, int h) som subalgoritme, hvis (h-v) 50. Da skal du sortere den delen med insertsort. 2. På backtrack (etter retur av de to rekursive kallene i flette), skal du flette de to sorterte delene av a[v..h] ved: i. Flette-sortere dem over i sin del av arrayen b dvs. i b[v..h]. ii. iii. Kopiere den sorterte (nå om lag dobbelt så lange) sekvensen fra b[] til tilbake til samme plasser i a[]. Når da det opprinnelige, første kallet på flette returnerer, er hele a[] sortert. II) Skriv en effektiv parallell versjon av din sekvensielle, rekursive flettesorteringsalgoritme. N.B. Også her skal du ikke skrive hele programmet (du kan referere til koden i vedlegget)), men bare den sekvensielle metoden flette, og de datastrukturer du trenger og den/de 4

metodene du trenger i det parallelle tilfellet som kalles fra run() - metoden. For begge deler, skriv med kommentar i koden hvilke områder (A eller B) i vedlegget du tenker disse plassert. Du kan eventuelt lage en ny konstruktør i class Arbeider hvis du trenger det. Appendix Model2 kodeskisse: import java.util.concurrent.*; class Problem { // felles data og metoder A public static void main(string [] args) { Problem p = new Problem(); p.utfoer(12); void utfoer (int antt) { Thread [] t = new Thread [antt]; for (int i =0; i< antt; i++) ( t[i] = new Thread(new Arbeider(i))).start(); for (int i =0; i< antt; i++) t[i].join(); class Arbeider implements Runnable { int ind; // lokale data og metoder B Arbeider (int in) {ind = in;) public void run(int ind) { // kalles når tråden er startet // end run // end indre klasse Arbeider // end class Problem 5