From 69e0e77674555ec3819f8d95c9817665e7331008 Mon Sep 17 00:00:00 2001 From: Chao Zhan <chao.zhan@fu-berlin.de> Date: Wed, 14 Jun 2023 23:17:41 +0200 Subject: [PATCH] add MPI scatter example --- exercises/MPI_examples/scatter/Makefile | 20 +++++++++++ exercises/MPI_examples/scatter/scatter.c | 42 +++++++++++++++++++++++ slides/images/MPI-scatter.png | Bin 0 -> 32154 bytes slides/pages/recap.md | 24 +++++++++++++ 4 files changed, 86 insertions(+) create mode 100644 exercises/MPI_examples/scatter/Makefile create mode 100644 exercises/MPI_examples/scatter/scatter.c create mode 100644 slides/images/MPI-scatter.png diff --git a/exercises/MPI_examples/scatter/Makefile b/exercises/MPI_examples/scatter/Makefile new file mode 100644 index 0000000..73463b9 --- /dev/null +++ b/exercises/MPI_examples/scatter/Makefile @@ -0,0 +1,20 @@ +PROG = scatter +OBJECTS = scatter.o +CC = mpicc +CFLAGS = -Wall -std=c11 +CFLAGS += -I. # add the current directory to the include path + +$(PROG): $(OBJECTS) # link the object files into a binary + $(CC) $(CFLAGS) $^ -o $@ + +.Phone: run +run: $(PROG) # build and run the program + mpirun ./$(PROG) + +$(OBJECTS): %.o: %.c # compile the source files into object files + $(CC) $(CFLAGS) -c $< + +.PHONY: clean +clean: # remove the object files and the binary + rm -f $(OBJECTS) $(PROG) + diff --git a/exercises/MPI_examples/scatter/scatter.c b/exercises/MPI_examples/scatter/scatter.c new file mode 100644 index 0000000..eb1fef8 --- /dev/null +++ b/exercises/MPI_examples/scatter/scatter.c @@ -0,0 +1,42 @@ +#include <mpi.h> +#include <stdio.h> +#include <stdlib.h> + +#define SCATTER_NUM 10 + +int main(int argc, char **argv) { + + MPI_Init(&argc, &argv); + + // Get the number of processes + int num_processes; + MPI_Comm_size(MPI_COMM_WORLD, &num_processes); + + int *bigdata = malloc(SCATTER_NUM * num_processes * sizeof(int)); + int *localdata = malloc(SCATTER_NUM * sizeof(int)); + + for (int i = 0; i < 10 * num_processes; i++) { + bigdata[i] = i + 1; + } + + // Get the rank of the process + int rank; + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + + // Get the name of the processor + char processor_name[MPI_MAX_PROCESSOR_NAME]; + int name_len; + MPI_Get_processor_name(processor_name, &name_len); + + MPI_Scatter(bigdata, SCATTER_NUM, MPI_INT, localdata, SCATTER_NUM, MPI_INT, 0, + MPI_COMM_WORLD); + + printf("Process %d of %d on %s: localdata[10] = {", rank, num_processes, processor_name); + for (int i = 0; i < SCATTER_NUM; i++) { + printf("%d, ", localdata[i]); + } + printf("}\n"); + + // Finalize the MPI environment. No more MPI calls can be made after this + MPI_Finalize(); +} diff --git a/slides/images/MPI-scatter.png b/slides/images/MPI-scatter.png new file mode 100644 index 0000000000000000000000000000000000000000..ef7d1c18ea05e5cfc2e7780a7b7e89bc1b56db1b GIT binary patch literal 32154 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 literal 0 HcmV?d00001 diff --git a/slides/pages/recap.md b/slides/pages/recap.md index 261e2cb..fd69d3b 100644 --- a/slides/pages/recap.md +++ b/slides/pages/recap.md @@ -364,3 +364,27 @@ MPI_Bcast (void *data, int count, MPI_Datatype dtype, int root, MPI_Comm comm) - **MPI_Bcast completes only after all ranks in comm have made the call** See live demo. + +--- +title: Data Scatter +--- + +## Data Scatter + +```c +MPI_Scatter (void *sendbuf, int sendcount, MPI_Datatype sendtype, + void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm) +``` + +<div class="container flex justify-center mt-5"> + <img src="/images/MPI-scatter.png" class="block w-lg"/> +</div> + +### Notes + +- **sendbuf** must be large enough in order to supply **sendcount** elements +- data chunks are taken in increasing order following the receiver’s rank +- root also sends one data chunk to itself +- **for each chunk the amount of data sent must match the receive size** + +See live demo. -- GitLab