2024-08-29 17:23:32 +02:00
|
|
|
# Exercise B: multiprocessing and map
|
2024-08-29 17:20:21 +02:00
|
|
|
|
|
|
|
Objective: introduce `map` and `Pool.map`.
|
|
|
|
|
|
|
|
In the `numerical_integration.py` file, we give Python code that calculates
|
|
|
|
the integral of a function in two different ways: numerically and analytically.
|
|
|
|
|
|
|
|
The given functions are `integrate` (numerical integration), `f` (the function
|
|
|
|
to integrate), and `F` (the analytical integral).
|
|
|
|
|
|
|
|
We want to check the precision of the numerical integration as a function of
|
|
|
|
the number of steps in the domain. To do this, we calculate and print the
|
|
|
|
relative differences between the analytic result and the numerical result
|
|
|
|
for different values of the number of steps.
|
|
|
|
|
|
|
|
**TASKS**:
|
|
|
|
0. Read `numerical_integration.py` and familiarize yourselves with the code.
|
|
|
|
1. Update the `main` function so that it calculates the numerical error without
|
|
|
|
any parallelization. You can use a for loop or `map`.
|
|
|
|
2. Note the execution time for this serial implementation.
|
|
|
|
3. Implement the parallel version using `multiprocessing.Pool`.
|
|
|
|
4. Compare the timing for the parallel version with the serial time.
|
|
|
|
What speed-up did you get?
|
|
|
|
|
|
|
|
**BONUS TASKS (very optional)**:
|
|
|
|
5. Implement a parallel version with threads (using `multiprocessing.pool.ThreadPool`).
|
|
|
|
6. Time this version, and hypothetize about the result.
|