jdk8 : parallel programming made (too ?) easy

97

Upload: jose-paumard

Post on 10-May-2015

3.802 views

Category:

Education


3 download

TRANSCRIPT

Page 1: JDK8 : parallel programming made (too ?) easy
Page 2: JDK8 : parallel programming made (too ?) easy
Page 3: JDK8 : parallel programming made (too ?) easy
Page 4: JDK8 : parallel programming made (too ?) easy
Page 5: JDK8 : parallel programming made (too ?) easy
Page 6: JDK8 : parallel programming made (too ?) easy
Page 7: JDK8 : parallel programming made (too ?) easy
Page 8: JDK8 : parallel programming made (too ?) easy
Page 9: JDK8 : parallel programming made (too ?) easy
Page 10: JDK8 : parallel programming made (too ?) easy
Page 11: JDK8 : parallel programming made (too ?) easy

What did happen in 2005 ?

Page 12: JDK8 : parallel programming made (too ?) easy

What did happen in 2005 ?

Page 13: JDK8 : parallel programming made (too ?) easy

What did happen in 2005 ?

Page 14: JDK8 : parallel programming made (too ?) easy

From 2005 till…

Page 15: JDK8 : parallel programming made (too ?) easy

From 2005 till…

Page 16: JDK8 : parallel programming made (too ?) easy

Java parallel toolbox

Page 17: JDK8 : parallel programming made (too ?) easy

What is the Fork / Join about ?

Page 18: JDK8 : parallel programming made (too ?) easy
Page 19: JDK8 : parallel programming made (too ?) easy
Page 20: JDK8 : parallel programming made (too ?) easy
Page 21: JDK8 : parallel programming made (too ?) easy
Page 22: JDK8 : parallel programming made (too ?) easy
Page 23: JDK8 : parallel programming made (too ?) easy
Page 24: JDK8 : parallel programming made (too ?) easy
Page 25: JDK8 : parallel programming made (too ?) easy
Page 26: JDK8 : parallel programming made (too ?) easy
Page 27: JDK8 : parallel programming made (too ?) easy
Page 28: JDK8 : parallel programming made (too ?) easy

Fork / Join caveats

Page 29: JDK8 : parallel programming made (too ?) easy

Fork / Join caveats

Page 30: JDK8 : parallel programming made (too ?) easy
Page 31: JDK8 : parallel programming made (too ?) easy
Page 32: JDK8 : parallel programming made (too ?) easy
Page 33: JDK8 : parallel programming made (too ?) easy
Page 34: JDK8 : parallel programming made (too ?) easy
Page 35: JDK8 : parallel programming made (too ?) easy
Page 36: JDK8 : parallel programming made (too ?) easy
Page 37: JDK8 : parallel programming made (too ?) easy

Then comes the Parallel Arrays API

http://g.oswego.edu/dl/concurrency-interest/

Page 38: JDK8 : parallel programming made (too ?) easy

Then comes the Parallel Arrays API

ForkJoinPool pool = new ForkJoinPool() ; // package !

ParralelLongArray a = ParralelLongArray.create(pool) ;

Page 39: JDK8 : parallel programming made (too ?) easy

Then comes the Parallel Arrays API

Ops.LongOp add2 = new Ops.LongOp() {

@Override

public long op(long l1) {

return l1 + 2 ;

}

} ;

a2 = a.withMapping(add2) ;

Page 40: JDK8 : parallel programming made (too ?) easy

Then comes the Parallel Arrays API

Ops.LongPredicate filter = new Ops.LongPredicate() {

@Override

public boolean op(long l1) {

return l1 > 50 ;

}

}

a2 = a.withFilter(filter) ;

a2.all() ;

Page 41: JDK8 : parallel programming made (too ?) easy

Then comes the Parallel Arrays API

Ops.LongReducer reducer = new Ops.LongReducer() {

@Override

public long op(long l1, long l2) {

return l1 + l2 ;

}

}

long reducedValue = a.reduce(reducer, 0L) ;

Page 42: JDK8 : parallel programming made (too ?) easy

JDK 6 & 7

2 tools available :

- Fork / Join

- Parallel Arrays

Page 43: JDK8 : parallel programming made (too ?) easy

And then comes the JDK 8

Collection<Person> persons = ... ;

int maxAge = persons.stream().map(p -> p.getAge()).reduce(0, Math::max) ;

Collection<Person> oldies = new ArrayList<>() ;

persons.stream().filter(p -> p.age > 40).into(oldies) ;

Page 44: JDK8 : parallel programming made (too ?) easy

And then comes the JDK 8

Collection<Person> persons = ... ;

int maxAge = persons.stream().parallel()

.map(p -> p.getAge()).reduce(0, Math::max) ;

Collection<Person> oldies = new ArrayList<>() ;

persons.stream().parallel().filter(p -> p.age > 40).into(oldies) ;

Page 45: JDK8 : parallel programming made (too ?) easy

And then comes the JDK 8

public interface Spliterator<E> {

public Spliterator<E>[] splits() ;

public int getNaturalSplits() ;

}

http://www.parleys.com/#st=5&id=3125&sl=0

Page 46: JDK8 : parallel programming made (too ?) easy

How to use all that ?

Page 47: JDK8 : parallel programming made (too ?) easy

1st caveat : associativity

Page 48: JDK8 : parallel programming made (too ?) easy

Associativity

Page 49: JDK8 : parallel programming made (too ?) easy

Associativity

Page 50: JDK8 : parallel programming made (too ?) easy

Associativity

Page 51: JDK8 : parallel programming made (too ?) easy

2nd caveat : performance

long begin = System.nanoTime() ; List<String> hugeList = new ArrayList<>(N) ; // N = 16_000_000 for (int i = 0 ; i < N ; i++) { long l = random.nextLong() ; l = l > 0 ? l : -l ; hugeList.add(Long.toString(l, 32)) ; }

Page 52: JDK8 : parallel programming made (too ?) easy

Sorting

Page 53: JDK8 : parallel programming made (too ?) easy
Page 54: JDK8 : parallel programming made (too ?) easy
Page 55: JDK8 : parallel programming made (too ?) easy
Page 56: JDK8 : parallel programming made (too ?) easy
Page 57: JDK8 : parallel programming made (too ?) easy
Page 58: JDK8 : parallel programming made (too ?) easy
Page 59: JDK8 : parallel programming made (too ?) easy

Sorting performance

Page 60: JDK8 : parallel programming made (too ?) easy

Sorting performance

Page 61: JDK8 : parallel programming made (too ?) easy

Sorting performance

Page 62: JDK8 : parallel programming made (too ?) easy

Sorting performance

Page 63: JDK8 : parallel programming made (too ?) easy

Sorting performance

Page 64: JDK8 : parallel programming made (too ?) easy

Sorting performance

Page 65: JDK8 : parallel programming made (too ?) easy

Sorting performance

Page 66: JDK8 : parallel programming made (too ?) easy

Sorting performance

Page 67: JDK8 : parallel programming made (too ?) easy

Sorting performance

Page 68: JDK8 : parallel programming made (too ?) easy

An even worse case

Page 69: JDK8 : parallel programming made (too ?) easy

An even worse case

Page 70: JDK8 : parallel programming made (too ?) easy

An even worse case

Page 71: JDK8 : parallel programming made (too ?) easy
Page 72: JDK8 : parallel programming made (too ?) easy
Page 73: JDK8 : parallel programming made (too ?) easy
Page 74: JDK8 : parallel programming made (too ?) easy
Page 75: JDK8 : parallel programming made (too ?) easy
Page 76: JDK8 : parallel programming made (too ?) easy
Page 77: JDK8 : parallel programming made (too ?) easy
Page 78: JDK8 : parallel programming made (too ?) easy
Page 79: JDK8 : parallel programming made (too ?) easy
Page 80: JDK8 : parallel programming made (too ?) easy
Page 81: JDK8 : parallel programming made (too ?) easy
Page 82: JDK8 : parallel programming made (too ?) easy
Page 83: JDK8 : parallel programming made (too ?) easy
Page 84: JDK8 : parallel programming made (too ?) easy
Page 85: JDK8 : parallel programming made (too ?) easy

Arrays ? Going parallel is easy !

Page 86: JDK8 : parallel programming made (too ?) easy

Arrays ? Going parallel is easy…

Page 87: JDK8 : parallel programming made (too ?) easy

Arrays ? Going parallel is easy…

Page 88: JDK8 : parallel programming made (too ?) easy

3rd caveat

Page 89: JDK8 : parallel programming made (too ?) easy

3rd caveat

Page 90: JDK8 : parallel programming made (too ?) easy

Conclusion

Page 91: JDK8 : parallel programming made (too ?) easy

Conclusion

Page 92: JDK8 : parallel programming made (too ?) easy

Conclusion

Page 93: JDK8 : parallel programming made (too ?) easy

Conclusion

Page 94: JDK8 : parallel programming made (too ?) easy

Conclusion

Page 95: JDK8 : parallel programming made (too ?) easy

Thank you !

Page 96: JDK8 : parallel programming made (too ?) easy

Q&A

Page 97: JDK8 : parallel programming made (too ?) easy

Downloads