gpars: parallelism the right way

14
Copyright © 2011 Russel Winder 1 GPars Parallelism the Right Way Dr Russel Winder It’z Interactive Ltd [email protected] [email protected] @russel_winder

Upload: russel-winder

Post on 28-Nov-2014

1.667 views

Category:

Technology


1 download

DESCRIPTION

The lightning talk promoting GPars (http://gpars.codehaus.org) I gave at the LJC Unconference 2011

TRANSCRIPT

Page 1: GPars: Parallelism the Right Way

Copyright © 2011 Russel Winder 1

GParsParallelism the Right Way

Dr Russel Winder

It’z Interactive [email protected]

[email protected]

@russel_winder

Page 2: GPars: Parallelism the Right Way

Copyright © 2011 Russel Winder 2

Moore's Law

● More transistors.

● More cores.

● More parallelism.

● Ubiqitous parallelism.

Page 3: GPars: Parallelism the Right Way

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

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

Copyright © 2011 Russel Winder 5

Hummm...

● Shared memory multithreading is hard.

● Locks, semaphores, monitors, …

Page 6: GPars: Parallelism the Right Way

Copyright © 2011 Russel Winder 6

Models of Management

● Actors

● Dataflow

● Communicating Sequential Processes (CSP)

● Data parallelism

Page 7: GPars: Parallelism the Right Way

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

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

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

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

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

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

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

Copyright © 2011 Russel Winder 14

GParsParallelism the Right Way

Dr Russel Winder

It’z Interactive [email protected]

[email protected]

@russel_winder