High Level Parallel Processing

High Level Parallel Processing

High Level Parallel Processing 1 Multiprocessing in Python scripting in computational science the multiprocessing module numerical integration with multiple processes 2 Multithreading with Julia about Julia using Base.Threads MCS 572 Lecture 3 Introduction to Supercomputing Jan Verschelde, 15 January 2021 Introduction to Supercomputing (MCS 572) high level parallelism L-3 15January2021 1/32 High Level Parallel Processing 1 Multiprocessing in Python scripting in computational science the multiprocessing module numerical integration with multiple processes 2 Multithreading with Julia about Julia using Base.Threads Introduction to Supercomputing (MCS 572) high level parallelism L-3 15January2021 2/32 computations with Python Advantages of the scripting language Python: educational, good for novice programmers, modules for scientfic computing: NumPy, SciPy, SymPy. Sage, a free open source mathematics software system, uses Python to interface many open source software packages. 1 π Our example: 1 − x 2dx = . Z0 p 4 We will use the Simpson rule (available in SciPy) as a relatively computational intensive example. Introduction to Supercomputing (MCS 572) high level parallelism L-3 15January2021 3/32 interactive computing $ python3 Python 3.7.3 (default, Mar 27 2019, 22:11:17) [GCC 7.3.0] :: Anaconda, Inc. on linux Type "help", "copyright", "credits" or "license" for more >>> from scipy.integrate import simps >>> from numpy import linspace >>> from numpy.lib.scimath import sqrt >>> f = lambda x: sqrt(1-x**2) >>> r = linspace(0,1,1000) >>> y = f(r) >>> I = simps(y,r) >>> 4*I 3.1415703366671104 >>> Introduction to Supercomputing (MCS 572) high level parallelism L-3 15January2021 4/32 the script simpson4pi.py from scipy.integrate import simps from numpy import linspace, pi from numpy.lib.scimath import sqrt f = lambda x: sqrt(1-x**2) for k in range(2,9): x = linspace(0,1,10**k); y = f(x); I = 4*simps(y,x) print(’10^%d’ % k, \ ’%.16e’ % I, \ ’%.2e’ % abs(I - pi)) Introduction to Supercomputing (MCS 572) high level parallelism L-3 15January2021 5/32 running the script simpson4pi.py We type at the command prompt $: $ time python3 simpson4pi.py 10^2 3.1408763613344828e+00 7.16e-04 10^3 3.1415703366671104e+00 2.23e-05 10^4 3.1415919488981889e+00 7.05e-07 10^5 3.1415926313087348e+00 2.23e-08 10^6 3.1415926528852145e+00 7.05e-10 10^7 3.1415926535675127e+00 2.23e-11 10^8 3.1415926535890946e+00 6.99e-13 real 0m7.231s user 0m8.219s sys 0m14.439s Executed on an Intel Xeon E5-2699v4 Broadwell at 2.20GHz. Introduction to Supercomputing (MCS 572) high level parallelism L-3 15January2021 6/32 timing a run of the script simpson4pi1.py from scipy.integrate import simps from numpy import linspace, pi from numpy.lib.scimath import sqrt f = lambda x: sqrt(1-x**2) r = linspace(0, 1, 10**8) y = f(r) I = 4*simps(y, r) print(’%.16e’ % I, ’%.2e’ % abs(I - pi)) $ time python simpson4pi1.py 3.1415926535890946e+00 6.99e-13 real 0m6.586s user 0m7.766s sys 0m14.135s On Windows 10: Measure-Command {python3 simpson4pi1.py}. Introduction to Supercomputing (MCS 572) high level parallelism L-3 15January2021 7/32 High Level Parallel Processing 1 Multiprocessing in Python scripting in computational science the multiprocessing module numerical integration with multiple processes 2 Multithreading with Julia about Julia using Base.Threads Introduction to Supercomputing (MCS 572) high level parallelism L-3 15January2021 8/32 using multiprocessing from multiprocessing import Process import os from time import sleep def say_hello(name, t): """ Process with name says hello. """ print(’hello from’, name) print(’parent process :’, os.getppid()) print(’process id :’, os.getpid()) print(name, ’sleeps’, t, ’seconds’) sleep(t) print(name, ’wakes up’) Introduction to Supercomputing (MCS 572) high level parallelism L-3 15January2021 9/32 creating the processes The script continues: pA = Process(target=say_hello, args = (’A’,2,)) pB = Process(target=say_hello, args = (’B’,1,)) pA.start(); pB.start() print(’waiting for processes to wake up...’) pA.join(); pB.join() print(’processes are done’) Introduction to Supercomputing (MCS 572) high level parallelism L-3 15January2021 10/32 running the script $ python multiprocess.py waiting for processes to wake up... hello from A parent process : 737 process id : 738 A sleeps 2 seconds hello from B parent process : 737 process id : 739 B sleeps 1 seconds B wakes up A wakes up processes are done Introduction to Supercomputing (MCS 572) high level parallelism L-3 15January2021 11/32 High Level Parallel Processing 1 Multiprocessing in Python scripting in computational science the multiprocessing module numerical integration with multiple processes 2 Multithreading with Julia about Julia using Base.Threads Introduction to Supercomputing (MCS 572) high level parallelism L-3 15January2021 12/32 the script simpson4pi2.py from multiprocessing import Process, Queue from scipy.integrate import simps from numpy import linspace, pi from numpy.lib.scimath import sqrt def call_simpson(fun, a, b, n, q): """ Calls Simpson rule to integrate fun over [a, b] using n intervals. Adds the result to the queue q. """ x = linspace(a, b, n) y = fun(x) I = simps(y, x) q.put(I) Introduction to Supercomputing (MCS 572) high level parallelism L-3 15January2021 13/32 the main program def main(): """ The number of processes is given at the command line. """ from sys import argv if len(argv) < 2: print(’Enter the number of processes’) print(’at the command line.’) return npr = int(argv[1]) We want to run the script as $ time python3 simpson4pi2.py 4 to time the running of the script with 4 processes. Introduction to Supercomputing (MCS 572) high level parallelism L-3 15January2021 14/32 defining processes and queues crc = lambda x: sqrt(1-x**2) nbr = 10**8 nbrsam = nbr//npr intlen = 1.0/npr queues = [Queue() for _ in range(npr)] procs = [] (left, right) = (0, intlen) for k in range(1, npr+1): procs.append(Process(target=call_simpson, \ args = (crc, left, right, nbrsam, queues[k-1]))) (left, right) = (right, right+intlen) Introduction to Supercomputing (MCS 572) high level parallelism L-3 15January2021 15/32 starting processes and collecting results for process in procs: process.start() for process in procs: process.join() app = 4*sum([q.get() for q in queues]) print(’%.16e’ % app, ’%.2e’ % abs(app - pi)) Introduction to Supercomputing (MCS 572) high level parallelism L-3 15January2021 16/32 checking for speedup $ time python3 simpson4pi1.py 3.1415926535890946e+00 6.99e-13 real 0m6.586s user 0m7.766s sys 0m14.135s $ time python3 simpson4pi2.py 2 3.1415926535890870e+00 7.06e-13 real 0m3.513s user 0m7.377s sys 0m12.589s Speedup: 6.586/3.513 ≈ 1.87. Introduction to Supercomputing (MCS 572) high level parallelism L-3 15January2021 17/32 double the number of processes ... $ time python3 simpson4pi2.py 4 3.1415926535890901e+00 7.03e-13 real 0m2.011s user 0m7.154s sys 0m11.701s $ time python3 simpson4pi2.py 8 3.1415926535890883e+00 7.05e-13 real 0m1.275s user 0m8.043s sys 0m12.920s $ Speedups: 6.586/2.011 ≈ 3.27 and 6.586/1.275 ≈ 5.17. Introduction to Supercomputing (MCS 572) high level parallelism L-3 15January2021 18/32 continue doubling the number of processes ... $ time python3 simpson4pi2.py 16 3.1415926535890875e+00 7.06e-13 real 0m0.953s user 0m10.095s sys 0m12.893s $ time python3 simpson4pi2.py 32 3.1415926535890901e+00 7.03e-13 real 0m0.904s user 0m14.154s sys 0m13.915s Speedups: 6.586/0.953 ≈ 6.91 6.586/0.904 ≈ 7.29. Introduction to Supercomputing (MCS 572) high level parallelism L-3 15January2021 19/32 running times and speedups Times in seconds obtained as time python3 simpson4pi2.py p for p = 2, 4, 8, 16, and 32, on two 22-core Intel Xeon E5-2699v4 Broadwell at 2.20GHz, with 256GB of internal memory at 2400MHz. For p = 1, time python3 simpson4pi1.py was used. p real user sys speedup 1 6.586 7.766 14.135 2 3.513 7.377 12.589 1.87 4 2.011 7.154 11.701 3.27 8 1.275 8.043 12.920 5.17 16 0.953 10.095 12.893 6.91 32 0.904 14.154 13.915 7.29 real time with p = 1 Speedups are computed as . real time with p tasks Introduction to Supercomputing (MCS 572) high level parallelism L-3 15January2021 20/32 High Level Parallel Processing 1 Multiprocessing in Python scripting in computational science the multiprocessing module numerical integration with multiple processes 2 Multithreading with Julia about Julia using Base.Threads Introduction to Supercomputing (MCS 572) high level parallelism L-3 15January2021 21/32 Why Julia? Julia is a new programming language. Write efficient code with scripts. Scripting languages make programmers more productive, but at the expense of execution efficiency. Online documentation: https://docs.julialang.org J. Bezanson, A. Edelman, S. Karpinski, and V. B. Shah. Julia: A fresh approach to numerical computing. SIAM Review, 59(1):65–98, 2017. Introduction to Supercomputing (MCS 572) high level parallelism L-3 15January2021 22/32 High Level Parallel Processing 1 Multiprocessing in Python scripting in computational science the multiprocessing module numerical integration with multiple processes 2 Multithreading with Julia about Julia using Base.Threads Introduction to Supercomputing (MCS 572) high level parallelism L-3 15January2021 23/32 launching Julia with many threads $ JULIA_NUM_THREADS=8 julia _ _ _ _(_)_ | Documentation: https://docs.julialang.org (_) |(_)(_) | _ _ _| |_ __ _ | Type "?" for help, "]?" for Pkg help. |||||||/_‘| | | | |_| | | | (_| | | Version 1.4.0-DEV.364 (2019-10-22) _/ |\__’_|_|_|\__’_| | Commit 5f077a67e8* (23 days old master) |__/ |

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    32 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us