Reflective Parallel Programming
Nicholas D. Matsakis, Thomas R. Gross ETH Zurich
1
Friday, June 18, 2010
Reflective Parallel Programming Nicholas D. Matsakis, Thomas R. - - PowerPoint PPT Presentation
Reflective Parallel Programming Nicholas D. Matsakis, Thomas R. Gross ETH Zurich 1 Friday, June 18, 2010 Reflective Parallelism Reflection : Ability for a program to reason about its own structure Reflective Parallelism : Ability for
1
Friday, June 18, 2010
2
Friday, June 18, 2010
3
Friday, June 18, 2010
3
Parallel Tasks or Threads
Friday, June 18, 2010
3
Parallel Tasks or Threads
Friday, June 18, 2010
4
Friday, June 18, 2010
5
Friday, June 18, 2010
6
Friday, June 18, 2010
7
Friday, June 18, 2010
8
Friday, June 18, 2010
8
Friday, June 18, 2010
9
Friday, June 18, 2010
Thread[] threads = new Thread[N]; for(int i = 0; i < N; i++) { threads[i] = new Thread(...); threads[i].start(); } for(int i = 0; i < N; i++) threads[i].join();
10
Friday, June 18, 2010
Thread[] threads = new Thread[N]; for(int i = 0; i < N; i++) { threads[i] = new Thread(...); threads[i].start(); } for(int i = 0; i < N; i++) threads[i].join();
10
Friday, June 18, 2010
Thread[] threads = new Thread[N]; for(int i = 0; i < N; i++) { threads[i] = new Thread(...); threads[i].start(); } for(int i = 0; i < N; i++) threads[i].join();
10
Friday, June 18, 2010
Thread[] threads = new Thread[N]; for(int i = 0; i < N; i++) { threads[i] = new Thread(...); threads[i].start(); } for(int i = 0; i < N; i++) threads[i].join();
10
Friday, June 18, 2010
Thread[] threads = new Thread[N]; for(int i = 0; i < N; i++) { threads[i] = new Thread(...); threads[i].start(); } for(int i = 0; i < N; i++) threads[i].join();
10
Friday, June 18, 2010
Thread[] threads = new Thread[N]; for(int i = 0; i < N; i++) { threads[i] = new Thread(...); threads[i].start(); } for(int i = 0; i < N; i++) threads[i].join();
10
Friday, June 18, 2010
Thread[] threads = new Thread[N]; for(int i = 0; i < N; i++) { threads[i] = new Thread(...); threads[i].start(); } for(int i = 0; i < N; i++) threads[i].join();
10
Friday, June 18, 2010
Thread[] threads = new Thread[N]; for(int i = 0; i < N; i++) { threads[i] = new Thread(...); threads[i].start(); } for(int i = 0; i < N; i++) threads[i].join();
10
Friday, June 18, 2010
11
Write buffer Lock / Unlock Lock / Unlock Read buffer
Friday, June 18, 2010
11
Write buffer Lock / Unlock Lock / Unlock Read buffer
Friday, June 18, 2010
11
Write buffer Lock / Unlock Lock / Unlock Read buffer
Friday, June 18, 2010
11
Write buffer Lock / Unlock Lock / Unlock Read buffer
Friday, June 18, 2010
11
Write buffer Lock / Unlock Lock / Unlock Read buffer
Friday, June 18, 2010
12
Friday, June 18, 2010
13
Friday, June 18, 2010
13
Friday, June 18, 2010
14
Friday, June 18, 2010
15
Friday, June 18, 2010
15
Friday, June 18, 2010
15
Friday, June 18, 2010
15
Friday, June 18, 2010
15
Friday, June 18, 2010
16
Friday, June 18, 2010
17
a b
Friday, June 18, 2010
17
a b
Friday, June 18, 2010
17
a b
Friday, June 18, 2010
18
Friday, June 18, 2010
18
Friday, June 18, 2010
18
Friday, June 18, 2010
18
Friday, June 18, 2010
19
Friday, June 18, 2010
20
b (theLock) a (theLock)
Friday, June 18, 2010
20
b (theLock) a (theLock)
Friday, June 18, 2010
20
b (theLock) a (theLock)
Friday, June 18, 2010
20
b (theLock) a (theLock)
Friday, June 18, 2010
21
Friday, June 18, 2010
21
Friday, June 18, 2010
21
Friday, June 18, 2010
22
Friday, June 18, 2010
23
a (lock) b a.end.hb(b.start)? a.locks(lock)? b.end.hb(a.start)? b.locks(lock)?
Friday, June 18, 2010
23
a (lock) b a.end.hb(b.start)? a.locks(lock)? b.end.hb(a.start)? b.locks(lock)?
Friday, June 18, 2010
23
a (lock) b a.end.hb(b.start)? a.locks(lock)? b.end.hb(a.start)? b.locks(lock)?
Friday, June 18, 2010
23
a (lock) b a.end.hb(b.start)? true a.locks(lock)? b.end.hb(a.start)? b.locks(lock)?
Friday, June 18, 2010
23
a (lock) b a.end.hb(b.start)? true a.locks(lock)? b.end.hb(a.start)? b.locks(lock)?
Friday, June 18, 2010
23
a (lock) b a.end.hb(b.start)? true a.locks(lock)? b.end.hb(a.start)? b.locks(lock)?
Friday, June 18, 2010
23
a (lock) b a.end.hb(b.start)? true a.locks(lock)? b.end.hb(a.start)? b.locks(lock)? true
Friday, June 18, 2010
23
a (lock) b a.end.hb(b.start)? true a.locks(lock)? b.end.hb(a.start)? b.locks(lock)? true
Friday, June 18, 2010
23
a (lock) b a.end.hb(b.start)? true a.locks(lock)? b.end.hb(a.start)? b.locks(lock)? true false
Friday, June 18, 2010
23
a (lock) b a.end.hb(b.start)? true a.locks(lock)? b.end.hb(a.start)? b.locks(lock)? true false
Friday, June 18, 2010
23
a (lock) b a.end.hb(b.start)? true a.locks(lock)? b.end.hb(a.start)? b.locks(lock)? true false false
Friday, June 18, 2010
24
Friday, June 18, 2010
25
Friday, June 18, 2010
25
Friday, June 18, 2010
26
Friday, June 18, 2010
27
Friday, June 18, 2010
27
Friday, June 18, 2010
27
Friday, June 18, 2010
27
Friday, June 18, 2010
27
Friday, June 18, 2010
28
Friday, June 18, 2010
28
Friday, June 18, 2010
28
Friday, June 18, 2010
28
Friday, June 18, 2010
29
Friday, June 18, 2010
29
Friday, June 18, 2010
29
Friday, June 18, 2010
29
Friday, June 18, 2010
29
x
Friday, June 18, 2010
29
x
Friday, June 18, 2010
29
x (theLock)
Friday, June 18, 2010
29
x (theLock)
Friday, June 18, 2010
29
x (theLock)
Friday, June 18, 2010
29
x (theLock)
Friday, June 18, 2010
30
Friday, June 18, 2010
31
Friday, June 18, 2010
31
Friday, June 18, 2010
31
Friday, June 18, 2010
32
Friday, June 18, 2010
33
Friday, June 18, 2010
34
Friday, June 18, 2010
35
Friday, June 18, 2010
36
Friday, June 18, 2010
37
Friday, June 18, 2010
38
Friday, June 18, 2010
39
Friday, June 18, 2010
40
void method( Interval a, Interval b) { a.end.addHb(b.start); } a b
Friday, June 18, 2010
40
void method( Interval a, Interval b) { a.end.addHb(b.start); } a b
Friday, June 18, 2010
41
void method( Interval a, Interval b) { a.end.addHb(b.start); } a b
c
Friday, June 18, 2010
41
void method( Interval a, Interval b) { a.end.addHb(b.start); } a b
c
Friday, June 18, 2010
// Signal this thread is done sync[id]++; // Wait for neighbors; while(sync[id-1] < sync[id]) ; while(sync[id+1] < sync[id]) ;
42
Friday, June 18, 2010
// Signal this thread is done sync[id]++; // Wait for neighbors; while(sync[id-1] < sync[id]) ; while(sync[id+1] < sync[id]) ;
42
Friday, June 18, 2010
// Signal this thread is done sync[id]++; // Wait for neighbors; while(sync[id-1] < sync[id]) ; while(sync[id+1] < sync[id]) ;
42
Friday, June 18, 2010
// Signal this thread is done sync[id]++; // Wait for neighbors; while(sync[id-1] < sync[id]) ; while(sync[id+1] < sync[id]) ;
42
Friday, June 18, 2010
// Signal this thread is done sync[id]++; // Wait for neighbors; while(sync[id-1] < sync[id]) ; while(sync[id+1] < sync[id]) ;
42
Friday, June 18, 2010
// Signal this thread is done sync[id]++; // Wait for neighbors; while(sync[id-1] < sync[id]) ; while(sync[id+1] < sync[id]) ;
42
Friday, June 18, 2010
43
Friday, June 18, 2010
43
Friday, June 18, 2010
43
Friday, June 18, 2010
43
Friday, June 18, 2010
44
Friday, June 18, 2010
45
Friday, June 18, 2010
45
Friday, June 18, 2010
45
Friday, June 18, 2010
46
Friday, June 18, 2010
46
Friday, June 18, 2010
46
Friday, June 18, 2010