Parallelle algoritmer

Relaterede dokumenter
Parallelle algoritmer

Skriftlig eksamen i Datalogi

Løsning af skyline-problemet

Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004

Dag 10 Flertrådet programmering

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java

DM01 DM Obl. Afl. Jacob Christiansen, , D12, Elias 18/ Side 1 af 11

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

BRP Kursusintroduktion og Java-oversigt

Threads i Java. Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java

DM02 opgaver ugeseddel 2

Løsning af møntproblemet

OOP e uge kursusgang: Samtidighed (II) Safety = sikkerhed. Safety

DM502. Peter Schneider-Kamp

Dag 10 Flertrådet programmering

Kursus navn: Indledende programmering Kursus nr

A Profile for Safety Critical Java

Rekursion og dynamisk programmering

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

Real-time programming safety in Java and Ada

et enkelt kontrol flow sætningerne i programmet afvikles en ad gangen flowet følger dels den tekstlige rækkefølge

Søgning og Sortering. Søgning og Sortering. Søgning. Linæer søgning

Vejledende løsninger

Eksempel: Skat i år 2000

Hashing og hashtabeller

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

MM4. Algoritmiske grundprincipper. Lister, stakke og køer. Hash-tabeller og Træer. Sortering. Søgning.

Java Programmering. En bog for begyndere. Skrevet af Henrik Kressner

DATALOGI 0GB. Skriftlig eksamen tirsdag den 6. januar 2004

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

Synkronisering af sekventielle processer

Maskinarkitektur. Lars Kristensen Christian Storm dmasark 1

Søgning og Sortering. Søgning Linæer søgning Binær søgning Sortering Indsættelsessortering Flettesortering. Philip Bille

17 Søgning og Søgetræer.

Test af It-komponent

Abstrakte datatyper C#-version

Datalogi OB, Efterår 2002 OH er, forelæsning 3/ forstå datastrukturer og algoritmer (teoretisk forståelse og intuition)

Forelæsning 17, tirsdag 2. november 1999 Søgning efter en given værdi i en tabel. Programmering 1999

18 Multivejstræer og B-træer.

Find største element, sæt det på sidste plads. Grundidé i hobsortering. er er

28 Algoritmedesign. Noter. PS1 -- Algoritmedesign

Computere og Netværk (dcomnet)

Mandatory Assignment 1

Netværksalgoritmer 1

Perspektiverende Datalogi Internetalgoritmer. MapReduce. Gerth Stølting Brodal

DM01 DM Obl. Afl. Jacob Christiansen, , D12, Elias 13/ Side 1 af 7

University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11

DANMARKS TEKNISKE UNIVERSITET

Datalogi C + Datastrukturer og Algoritmer

Tree klassen fra sidste forelæsning

Skriftlig eksamen i Datalogi

Civilingeniøreksamen januar Skriftelig prøve den 12. januar 2001 Kursusnummer 49104

O l e \n I b \n. Ole Ib TT_EOF. Ole Ib Overview Tekstfiler, tegn og brikker

Programmering 1999 KVL Side 5-4. Klassen Time: metoder. Metoder i objektet giver mulighed for at ændre tilstanden, eller kigge på tilstanden.

Singleton pattern i Java

Algoritmedesign med internetanvendelser ved Keld Helsgaun

Grafteori, Kirsten Rosenkilde, september Grafteori

Algoritmer og Datastrukturer 1

Tilfældige tal. Denne artikel introducerer generering af tilfældige tal og viser lidt om hvad man kan og ikke mindst hvad man ikke bør bruge.

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

public Set(int size) { this.listelement = new LinkedList<Integer>(); }

b) Udvid din implementation af forme til at understøtte.equals. To objekter af samme form er ens hvis de har samme værdier i felterne.

Forelæsning Uge 2 Torsdag

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

Arduino kursus lektion 4:

Hvordan vælger jeg dokumentprofilen?

BOSK F2011, 1. del: Udsagnslogik

PROGRAM. using System; using System.Collections.Generic; using System.Text; using System.Collections;

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

Oversættere. Vejledende løsninger til Skriftlig eksamen onsdag d. 25. januar 2006

Skriftlig eksamen i Datalogi

Forelæsning Uge 2 Torsdag

Forelæsning Uge 5 Mandag

Virkefeltsregler i Java

Hanne Niels Edith Harald Carsten Jørgen Henrik.

RMI introduktion. Denne artikel beskriver Java RMI (Remtote Method Invocation).

Videregående Programmering for Diplom-E Noter

Beregning af bestemt integrale ved partiel integration og integration ved substitution:

Python 3 Matematik Programmerings kursus:

Greenfoot En kort introduktion til Programmering og Objekt-Orientering

Projektenhedskursus (PE): Studiets metoder (SME)

Bits, bit operationer, integers og floating point

9.8 Kildekode. side 88. Pakke Klasse Sidenummer. fortsætter..

Miniprojekt 3: Fejlkorligerende køder Fejlkorrigerende koder

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1.

Oversigt [LA] 6, 7, 8

Databaseadgang fra Java

DesignMat Egenværdier og Egenvektorer

SigmaT.

SAX Simple API for XML.

14.1 Internationale programmer

Hashing og hashtabeller

Intro - Std.Arb. Version:

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

DATALOGI 1E. Skriftlig eksamen torsdag den 3. juni 2004

BRP Tal. Om computer-repræsentation og -manipulation. Logaritmer

Specifikation Abstrakt OO OS-API Rev Specifikation. Abstrakt, objektorienteret operativsystem-api

Secret Sharing. Olav Geil Institut for Matematiske Fag Aalborg Universitet URL: olav.

Asymptotisk analyse af algoritmers køretider

Om hvordan Google ordner websider

Transkript:

Parallelle algoritmer Von Neumann s model John von Neumann 1903-57 Von Neumanns model: Instruktioner og data er lagret i samme lager, og én processor henter instruktioner fra lageret og udfører dem én ad gangen e fleste computere er variationer over denne model Nye maskiner vinder frem, som tillader udførelse af et stort antal instruktioner samtidigt (i parallel) er kan være tale om generelt anvendelige maskiner, eller maskiner, der er specialbyggede til løsning af specifikke opgaver (eller opgave-typer) 1 2 Hastighedsforøgelse (speedup) Eksempel Parallel addition Mulig fremgangsmåde: (1) Flyt eksisterende effektiv algoritme uændret til parallelcomputer (2) Tilpas derefter algoritmen til computeren Ikke altid nogen god ide! lgoritmen kan være uegnet til parallelisering Lad T(n, p) betegne køretiden for en algoritme med inputstørrelse n på p processorer S(p) = T(n,1)/T(n, p) kaldes algoritmens speedup Hvis S(p) = p siges algoritmen at have perfekt speedup Ved effektiviteten af en parallel algoritme forstås E(p) = S(p)/p [ udtrykker udnyttelsesgraden af processorerne ] Problem: Find summen af to n-bit binære tal En sekventiel løsning har et tidsforbrug O(n) Parallel løsning: enyt del-og-hersk til at opnå en parallel algoritme Hvert problem opdeles i to uafhængige delproblemer n-m bit m bit (m = n/2) a: al ar b: bl br eregn i parallel: sr = ar + br + carry; // carry = 0/1 sl0 = al + bl + 0; sl1 = al + bl + 1; Hvis ar + br + carry ikke giver mente, benyttes sl0 i resultatet: sl0 sr Ellers benyttes sl1: sl1 m sidste bit af sr 3 4

Java-metode til addition ved del-og-hersk Problemer ved parallelisering int sum(int a, int b, int carry, int n) { if (n == 1) return a + b + carry; int m = n / 2; int al = a >> m, ar = a & ~(~0 << m); int bl = b >> m, br = b & ~(~0 << m); int sr = sum(ar, br, carry, m); int sl0 = sum(al, bl, 0, n - m); udføres i parallel int sl1 = sum(al, bl, 1, n - m); if (sr >> m == 0) return (sl0 << m) sr; else return (sl1 << m) (sr & ~(~0 << m)); Kommunikation imellem processorer: - ikke alle processorer kan være forbundet (hvis der er mange processorer) - langsomme forbindelser Synkronisering af processorer: - en processor kan blive nødt til at vente på en anden processor - en processors aktivitet bør ikke baseres på andre processorers relative hastigheder Eksempel på kald: s = sum(25, 29, 0, 16); Tidsforbrug: T(n) = T(n/2) + O(1)! T(n) = O(log n) 5 6 Når to eller flere processorer, processer eller tråde samtidigt opdaterer de samme data, kan resultatet blive forkert Synkronisering class Konto { private int saldo; public Konto(int startsaldo) { saldo = startsaldo; public int hentsaldo() { return saldo; public void saetsaldo(int nysaldo) { saldo = nysaldo; ruger 1 ruger 2 s1 = k.hentsaldo(); s2 = k.hentsaldo(); s1 += beløb1; s2 += beløb2; k.saetsaldo(s1); k.setsaldo(s2); Fejl: saldoen bliver kun øget med beløb2 7 Kritiske regioner Et stykke kode, som kan give et utilsigtet resultat, hvis det udføres af flere processer/tråde samtidig, kaldes for en kritisk region Java gør det muligt - gennem synchronized metoder og synchronized sætninger - at sikre, at kun én tråd ad gangen kan være i en kritisk region Hvis en tråd ønsker at udføre en kritisk region, som en anden tråd udfører, må den vente, indtil ingen anden tråd udfører denne kode 8

Synkronisering for kontoeksemplet class Konto { private int saldo; public Konto(int startsaldo) { saldo = startsaldo; public synchronized int hentsaldo() { return saldo; public synchronized void indsæt(int beløb) { saldo += beløb; Under udførelsen af en synchronized metode låses objektet SIS (Single-Instruction Single-ata): Én instruktionsstrøm, én datastrøm [ en sædvanlig computer ] i I PE o SIM (Single-Instruction Multiple-ata): Én instruktionsstrøm, flere datastrømme [ f.eks. en vektorcomputer ] I Flynns klassifikation 1966 MIM (Multiple-Instruction Multiple-ata): Flere instruktionsstrømme, flere datastrømme. [ f.eks. forbundne computere ] i1 I 1 PE 1 o1... I n PE n on MIS (Multiple-Instruction Single-ata): Flere instruktionsstrømme, én datastrøm. [ f.eks. systoliske maskiner ] I 0 in I n k.indsæt(beløb1); PE 1... PE n PE 1... PE n k.indsæt(beløb2); 9 i1 o1 in on i o 10 Kommunikation i MIM-arkitekturen Parallelle algoritmer Kommunikationen i MIM kan enten ske: (1) ved brug af fælles lager (2) ved udveksling af beskeder (meddelelser) esign, analyse og verifikation af parallelle algoritmer er langt vanskeligere end for traditionelle algoritmer I det følgende betragtes specialbyggede maskiner til løsning af specifikke opgaver e viser effekten af maskinarkitektur på algoritmedesign - og omvendt 11 12

Sorteringsnetværk Sortering af 4 dataelementer Sortering af 3 dataelementer 1 2 3 Ikke-adaptiv algoritme: Ligegyldigt hvilke dataelementer, der skal sorteres, udføres en fast sekvens af sammenligning-ombytnings-operationer 13 Sortering af 4 dataelementer kan foretages i 3 parallelle skridt 14 Sortering af 16 dataelementer Matrixmultiplikation c 11 c 12 c ( 13 ) ( ( ) = c 21 c 22 c 23 c 31 c 32 c 33 a 11 a 12 a 13 b 11 b 12 b 13 a a a b b b 21 22 23 21 22 23 a 31 a 32 a 33 ) * b 31 b 32 b 33 c ij = " k a ik b kj 1 2 3 4 5 6 7 8 9 10 60 komponenter, 10 parallelle skridt for (i = 1; i <= N; i++) for (j = 1; j <= N; j++) { c[i][j] = 0; for (k = 1; k <= N; k++) c[i][j] += a[i][k] * b[k][j]; et er muligt at bygge sorteringsnetværk bestående af cirka n lg 2 n / 4 komponenter, der kan sortere i cirka lg 2 n / 2 parallelle skridt Tidsforbrug: O(N 3 ) 15 16

Matrixmultiplikation på en systolisk maskine Ressourceforbrug c 11 c 21 c 12 c 22 c 13 c 23 a[i][k] left down c ij b[k][j] up a[i][k] right Maskinen multiplicerer to N x N matricer ved brug af N 2 processorer i N parallelle skridt c 31 c 32 c 33 b[k][j] c ij = " k a ik b kj 17 18 class Processor extends Thread { private int i, j, a, b, c, n; private hannel left, right, up, down; class hannel { private int message; private boolean full = false; public Processor(int I, int J, int, int, int N, hannel L, hannel R, hannel U, hannel ) { i = I; j = J; a = ; b = ; n = N; left = L; right = R; up = U; down = ; start(); public synchronized void send(int message) { while (full) try { wait(); catch (InterruptedException e) { this.message = message; full = true; notify(); public int getresult() { try { join(); catch (InterruptedException e) { return c; void run() {... 19 public synchronized int receive() { while (!full) try { wait(); catch (InterruptedException e) { full = false; notify(); return message; 20 fortsættes

public void run() { // a == a[i][j] && b == b[i][j] for (int k = 0; k <= i; k++) { left.send(a); a = right.receive(); for (int k = 0; k <= j; k++) { up.send(b); b = down.receive(); // a == a[i][0] && b == b[0][j] c = a * b; for (int k = 1; k < n; k++) { left.send(a); up.send(b); a = right.receive(); b = down.receive(); c += a * b; c 00 c 10 c 20 c 01 c 11 c 21 c 02 c 12 c 22 public static void main(string args[]) { int[][] a = {{ 1, 3,-4, { 1, 1,-2, {-1,-2, 5; int[][] b = {{ 8, 3, 0, { 3,10, 2, { 0, 2, 6; hannel[][][] c = new hannel[2][n][n]; for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) { c[0][i][j] = new hannel(); c[1][i][j] = new hannel(); Processor[][] p = new Processor[n][n]; for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) p[i][j] = new Processor(i, j, a[i][j], b[i][j], n, c[0][i][j], c[0][i][(j + 1) % n], c[1][i][j], c[1][(i + 1) % n][j]); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) System.out.print(p[i][j].getResult() + " "); System.out.println(); 21 22