<<

Introduction to Parallel

[email protected] October 2015

1 Why parallel?

Speed up – Solve a problem faster → more processing power (a.k.a. strong scaling)

Scale up – Solve a larger problem → more memory and network capacity (a.k.a. weak scaling)

Scale out – Solve many problems → more storage capacity

2 Agenda

1. General concepts 2. Hardware 3. Programming models 4. User tools

3 1.

General concepts

4 Amdahl's Law

5

https://en.wikipedia.org/wiki/Amdahl%27s_law Gustafson's law

“Scaling can be linear anyway providing sufficiently enough data are used.”

6

https://en.wikipedia.org/wiki/Gustafson%27s_law Parallel overhead

7

https://computing.llnl.gov/tutorials/parallel_comp/images/helloWorldParallelCallgraph.gif How parallel?

● Parallelization means – distributing work to processors – distributing data (if memory is distributed)

● and – of the distributed work – communication of remote data to local (if memory is distributed)

8 Decomposition

● Work decomposition : task-level parallelism

● Data decomposition : data-level parallelism

● Domain decomposition : decomposition of work and data is done in a higher model, e.g. in the reality

9 Collaboration

● Synchronous (SIMD) at the processor level

● Fine-grained parallelism if subtasks must communicate many times per second (instruction level); loosely synchronous

● Coarse-grained parallelism if they do not communicate many times per second (function-call level)

if they rarely or never have to communicate (asynchronous)

10 Parallel programming paradigms

● Task-farming (master/slave or )

● Pipelining (A->B->C, one per task concurrently)

● SPMD (pre-defined number of processes created)

● Divide and Conquer (processes spawned at need and report their result to the parent)

● Speculative parallelism (processes spawned and result possibly discarded)

11 2.

Hardware

12 At the processor level

● Instruction-level parallelism (ILP) – – Superscalar execution – Out-of-order execution –

● Single Instruction Multiple Data (SIMD)

13 At the level

● Multithreading – SMP – NUMA

● Accelerators

14 At the system level

Distributed computing – Grids – Clusters – Cloud

15

16 Cluster computing

17

18

19 3.

Programming models

20 Programming models

● CUDA, OpenCL

● PThreads, OpenMP, TBB

● MPI

● CoArray, UPC

● MapReduce

● Boinc

21 CUDA, OpenCL (own session)

● Single Machine / Multiple devices

● Work decomposition

● Single Program Multiple Data

● Synchronous (SIMD)

22 CUDA (/C++/)

23

http://computer-graphics.se/hello-world-for-.html OpenCL (C/C++)

24

http://www.fixstars.com/en/opencl/book/OpenCLProgrammingBook/first--program/ Pthreads, OpenMP (own session)

● Shared memory

● Single machine

● Work decomposition

● Single Program Multiple Data

● Fine-grained/Coarse-grained parallelism

25 Pthreads

26

https://en.wikipedia.org/wiki/POSIX_Threads OpenMP (C/Fortran)

27

https://en.wikipedia.org/wiki/OpenMP Threading Building Blocks

● Shared memory

● Single machine

● Data decomposition, Work decomposition

● Single Program Multiple Data

● Fine-grained parallelism

28 Threading Building Blocks (C++)

29

http://www.ibm.com/developerworks/aix/library/au-intelthreadbuilding/ Passing Interface (own session)

● Multi-machine (Cluster computing)

● Data decomposition, Work decomposition

● Single Program Multiple Data

● Coarse-grained parallelism

30 MPI (C/Fortran)

31

https://en.wikipedia.org/wiki/Message_Passing_Interface Partitioned global

● Shared memory

● Multi-machine (Cluster computing)

● Data decomposition, Work decomposition

● Single Program Multiple Data

● Coarse-grained parallelism

32 Co-Array Fortran

33

https://en.wikipedia.org/wiki/Coarray_Fortran UPC (C)

34

http://www.upc.mtu.edu/tutorials/helloworld.html MapReduce, Boinc

● Distributed memory

● Multi-machine (Distributed computing, Cloud computing)

● Data decomposition

● Divide and Conquer

● Embarrassingly parallel

35 /Reduce (Java, Python, R, ...)

36

http://discoproject.org/ Boinc (C)

37

http://www.spy-hill.com/help/boinc/hello.html 4.

User tools when you cannot modify the program

38 Parallel processes in Bash

39 Parallel processes in Bash

40 One program and many files

41 Several programs and one file

42 One program and one large file

Need recent version of Coreutils/8.22-goolf-1.4.10 43 Several programs and many files

44 Several programs and many files

45 Summary

● You have either – one very large file to process

● with one program (split – task farming) ● with several programs (pipes, fifo – ) – many files to process

● with one program (xargs – task farming) ● with many programs ( – divide and conquer) ● Always embarrassingly parallel, work decomposition

46 GNU Parallel

● Syntax: parallel command ::: argument list

47 GNU Parallel

● Syntax: {} as argument placeholder. Can be modified

48 GNU Parallel

● Syntax: --xapply

49 GNU Parallel

● Syntax: :::: arguments in file

50 GNU Parallel

● Syntax: --pipe

51 Other interesting options

-S Use remote servers through SSH -j n Run n jobs in parallel -k Keep same order --delay n Ensure there are n seconds between each start --timeout n Kill task after n seconds if still running

Author asks to be cited: O. Tange (2011): GNU Parallel - The Command-Line Power Tool, The USENIX Magazine, February 2011:42-47.

52 Exercises

● Can you reproduce the examples with ./lower and ./upper.sh using GNU Parallel?

53 Solutions

● One program and many files dfr@hmem00:~/parcomp $ time -k parallel ./lower.sh {} > res.txt ::: d?.txt

● one program and one large file dfr@hmem00:~/parcomp $ time cat d.txt | parallel -k -N1 --pipe ./lower.sh {} > res.txt

● several programs and several files dfr@hmem00:~/parcomp $ time { parallel ./lower.sh {} {.}.tmp ::: d?.txt ; parallel ./upper.sh {} {.}.res ::: d?.tmp ; }

54