CSE 332 Data Abstractions: Parallel Sorting & Introduction to Concurrency
Kate Deibel Summer 2012
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 1
Introduction to Concurrency Kate Deibel Summer 2012 August 6, 2012 - - PowerPoint PPT Presentation
CSE 332 Data Abstractions: Parallel Sorting & Introduction to Concurrency Kate Deibel Summer 2012 August 6, 2012 CSE 332 Data Abstractions, Summer 2012 1 Like last week was so like last week ago like like like A QUICK REVIEW
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 1
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 2
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 3
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 4
range 0,8 sum fromleft range 0,4 sum fromleft range 4,8 sum fromleft range 6,8 sum fromleft range 4,6 sum fromleft range 2,4 sum fromleft range 0,2 sum fromleft r 0,1 s f r 1,2 s f r 2,3 s f r 3,4 s f r 4,5 s f r 5,6 s f r 6,7 s f r 7.8 s f 6 4 16 10 16 14 2 8 10 26 30 10 36 40 76 36 10 36 66 6 26 52 68 10 66 36
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 5
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 6
FORALL(i=0; i < input.length; i++){ if(bits[i]==1)
}
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 7
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 8
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 9
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 10
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 11
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 12
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 13
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 14
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 15
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 16
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 17
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 18
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 19
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 20
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 21
merge
merge
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 22
merge
merge
merge merge merge
merge merge merge
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 23
merge
merge
merge merge merge
merge merge merge
Merge(arr[], left1, left2, right1, right2, out[], out1, out2 ) int leftSize = left2 – left1 int rightSize = right2 – right1 // Assert: out2 – out1 = leftSize + rightSize // We will assume leftSize > rightSize without loss of generality if (leftSize + rightSize < CUTOFF) sequential merge and copy into out[out1..out2] int mid = (left2 – left1)/2 binarySearch arr[right1..right2] to find j such that arr[j] ≤ arr[mid] ≤ arr[j+1] Merge(arr[], left1, mid, right1, j, out[], out1, out1+mid+j) Merge(arr[], mid+1, left2, j+1, right2, out[], out1+mid+j+1, out2)
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 24
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 25
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 26
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 27
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 28
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 29
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 30
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 31
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 32
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 33
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 34
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 35
int b = getBalance(); if(amount > b) throw new …; setBalance(b – amount); int b = getBalance(); if(amount > b) throw new …; setBalance(b – amount);
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 36
int b = getBalance(); if(amount > getBalance()) throw new …; setBalance(b – amount); int b = getBalance(); if(amount > getBalance()) throw new …; setBalance(b – amount);
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 37
int b = getBalance(); if(amount > getBalance()) throw new …; setBalance(b – amount); int b = getBalance(); if(amount > getBalance()) throw new …; setBalance(b – amount);
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 38
if(amount > getBalance()) throw new …; setBalance( getBalance() – amount ); if(amount > getBalance()) throw new …; setBalance( getBalance() – amount );
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 39
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 40
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 41
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 42
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 43
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 44
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 45
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 46
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 47
int setBalanceUnsafe(int x) { balance = x; } int setBalanceSafe(int x) { lk.acquire(); balance = x; lk.release(); } void withdraw(int amount) { lk.acquire(); … setBalanceUnsafe(b – amount); lk.release(); }
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 48
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 49
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 50
synchronized (expression) { statements }
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 51
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 52
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 53
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 54
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 55
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 56
Some horses like wet tracks or dry tracks or muddy tracks…
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 57
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 58
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 59
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 60
class Stack<E> { … synchronized boolean isEmpty() {…} synchronized void push(E val) {…} synchronized E pop(E val) {…} E peek() { E ans = pop(); push(ans); return ans; }
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 61
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 62
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 63
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 64
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 65
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 66
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 67
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 68
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 69
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 70
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 71
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 72
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 73
all memory needs synchronization
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 74
immutable memory thread-local memory
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 75
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 76
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 77
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 78
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 79
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 80
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 81
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 82
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 83
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 84
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 85
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 86
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 87
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 88
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 89
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 90
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 91
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 92
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 93
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 94
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 95
x = 1; y = 1; int a = y; int b = x; assert(b >= a);
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 96
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 97
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 98
class C { private volatile int x = 0; private volatile int y = 0; void f() { x = 1; y = 1; } void g() { int a = y; int b = x; assert(b >= a); } }
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 99
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 100
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 101
class BankAccount { … synchronized void withdraw(int amt) {…} synchronized void deposit(int amt) {…} synchronized void transferTo(int amt, BankAccount a) { this.withdraw(amt); a.deposit(amt); } }
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 102
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 103
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 104
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 105
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 106
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 107
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 108
August 6, 2012 CSE 332 Data Abstractions, Summer 2012 109