easy parallel computing in perl5 for multi-core cpusin perl5 for multi-core cpus darko obradovic my...

36
Easy Parallel Computing in Perl5 for Multi-Core CPUs Darko Obradovic

Upload: others

Post on 13-Jul-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Easy Parallel Computing in Perl5 for Multi-Core CPUsin Perl5 for Multi-Core CPUs Darko Obradovic My history: 15 years of linear programming in Perl5 April 2007: First dual-core CPU

Easy Parallel Computingin Perl5

for Multi-Core CPUs

Darko Obradovic

Page 2: Easy Parallel Computing in Perl5 for Multi-Core CPUsin Perl5 for Multi-Core CPUs Darko Obradovic My history: 15 years of linear programming in Perl5 April 2007: First dual-core CPU

My history:15 years of

linear programmingin Perl5

Page 3: Easy Parallel Computing in Perl5 for Multi-Core CPUsin Perl5 for Multi-Core CPUs Darko Obradovic My history: 15 years of linear programming in Perl5 April 2007: First dual-core CPU

April 2007:First dual-core CPU

Page 4: Easy Parallel Computing in Perl5 for Multi-Core CPUsin Perl5 for Multi-Core CPUs Darko Obradovic My history: 15 years of linear programming in Perl5 April 2007: First dual-core CPU

October 2012:Xeon E5

(4x3,2GHz, 4x3MB Cache, 8 logical cores)+ 64GB of RAM

Page 5: Easy Parallel Computing in Perl5 for Multi-Core CPUsin Perl5 for Multi-Core CPUs Darko Obradovic My history: 15 years of linear programming in Perl5 April 2007: First dual-core CPU

since then:linear programming

= bad conscience

Page 6: Easy Parallel Computing in Perl5 for Multi-Core CPUsin Perl5 for Multi-Core CPUs Darko Obradovic My history: 15 years of linear programming in Perl5 April 2007: First dual-core CPU

August 2018:32-core CPU?

Page 7: Easy Parallel Computing in Perl5 for Multi-Core CPUsin Perl5 for Multi-Core CPUs Darko Obradovic My history: 15 years of linear programming in Perl5 April 2007: First dual-core CPU

… finally made me thinkingabout parallel programming

Page 8: Easy Parallel Computing in Perl5 for Multi-Core CPUsin Perl5 for Multi-Core CPUs Darko Obradovic My history: 15 years of linear programming in Perl5 April 2007: First dual-core CPU

A search for "parallel"on CPAN returns 727 resultsmodules for different purposes

Page 9: Easy Parallel Computing in Perl5 for Multi-Core CPUsin Perl5 for Multi-Core CPUs Darko Obradovic My history: 15 years of linear programming in Perl5 April 2007: First dual-core CPU

parallel

async

distributed

master/slave

Page 10: Easy Parallel Computing in Perl5 for Multi-Core CPUsin Perl5 for Multi-Core CPUs Darko Obradovic My history: 15 years of linear programming in Perl5 April 2007: First dual-core CPU

parallelsimultaneous calculation

usually splits calculations todifferent processes

typically uses forking

Parallel::ForkManager

Page 11: Easy Parallel Computing in Perl5 for Multi-Core CPUsin Perl5 for Multi-Core CPUs Darko Obradovic My history: 15 years of linear programming in Perl5 April 2007: First dual-core CPU

asyncnon-blocking execution

usually to overcome I/O latencyand for event-driven programming

typically uses callbacks

LWP::Parallel

Page 12: Easy Parallel Computing in Perl5 for Multi-Core CPUsin Perl5 for Multi-Core CPUs Darko Obradovic My history: 15 years of linear programming in Perl5 April 2007: First dual-core CPU

master/slaveparallel server implementation

usually to handle many requests,event-driven dispatching

typically uses workers/preforking

Parallel::PreforkParallel::ScoreBoard

Page 13: Easy Parallel Computing in Perl5 for Multi-Core CPUsin Perl5 for Multi-Core CPUs Darko Obradovic My history: 15 years of linear programming in Perl5 April 2007: First dual-core CPU

distributedsimultaneous distributed calculation

distributes larger chunks of workto different machines

typically uses MapReduce

Parallel::MapReduce

Page 14: Easy Parallel Computing in Perl5 for Multi-Core CPUsin Perl5 for Multi-Core CPUs Darko Obradovic My history: 15 years of linear programming in Perl5 April 2007: First dual-core CPU

parallelsimultaneous calculation

usually splits calculations todifferent processes

typically uses forking

Parallel::ForkManager

Page 15: Easy Parallel Computing in Perl5 for Multi-Core CPUsin Perl5 for Multi-Core CPUs Darko Obradovic My history: 15 years of linear programming in Perl5 April 2007: First dual-core CPU

processes vs threads

Page 16: Easy Parallel Computing in Perl5 for Multi-Core CPUsin Perl5 for Multi-Core CPUs Darko Obradovic My history: 15 years of linear programming in Perl5 April 2007: First dual-core CPU

processprogram + data + resources

can be forked= clone of the process

very robustno shared address space

Page 17: Easy Parallel Computing in Perl5 for Multi-Core CPUsin Perl5 for Multi-Core CPUs Darko Obradovic My history: 15 years of linear programming in Perl5 April 2007: First dual-core CPU

UNIX thread"lightweight" process

shared address space & resources→ more efficient, more fragile

create, join, yield, ...

perl threadno shared address space

Page 18: Easy Parallel Computing in Perl5 for Multi-Core CPUsin Perl5 for Multi-Core CPUs Darko Obradovic My history: 15 years of linear programming in Perl5 April 2007: First dual-core CPU

so how to start in Perl5?

TIMTOWTDI

Page 19: Easy Parallel Computing in Perl5 for Multi-Core CPUsin Perl5 for Multi-Core CPUs Darko Obradovic My history: 15 years of linear programming in Perl5 April 2007: First dual-core CPU

subs::parallelParallel::Loops

Parallel::Simple::DynamicParallel::ForkManager

Parallel::SimpleParallel::Iterator

Parallel::parallel_mapParallel::Runner

Parallel::QueueWorkerParallel::QueueParallel::Jobs

Parallel::Forker

Proc::ParallelParallel::DataPipeParallel::Workers

Job::ManagerParallel::SubForkParallel::SubArrayParallel::MapReduceParallel::SupervisorProc::ParallelLoop

Parallel::Fork::BossWorkerParallel::ForkControlParallel::ThreadContext

CPAN modules suitable forsimultaneous calculation

on Multi-Core CPUs

Page 20: Easy Parallel Computing in Perl5 for Multi-Core CPUsin Perl5 for Multi-Core CPUs Darko Obradovic My history: 15 years of linear programming in Perl5 April 2007: First dual-core CPU

laziness...we want to keep it simple!

no process/thread managementor synchronization

“get it parallelized in a minute!”

Page 21: Easy Parallel Computing in Perl5 for Multi-Core CPUsin Perl5 for Multi-Core CPUs Darko Obradovic My history: 15 years of linear programming in Perl5 April 2007: First dual-core CPU

Parallel::Simple

demo example

Page 22: Easy Parallel Computing in Perl5 for Multi-Core CPUsin Perl5 for Multi-Core CPUs Darko Obradovic My history: 15 years of linear programming in Perl5 April 2007: First dual-core CPU

Parallel::Simple

● no return values

● changes in memory are lost

→ only parts not changing state

● makes sense with 2+ cores

Page 23: Easy Parallel Computing in Perl5 for Multi-Core CPUsin Perl5 for Multi-Core CPUs Darko Obradovic My history: 15 years of linear programming in Perl5 April 2007: First dual-core CPU

Parallel::parallel_map

demo example

Page 24: Easy Parallel Computing in Perl5 for Multi-Core CPUsin Perl5 for Multi-Core CPUs Darko Obradovic My history: 15 years of linear programming in Perl5 April 2007: First dual-core CPU

Parallel::parallel_map

● only maps without side-effects

● efficiently with N forks

→ from %ENV or /proc/cpuinfo

● merges return values

Page 25: Easy Parallel Computing in Perl5 for Multi-Core CPUsin Perl5 for Multi-Core CPUs Darko Obradovic My history: 15 years of linear programming in Perl5 April 2007: First dual-core CPU

subs::parallel

demo example

Page 26: Easy Parallel Computing in Perl5 for Multi-Core CPUsin Perl5 for Multi-Core CPUs Darko Obradovic My history: 15 years of linear programming in Perl5 April 2007: First dual-core CPU

subs::parallel

● one fork per sub call

● waits when return values are used

● based on Perl threads

● seems to have issues

Page 27: Easy Parallel Computing in Perl5 for Multi-Core CPUsin Perl5 for Multi-Core CPUs Darko Obradovic My history: 15 years of linear programming in Perl5 April 2007: First dual-core CPU

on my Xeon:4 processes = speedup 3

Page 28: Easy Parallel Computing in Perl5 for Multi-Core CPUsin Perl5 for Multi-Core CPUs Darko Obradovic My history: 15 years of linear programming in Perl5 April 2007: First dual-core CPU

what about logical cores?(Intel's HyperThreading)

Page 29: Easy Parallel Computing in Perl5 for Multi-Core CPUsin Perl5 for Multi-Core CPUs Darko Obradovic My history: 15 years of linear programming in Perl5 April 2007: First dual-core CPU

the problem:CPU pipelining

Page 30: Easy Parallel Computing in Perl5 for Multi-Core CPUsin Perl5 for Multi-Core CPUs Darko Obradovic My history: 15 years of linear programming in Perl5 April 2007: First dual-core CPU
Page 31: Easy Parallel Computing in Perl5 for Multi-Core CPUsin Perl5 for Multi-Core CPUs Darko Obradovic My history: 15 years of linear programming in Perl5 April 2007: First dual-core CPU

the issue:pipeline is partly empty

Page 32: Easy Parallel Computing in Perl5 for Multi-Core CPUsin Perl5 for Multi-Core CPUs Darko Obradovic My history: 15 years of linear programming in Perl5 April 2007: First dual-core CPU

Intel PIII:11 pipeline stages

Intel P4:20 pipeline stages

Page 33: Easy Parallel Computing in Perl5 for Multi-Core CPUsin Perl5 for Multi-Core CPUs Darko Obradovic My history: 15 years of linear programming in Perl5 April 2007: First dual-core CPU

the solution:share a physical pipelinefor two logical threads

Page 34: Easy Parallel Computing in Perl5 for Multi-Core CPUsin Perl5 for Multi-Core CPUs Darko Obradovic My history: 15 years of linear programming in Perl5 April 2007: First dual-core CPU

on my Xeon:4 processes = speedup 38 processes = speedup 4

Page 35: Easy Parallel Computing in Perl5 for Multi-Core CPUsin Perl5 for Multi-Core CPUs Darko Obradovic My history: 15 years of linear programming in Perl5 April 2007: First dual-core CPU

… so parallelizing is very simplein Perl5 for some problems

Page 36: Easy Parallel Computing in Perl5 for Multi-Core CPUsin Perl5 for Multi-Core CPUs Darko Obradovic My history: 15 years of linear programming in Perl5 April 2007: First dual-core CPU

… so use it and enjoythe extra free time ;-)