IN3030 – Effektiv parallellprogrammering Uke 1 2. del, våren 2019

Slides:



Advertisements
Liknende presentasjoner
Repetisjon innkapsling static tabell av primitiv datatype LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring.
Advertisements

Tabeller av objekter Klassen ArrayList
14 okt. 2003, Arne Maus Inst. for informatikk, UiO
Realisering av Software Patterns Software Design Patterns Realisering med kode Refaktorering Gjenkjenning av mønstre.
@ TDT4120 Algoritmer og datastrukturer Trær og søking i dem, samt litt diverse emner Åsmund Eldhuset asmunde idi.ntnu.no.
Uke 10 - Sortering, og hvordan lage en klasse for et klassebibliotek 21 okt. 2003, Arne Maus Inst. for informatikk, UiO.
Uke 8 - Mer om: Objekter, klasser og pekere
Polymorfi og arv, del 1 LC191D Videregående programmering Semesterplan: Høgskolen i Sør-Trøndelag, Avdeling.
1 Java 6 Mer om metoder Tekster Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet i Oslo.
1 Litt om OO og programmering Arne Maus. 2 OO og Java (og C++, C#)  Arven fra Simula  Programstruktur i Java  Generering av objekter  Beskyttelse.
Programmering i Java versjon januar 2005 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Java 12 Mer filbehandling - skrive til fil HashMap Et større eksempel Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet.
Java 4 Mer om forgreninger While-løkker Ole Christian Lingjærde
Objektorientert programmering i PHP del 2
IS-102 Klassedefinisjoner
@ TDT4120 Algoritmer og datastrukturer Trær og søking i dem, samt litt diverse emner Åsmund Eldhuset asmunde idi.ntnu.no.
Feilhåndtering. Feil er uunngåelige! Erfaring viser at feil i dataprogrammer som består av mer enn noen få linjer ikke er til å unngå. For å få et godt.
Jæger: Robuste og sikre systemer INF150 Programmering mandag 2.10 Default values – standardverdier ved oppstart MER OM: Sub-prosedyrer og sub-funksjoner.
Kodegjennomgang Thommy Bommen & Jarle Søberg Computas AS.
Singleton & Adapter Pattern Gruppe 3. Singleton Pattern Sørger for at en klasse kun kan ha en instans Vanligvis implementert med globale variabler –Singleton.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
INF 295 Algoritmer og datastrukturer Forelesning 2 - kapittel 1 Hans F. Nordhaug (Ola Bø)
Dynamiske nettsider PHP Del 2 – Kontrollstrukturer.
Java 11 Programmering med og uten objekter: hva er forskjellen?
VI LAGER EN PLATEBUTIKK
NÅ SKAL VI LÆRE OM LIKNINGER.
Pedagogisk-psykologisk tjeneste på nett
INF 4130 Eksamen 2008 Gjennomgang.
Å lese tall fra en fil, klassen Scanner 1.Et Scanner-objekt kan knyttes til et strømobjekt eller til en streng. 2.Kan skanne teksten etter data av ulike.
Jæger: Robuste og sikre systemer INF150 Programmering mandag 18.9 Lesing av data fra fil og skriving av data til fil. Side 411 – 4.. Kap 4.
Programmering sif8005. Praktisk informasjon  Innleveringsfrist øvinger: mandag kl  Alle øvinger er obligatoriske  Studass tilgjengelig 6 timer.
Tabeller Dette er en tabell, eller array. Den kan defineres sånn som dette: public int[] heltallsTabell = new int[11]; //Her er 11 tabellens lengde for.
Jæger: Robuste og sikre systemer INF150 Programmering Kapittel 2: Problemløsning Kapittel 3.1 og 3.2.
BUCS Utfordringer og valg av fokus Tor Stålhane. Rammebetingelser Første spørreundersøkelse viser at det vi gjør må kunne: Brukes sammen med UML Passe.
1 Java Database Connectivity (JDBC) Norvald H. Ryeng
Main metoden n public static void main(String[] args){ } n Inni denne metoden skjer alt! n Det kan bare finnes en main metode per program. n Den kan ligge.
INF Objektorientert programmering
Wieland GroupBuilding Installationgesis gesisPLAN EFA Elektro as Dine utfordringer er vårt ansvar Grunnkurs gesisPLAN - Del 2 09:00 Presentasjon av gesisPLAN.
Android-Programmering Våren Oversikt Ytelse vs responsivitet Strategier for og opprettholde responsiviteten Tråder Asynchronous Task.
Object  Klassen i java  Alle klasser arver fra denne om ikke noe annet blir spesifisert  ArrayList.add(Object instans)  Alle elementer formes til Object.
Ekstra mange tips til Oblig 3! 12. mars 2007 Are Magnus Bruaset og Arild Waaler Inst. for informatikk, UiO.
INF1000 (Uke 14) Eksamen V06 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Arild Waaler.
Byggeklosser i java  Klassedefinisjon  Variabel deklarasjon  Metodedeklarasjoner  En ordentlig klasse  Spesielle/kryptiske skrivemåter  løkker og.
INF1000 (Uke 4) Mer om forgreninger, While-løkker
Objektorientert utforming In 140 Forelesning Nr 11 Sommerville kap 12 – del 1.
Inf1000 (Uke 5) Arrayer, filer og tekst
Kapittel 4 Skriving av klasser. 4.1 Anatomien til ein klasse Så langt har vi brukt ferdige klasser frå klassebiblioteket i Java Vi lagar objekt og brukar.
Kapittel 9 Polymorfi. 9.1 Sein binding Ofte er det perfekt match mellom typen til ein variabel og objektet han refererer til ChessPiece bishop;... bishop.
Kapittel 23 (Big Java 2.utg) Tråder. Kjøring av tråder Ein tråd er ein del av eit program som blir eksekvert uavhengig av andre deler av programmet Vi.
Objektorientert design In 140 Sommerville kap 12 – del 1.
Kapittel 7 Array (lister og tabellar). 7.1 Arrayelement Array (lister, tabellar) er kjent frå VB Blir brukt til å organisere data når vi har mange dataelement.
Kapittel 10 Exceptions Handtering av exceptions Ein exception er eit objekt som representerer ein feil eller eit unntak Exceptions blir kasta av.
Android-Programmering Våren Oversikt Long-running operasjoner Introduksjon til Android services On-demand service Bruk av servicer på tvers av prosesser.
Registrering av testresultater fra mobiltelefon
Oppdateringsseminar 5. – 6. februar 2011 Vi ønsker vel å svare nei når vi får dette spørsmålet! Er det risikabelt å fly?
Professor Guttorm Sindre Institutt for datateknikk og informasjonsvitenskap Programmering i Python.
Android-Programmering Våren Oversikt Ytelse vs responsivitet Strategier for og opprettholde responsiviteten Tråder Asynchronous Task.
TDT4105 Informasjonsteknologi, grunnkurs
Triks Avslutt alle klasser, metoder og løkker samtidig som du lager dem. Deklarer alle variablene/referansene på begynnelsen av klassen. Hvis du definerer.
LIKNINGER MED EN OG TO UKJENTE.
INF2440 – Effektiv parallellprogrammering Uke 1, våren 2018
Objektorientert programmering i Java
Kom i gang med programmering!
Eric Jul PSE, Inst. for informatikk
IN3030 – Effektiv parallellprogrammering Uke 1, våren 2019
Eric Jul PSE Inst. for informatikk
Eric Jul PSE, Inst. for informatikk
Eric Jul PSE Inst. for informatikk
Utskrift av presentasjonen:

IN3030 – Effektiv parallellprogrammering Uke 1 2. del, våren 2019 Eric Jul Professor PSE Institutt for Informatikk

Tråder i Java En tråd er enten subklasse av Thread eller får til sin konstruktør et objekt av en klasse som implementerer Runnable. Poenget er at begge måtene inneholder en metode: ’ public void run()’ Vi kaller metoden start() i klassen Thread . Det sørger for at JVM starter tråden og at ’run()’ i vår klasse deretter kalles. JVM som inneholder sin del av start() som gjør mye og til slutt kaller run() Vårt program kaller start i vårt objekt av en subklasse av Thread (eller Runnable). Etter start av tråden kalles vår run()

Flere problemer med parallellitet og tråder i Java Operasjoner blandes (oppdateringer går tapt). Oppdaterte verdier til felles data er ikke alltid synlig fra alle tråder (oppdateringer er ikke synlige når du trenger dem). Synlighet har ofte med cache å gjøre. The Java memory model (= hva skjer ’egentlig’ når du kjører et Java-program). Vi må finne på ’skuddsikre’ måter å programmere parallelle programmer De er kanskje ikke helt tidsoptimale Men de er lettere å bruke !! Det er vanskelig nok likevel. Bare oversiktelige, ’enkle’ måter å programmere parallelt er mulig i praksis

1) Ett problem i dag: operasjoner blandes ved samtidige oppdateringer Samtidig oppdatering - flere tråder sier gjentatte ganger: i++ ; der i er en felles int. i++ er 3 operasjoner: a) les i, b) legg til 1, c) skriv i tilbake Anta i =2, og to tråder gjør i++ Vi kan få svaret 3 eller 4 (skulle fått 4!) Dette skjer i praksis ! 2 3 tråd1 tråd2 Les i Legg til 1 Skriv i tilbake tiden

Test på i++; parallell Setter i gang n tråder (på en 2-kjerner CPU) som alle prøver å øke med 1 en felles variabel int i; 100 000 ganger uten synkronisering; Vi fikk følgende feil - antall og %, (manglende verdier). Merk: Resultatene varierer også mye mellom hver kjøring : for (int j =0; j< 100000; j++) { i++; } Antall tråder n 1 2 20 200 2000 Svar 1.gang 2.gang 100 000 200000 159234 1290279 1706068 16940111 16459210 170127199 164954894 Tap 1.gang 2. gang 0 % 0% 20,4% 35,5% 14,6% 15,3% 17,7% 14,9% 17,5%

Synkronisering Løsning af problem med samtidig oppdatering i++ er 3 operasjoner: a) les i, b) legg til 1, c) skriv i tilbake Critical section Beskytt les-legg til-skriv i critical section 2 3 tråd1 tråd2 Les i Legg til 1 Skriv i tilbake tiden Legg til

Kommende program bruker CyclicBarrier. Hva gjør den? Man lager først ett, felles objekt b av klassen CyclicBarrier med et tall: ant til konstruktøren = det antall tråder den skal køe opp før alle trådene slippes fri ‘samtidig’. Tråder (også main-tråden) som vil køe opp på en CyclicBarrier sier await() på den. De ant-1 første trådene som sier await(), blir lagt i en kø. Når tråd nummer ant sier await() på b, blir alle trådene sluppet ut av køen ‘samtidig’ og fortsetter i sin kode. Det sykliske barriere objektet b er da med en gang klar til å være kø for nye, ant stk. tråder.

Vanligste oppsett av main-tråden + k tråder main, lager k nye tråder Data main venter k tråder, leser og skriver i egne og i felles data og løser problemet Hver av trådene (main + k nye) er sekvensielle programmer. Synkronisering via cyclic barrier. Problemet er at de samtidig ikke kan skrive på felles data.

Oppsummering – Uke1-uke2-del Stygg feil vi kan gjøre: Samtidig oppdatering (=skriving) på delte data (eks: i++) Dette løses ved synkronisering Alle tråder som vil skrive må køes opp på samme synkroniseringsvariabel (som er et objekt) slik at bare én tråd slipper til av gangen. Alle objekter kan nyttes som en synkroniseringsvariabel, og da kan vi bruke enten en synchronized metode, eller objekter av spesielle klasser som: CyclicBarrier Semaphore (undervises senere) De inneholder metoder som await(), som gjør at tråder venter. Senere vil vi lære å dele opp et problem i mindre biter til hver tråd og ikke synkronisere for mye (tar for mye tid)