2.5 KiB
title, date, author
| title | date | author |
|---|---|---|
| tdt4200ex3 -- 1d wave equation mpi | 2025-09-22 | fredrik robertsen |
theory questions
1)
by parallelizing the code i get quite a speed-up when running four processes. this is as i expected, because my laptop has four cores available for parallel processing. i have done threading previously, which also gave a speed-up for four threads. thus it makes sense that we get a speed-up here. it means we must have more intensive calculations than the overhead of using mpi.
here's an excerpt from make check:
./sequential
Total elapsed time: 5.115875 seconds
mpiexec -n 1 --oversubscribe ./parallel
Total elapsed time: 5.347622 seconds
mpiexec -n 4 --oversubscribe ./parallel
Total elapsed time: 1.729224 seconds
mpiexec -n 13 --oversubscribe ./parallel
Total elapsed time: 2.717839 seconds
assuming i have implemented timing correctly, mpi is slightly slower with only a single process, as expected. similarly, for 13 processes we get a speed-up, but not by as much due to the overhead of having more processes that are not necessarily capable of running in parallel -- they are limited by my hardware.
2)
this is a ring-buffer (halo) topology 3-stencil. a process only communicates with its nearest neighbor. the calculations are a form of finite differences.
3)
well-spoken AI answer:
point-to-point communication:
- communication between exactly two processes (sender ↔ receiver)
- examples:
mpi_send,mpi_recv,mpi_sendrecv
collective communication:
- communication involving all processes in a communicator
- examples:
mpi_bcast,mpi_reduce,mpi_allreduce,mpi_gather,mpi_scatter
key differences:
| aspect | point-to-point | collective |
|---|---|---|
| participants | 2 processes | all processes |
| synchronization | optional | required |
| optimization | manual | automatic |
| flexibility | high | limited patterns |
4)
int* a, b is a classic c pitfall. my auto-formatter is configured to correctly
format such a string to int *a, b, since pointers are a part of the variable
name definition, not the type. as such, b is merely an int.
this is slightly relevant for the entertaining c-ism buffer[0] == 0[buffer]
(this relates to the fact that indexing brackets are syntactic sugar for pointer
addition, which is commutative).