Merge branch 'main' of git.aspp.school:ASPP/2024-heraklion-parallel-python
This commit is contained in:
commit
c03778ca2f
|
@ -14,6 +14,7 @@ relative differences between the analytic result and the numerical result
|
||||||
for different values of the number of steps.
|
for different values of the number of steps.
|
||||||
|
|
||||||
**TASKS**:
|
**TASKS**:
|
||||||
|
|
||||||
0. Read `numerical_integration.py` and familiarize yourselves with the code.
|
0. Read `numerical_integration.py` and familiarize yourselves with the code.
|
||||||
1. Update the `main` function so that it calculates the numerical error without
|
1. Update the `main` function so that it calculates the numerical error without
|
||||||
any parallelization. You can use a for loop or `map`.
|
any parallelization. You can use a for loop or `map`.
|
||||||
|
@ -23,5 +24,6 @@ for different values of the number of steps.
|
||||||
What speed-up did you get?
|
What speed-up did you get?
|
||||||
|
|
||||||
**BONUS TASKS (very optional)**:
|
**BONUS TASKS (very optional)**:
|
||||||
|
|
||||||
5. Implement a parallel version with threads (using `multiprocessing.pool.ThreadPool`).
|
5. Implement a parallel version with threads (using `multiprocessing.pool.ThreadPool`).
|
||||||
6. Time this version, and hypothetize about the result.
|
6. Time this version, and hypothetize about the result.
|
||||||
|
|
40
exercises/exerciseB/map_example_codealong.py
Normal file
40
exercises/exerciseB/map_example_codealong.py
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
# Computer scientists love the Fibonacci sequence
|
||||||
|
# [https://en.wikipedia.org/wiki/Fibonacci_sequence], possibly
|
||||||
|
# described by Acharya Pingala in छन्दःशास्त्र (Chhandaḥśāstra).
|
||||||
|
#
|
||||||
|
# The basic definition is that the next item in the sequence
|
||||||
|
# if the sum of the two preceding items, and the two initial
|
||||||
|
# items and 0 and 1.
|
||||||
|
#
|
||||||
|
# We end up with [0, 1, 1, 2, 3, 5, 8, 13, ...]
|
||||||
|
|
||||||
|
def fibbo(n):
|
||||||
|
match n:
|
||||||
|
case 0 | 1:
|
||||||
|
return n
|
||||||
|
case _:
|
||||||
|
return fibbo(n-1) + fibbo(n-2)
|
||||||
|
|
||||||
|
# For example: the first few items in the sequence:
|
||||||
|
for n in range(36):
|
||||||
|
print(n, fibbo(n))
|
||||||
|
|
||||||
|
# A (nowadays) less commonly used way to construct the mapping
|
||||||
|
# from n to fibbo(n) is to use the map function.
|
||||||
|
# map returns a generator, and we call list to collect the numbers:
|
||||||
|
sequence = list(map(fibbo, range(36)))
|
||||||
|
print(sequence)
|
||||||
|
|
||||||
|
# To split the work between multiple Python processes, we can
|
||||||
|
# use the multiprocessing module:
|
||||||
|
import multiprocessing
|
||||||
|
|
||||||
|
pool = multiprocessing.Pool()
|
||||||
|
sequence = pool.map(fibbo, range(36))
|
||||||
|
print(sequence)
|
||||||
|
|
||||||
|
# We may use 'with' to clean up the pool after we're done with
|
||||||
|
# the workers:
|
||||||
|
with multiprocessing.Pool(10) as pool:
|
||||||
|
sequence = pool.map(fibbo, range(36))
|
||||||
|
print(sequence)
|
8
exercises/exerciseC/run_with_all_configurations.sh
Normal file → Executable file
8
exercises/exerciseC/run_with_all_configurations.sh
Normal file → Executable file
|
@ -1,5 +1,9 @@
|
||||||
# This is bash
|
#!/bin/bash
|
||||||
# It runs the python script multiple times with different arguments
|
set -ex
|
||||||
|
|
||||||
|
# This is a bash script.
|
||||||
|
# It runs the python program multiple times with different arguments.
|
||||||
|
|
||||||
for i in {1..5} # Number of processes
|
for i in {1..5} # Number of processes
|
||||||
do
|
do
|
||||||
for j in {1..5} # Number of threads
|
for j in {1..5} # Number of threads
|
||||||
|
|
1
slides/map_example_codealong.py
Symbolic link
1
slides/map_example_codealong.py
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
../exercises/exerciseB/map_example_codealong.py
|
Loading…
Reference in a new issue