Download - GPars: Parallelism the Right Way
![Page 1: GPars: Parallelism the Right Way](https://reader035.vdocuments.net/reader035/viewer/2022081816/547d1c27b4af9fce158b52b4/html5/thumbnails/1.jpg)
Copyright © 2011 Russel Winder 1
GParsParallelism the Right Way
Dr Russel Winder
It’z Interactive [email protected]
@russel_winder
![Page 2: GPars: Parallelism the Right Way](https://reader035.vdocuments.net/reader035/viewer/2022081816/547d1c27b4af9fce158b52b4/html5/thumbnails/2.jpg)
Copyright © 2011 Russel Winder 2
Moore's Law
● More transistors.
● More cores.
● More parallelism.
● Ubiqitous parallelism.
![Page 3: GPars: Parallelism the Right Way](https://reader035.vdocuments.net/reader035/viewer/2022081816/547d1c27b4af9fce158b52b4/html5/thumbnails/3.jpg)
Copyright © 2011 Russel Winder 3
Caveat
● Not all applications require parallelism.
● I/O bound best handled with single threaded event loop.
![Page 4: GPars: Parallelism the Right Way](https://reader035.vdocuments.net/reader035/viewer/2022081816/547d1c27b4af9fce158b52b4/html5/thumbnails/4.jpg)
Copyright © 2011 Russel Winder 4
Where Parallelism Is Needed
● Operating systems offer threads as access to the cores.
● Languages offer threads as infrastructure.
![Page 5: GPars: Parallelism the Right Way](https://reader035.vdocuments.net/reader035/viewer/2022081816/547d1c27b4af9fce158b52b4/html5/thumbnails/5.jpg)
Copyright © 2011 Russel Winder 5
Hummm...
● Shared memory multithreading is hard.
● Locks, semaphores, monitors, …
![Page 6: GPars: Parallelism the Right Way](https://reader035.vdocuments.net/reader035/viewer/2022081816/547d1c27b4af9fce158b52b4/html5/thumbnails/6.jpg)
Copyright © 2011 Russel Winder 6
Models of Management
● Actors
● Dataflow
● Communicating Sequential Processes (CSP)
● Data parallelism
![Page 7: GPars: Parallelism the Right Way](https://reader035.vdocuments.net/reader035/viewer/2022081816/547d1c27b4af9fce158b52b4/html5/thumbnails/7.jpg)
Copyright © 2011 Russel Winder 7
GPars
● A Groovy/Java implemented framework for easy expression of parallelism.
● Offers:– Actors
– Dataflow
– CSP
– Data parallelism
![Page 8: GPars: Parallelism the Right Way](https://reader035.vdocuments.net/reader035/viewer/2022081816/547d1c27b4af9fce158b52b4/html5/thumbnails/8.jpg)
Copyright © 2011 Russel Winder 8
Builds on…
● GPars builds on java.util.concurrent and all the JSR166 goodness.
![Page 9: GPars: Parallelism the Right Way](https://reader035.vdocuments.net/reader035/viewer/2022081816/547d1c27b4af9fce158b52b4/html5/thumbnails/9.jpg)
Copyright © 2011 Russel Winder 9
Usage
● GPars works supremely well in Groovy scripts that manage Groovy and Java classes.
● GPars works very well as a Java API.
![Page 10: GPars: Parallelism the Right Way](https://reader035.vdocuments.net/reader035/viewer/2022081816/547d1c27b4af9fce158b52b4/html5/thumbnails/10.jpg)
Copyright © 2011 Russel Winder 10
@Grab ( 'org.codehaus.gpars:gpars:1.0-SNAPSHOT' )
import groovyx.gpars.GParsPool
void execute ( final int numberOfTasks ) { GParsPool.withPool { final int n = 100000000i final double delta = 1.0d / n final startTimeNanos = System.nanoTime ( ) final int sliceSize = n / numberOfTasks final items = [ ] for ( int i in 0i ..< numberOfTasks ) { items << i } final pi = 4.0d * delta * items.collectParallel { taskId -> final int start = 1i + taskId * sliceSize final int end = ( taskId + 1i ) * sliceSize double sum = 0.0d ; for ( int i in start .. end ) { final double x = ( i - 0.5d ) * delta sum += 1.0d / ( 1.0d + x * x ) } sum }.sumParallel ( ) final elapseTime = ( System.nanoTime ( ) - startTimeNanos ) / 1e9 println ( '==== Groovy GPars GParsPool pi = ' + pi ) println ( '==== Groovy GPars GParsPool iteration count = ' + n ) println ( '==== Groovy GPars GParsPool elapse = ' + elapseTime ) println ( '==== Groovy GPars GParsPool processor count = ' + Runtime.getRuntime ( ).availableProcessors ( ) ) println ( '==== Groovy GPars GParsPool task count = ' + numberOfTasks ) }}
![Page 11: GPars: Parallelism the Right Way](https://reader035.vdocuments.net/reader035/viewer/2022081816/547d1c27b4af9fce158b52b4/html5/thumbnails/11.jpg)
Copyright © 2011 Russel Winder 11
@Grab ( 'org.codehaus.gpars:gpars:1.0-SNAPSHOT' )
import groovyx.gpars.ParallelEnhancer
void execute ( final int numberOfTasks ) { final int n = 100000000i final double delta = 1.0d / n final startTimeNanos = System.nanoTime ( ) final int sliceSize = n / numberOfTasks final items = [ ] for ( int i in 0i ..< numberOfTasks ) { items << i } ParallelEnhancer.enhanceInstance ( items ) final pi = 4.0d * delta * items.collectParallel { taskId -> final int start = 1i + taskId * sliceSize final int end = ( taskId + 1i ) * sliceSize double sum = 0.0d ; for ( int i in start .. end ) { final double x = ( i - 0.5d ) * delta sum += 1.0d / ( 1.0d + x * x ) } sum }.sumParallel ( ) final elapseTime = ( System.nanoTime ( ) - startTimeNanos ) / 1e9 println ( '==== Groovy GPars ParallelEnhancer pi = ' + pi ) println ( '==== Groovy GPars ParallelEnhancer iteration count = ' + n ) println ( '==== Groovy GPars ParallelEnhancer elapse = ' + elapseTime ) println ( '==== Groovy GPars ParallelEnhancer processor count = ' + Runtime.getRuntime ( ).availableProcessors ( ) ) println ( '==== Groovy GPars ParallelEnhancer task count = ' + numberOfTasks )}
![Page 12: GPars: Parallelism the Right Way](https://reader035.vdocuments.net/reader035/viewer/2022081816/547d1c27b4af9fce158b52b4/html5/thumbnails/12.jpg)
Copyright © 2011 Russel Winder 12
GPars
Check it out, you know you want to.
http://gpars.codehaus.org/
![Page 13: GPars: Parallelism the Right Way](https://reader035.vdocuments.net/reader035/viewer/2022081816/547d1c27b4af9fce158b52b4/html5/thumbnails/13.jpg)
Copyright © 2010 Russel Winder 13
Mandatory Book Advert
Python for Rookies
Sarah Mount, James Shuttleworth andRussel Winder
Thomson Learning
Buy these books!Buy these books!
Now called Cengage Learning.
Developing Java Software Third Edition
Russel Winder and Graham Roberts
Wiley
![Page 14: GPars: Parallelism the Right Way](https://reader035.vdocuments.net/reader035/viewer/2022081816/547d1c27b4af9fce158b52b4/html5/thumbnails/14.jpg)
Copyright © 2011 Russel Winder 14
GParsParallelism the Right Way
Dr Russel Winder
It’z Interactive [email protected]
@russel_winder