Skip to content

Commit 86e7967

Browse files
Merge pull request #184 from coding-for-reproducible-research/parallel_computing_lesson_objectives
Addition of Learning objectives for the parallel computing course
2 parents 19028bb + fe3433d commit 86e7967

File tree

7 files changed

+58
-7
lines changed

7 files changed

+58
-7
lines changed

_static/workshops_network_hpc.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -282,8 +282,8 @@ <h1></h1>
282282

283283

284284
// parsing and collecting nodes and edges from the python
285-
nodes = new vis.DataSet([{"color": "#FFD700", "id": "Introduction to Unix", "label": "Introduction to Unix", "level": 1, "shape": "dot", "size": 10, "title": "Course Name: Introduction to Unix\nCourse Pre-reqs: None\nSubsequent Courses: Introduction to HPC, Introduction to Version Control with Git and GitHub"}, {"color": "#FFD700", "id": "Introduction to HPC", "label": "Introduction to HPC", "level": 2, "shape": "dot", "size": 10, "title": "Course Name: Introduction to HPC\nCourse Pre-reqs: Introduction to Unix\nSubsequent Courses: None"}, {"color": "#FFD700", "id": "Introduction to Version Control with Git and GitHub", "label": "Introduction to Version Control with Git and GitHub", "level": 2, "shape": "dot", "size": 10, "title": "Course Name: Introduction to Version Control with Git and GitHub\nCourse Pre-reqs: Introduction to Unix\nSubsequent Courses: Intermediate Version Control"}, {"color": "#FFD700", "id": "Intermediate Version Control", "label": "Intermediate Version Control", "level": 3, "shape": "dot", "size": 10, "title": "Course Name: Intermediate Version Control\nCourse Pre-reqs: Introduction to Version Control with Git and GitHub\nSubsequent Courses: None"}, {"color": "#FFD700", "id": "Introduction to Python", "label": "Introduction to Python", "level": 1, "shape": "dot", "size": 10, "title": "Course Name: Introduction to Python\nCourse Pre-reqs: None\nSubsequent Courses: None"}]);
286-
edges = new vis.DataSet([{"arrows": "to", "from": "Introduction to Unix", "to": "Introduction to HPC", "width": 1}, {"arrows": "to", "from": "Introduction to Unix", "to": "Introduction to Version Control with Git and GitHub", "width": 1}, {"arrows": "to", "from": "Introduction to Version Control with Git and GitHub", "to": "Intermediate Version Control", "width": 1}]);
285+
nodes = new vis.DataSet([{"color": "#FFD700", "id": "Introduction to HPC", "label": "Introduction to HPC", "level": 2, "shape": "dot", "size": 10, "title": "Course Name: Introduction to HPC\nCourse Pre-reqs: Introduction to Unix\nSubsequent Courses: Parallel Computing"}, {"color": "#FFD700", "id": "Parallel Computing", "label": "Parallel Computing", "level": 3, "shape": "dot", "size": 10, "title": "Course Name: Parallel Computing\nCourse Pre-reqs: Introduction to HPC\nSubsequent Courses: None"}, {"color": "#FFD700", "id": "Introduction to Unix", "label": "Introduction to Unix", "level": 1, "shape": "dot", "size": 10, "title": "Course Name: Introduction to Unix\nCourse Pre-reqs: None\nSubsequent Courses: Introduction to HPC, Introduction to Version Control with Git and GitHub"}, {"color": "#FFD700", "id": "Introduction to Version Control with Git and GitHub", "label": "Introduction to Version Control with Git and GitHub", "level": 2, "shape": "dot", "size": 10, "title": "Course Name: Introduction to Version Control with Git and GitHub\nCourse Pre-reqs: Introduction to Unix\nSubsequent Courses: Intermediate Version Control"}, {"color": "#FFD700", "id": "Intermediate Version Control", "label": "Intermediate Version Control", "level": 3, "shape": "dot", "size": 10, "title": "Course Name: Intermediate Version Control\nCourse Pre-reqs: Introduction to Version Control with Git and GitHub\nSubsequent Courses: None"}, {"color": "#FFD700", "id": "Introduction to Python", "label": "Introduction to Python", "level": 1, "shape": "dot", "size": 10, "title": "Course Name: Introduction to Python\nCourse Pre-reqs: None\nSubsequent Courses: None"}]);
286+
edges = new vis.DataSet([{"arrows": "to", "from": "Introduction to HPC", "to": "Parallel Computing", "width": 1}, {"arrows": "to", "from": "Introduction to Unix", "to": "Introduction to HPC", "width": 1}, {"arrows": "to", "from": "Introduction to Unix", "to": "Introduction to Version Control with Git and GitHub", "width": 1}, {"arrows": "to", "from": "Introduction to Version Control with Git and GitHub", "to": "Intermediate Version Control", "width": 1}]);
287287

288288
nodeColors = {};
289289
allNodes = nodes.get({ returnType: "Object" });

_static/workshops_network_python_ds.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,7 @@ <h1></h1>
282282

283283

284284
// parsing and collecting nodes and edges from the python
285-
nodes = new vis.DataSet([{"color": "#4682B4", "id": "Introduction to Version Control with Git and GitHub", "label": "Introduction to Version Control with Git and GitHub", "level": 2, "shape": "dot", "size": 10, "title": "Course Name: Introduction to Version Control with Git and GitHub\nCourse Pre-reqs: Introduction to Unix\nSubsequent Courses: Intermediate Version Control"}, {"color": "#4682B4", "id": "Intermediate Version Control", "label": "Intermediate Version Control", "level": 3, "shape": "dot", "size": 10, "title": "Course Name: Intermediate Version Control\nCourse Pre-reqs: Introduction to Version Control with Git and GitHub\nSubsequent Courses: None"}, {"color": "#4682B4", "id": "Introduction to Unix", "label": "Introduction to Unix", "level": 1, "shape": "dot", "size": 10, "title": "Course Name: Introduction to Unix\nCourse Pre-reqs: None\nSubsequent Courses: Introduction to Version Control with Git and GitHub"}, {"color": "#4682B4", "id": "Introduction to Python", "label": "Introduction to Python", "level": 1, "shape": "dot", "size": 10, "title": "Course Name: Introduction to Python\nCourse Pre-reqs: None\nSubsequent Courses: Python for Data Analysis "}, {"color": "#4682B4", "id": "Python for Data Analysis ", "label": "Python for Data Analysis ", "level": 2, "shape": "dot", "size": 10, "title": "Course Name: Python for Data Analysis \nCourse Pre-reqs: Introduction to Python\nSubsequent Courses: None"}]);
285+
nodes = new vis.DataSet([{"color": "#FF6347", "id": "Introduction to Version Control with Git and GitHub", "label": "Introduction to Version Control with Git and GitHub", "level": 2, "shape": "dot", "size": 10, "title": "Course Name: Introduction to Version Control with Git and GitHub\nCourse Pre-reqs: Introduction to Unix\nSubsequent Courses: Intermediate Version Control"}, {"color": "#FF6347", "id": "Intermediate Version Control", "label": "Intermediate Version Control", "level": 3, "shape": "dot", "size": 10, "title": "Course Name: Intermediate Version Control\nCourse Pre-reqs: Introduction to Version Control with Git and GitHub\nSubsequent Courses: None"}, {"color": "#FF6347", "id": "Introduction to Unix", "label": "Introduction to Unix", "level": 1, "shape": "dot", "size": 10, "title": "Course Name: Introduction to Unix\nCourse Pre-reqs: None\nSubsequent Courses: Introduction to Version Control with Git and GitHub"}, {"color": "#FF6347", "id": "Introduction to Python", "label": "Introduction to Python", "level": 1, "shape": "dot", "size": 10, "title": "Course Name: Introduction to Python\nCourse Pre-reqs: None\nSubsequent Courses: Python for Data Analysis "}, {"color": "#FF6347", "id": "Python for Data Analysis ", "label": "Python for Data Analysis ", "level": 2, "shape": "dot", "size": 10, "title": "Course Name: Python for Data Analysis \nCourse Pre-reqs: Introduction to Python\nSubsequent Courses: None"}]);
286286
edges = new vis.DataSet([{"arrows": "to", "from": "Introduction to Version Control with Git and GitHub", "to": "Intermediate Version Control", "width": 1}, {"arrows": "to", "from": "Introduction to Unix", "to": "Introduction to Version Control with Git and GitHub", "width": 1}, {"arrows": "to", "from": "Introduction to Python", "to": "Python for Data Analysis ", "width": 1}]);
287287

288288
nodeColors = {};

_static/workshops_network_r_ds.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,7 @@ <h1></h1>
282282

283283

284284
// parsing and collecting nodes and edges from the python
285-
nodes = new vis.DataSet([{"color": "#FF6347", "id": "Introduction to R", "label": "Introduction to R", "level": 1, "shape": "dot", "size": 10, "title": "Course Name: Introduction to R\nCourse Pre-reqs: None\nSubsequent Courses: Regression analysis with R, Working With Data In R"}, {"color": "#FF6347", "id": "Regression analysis with R", "label": "Regression analysis with R", "level": 2, "shape": "dot", "size": 10, "title": "Course Name: Regression analysis with R\nCourse Pre-reqs: Introduction to R\nSubsequent Courses: Advanced Regression Analysis With R "}, {"color": "#FF6347", "id": "Working With Data In R", "label": "Working With Data In R", "level": 2, "shape": "dot", "size": 10, "title": "Course Name: Working With Data In R\nCourse Pre-reqs: Introduction to R\nSubsequent Courses: None"}, {"color": "#FF6347", "id": "Advanced Regression Analysis With R ", "label": "Advanced Regression Analysis With R ", "level": 3, "shape": "dot", "size": 10, "title": "Course Name: Advanced Regression Analysis With R \nCourse Pre-reqs: Regression analysis with R\nSubsequent Courses: None"}, {"color": "#FF6347", "id": "Introduction to Version Control with Git and GitHub", "label": "Introduction to Version Control with Git and GitHub", "level": 2, "shape": "dot", "size": 10, "title": "Course Name: Introduction to Version Control with Git and GitHub\nCourse Pre-reqs: Introduction to Unix\nSubsequent Courses: Intermediate Version Control"}, {"color": "#FF6347", "id": "Intermediate Version Control", "label": "Intermediate Version Control", "level": 3, "shape": "dot", "size": 10, "title": "Course Name: Intermediate Version Control\nCourse Pre-reqs: Introduction to Version Control with Git and GitHub\nSubsequent Courses: None"}, {"color": "#FF6347", "id": "Introduction to Unix", "label": "Introduction to Unix", "level": 1, "shape": "dot", "size": 10, "title": "Course Name: Introduction to Unix\nCourse Pre-reqs: None\nSubsequent Courses: Introduction to Version Control with Git and GitHub"}]);
285+
nodes = new vis.DataSet([{"color": "#4682B4", "id": "Introduction to R", "label": "Introduction to R", "level": 1, "shape": "dot", "size": 10, "title": "Course Name: Introduction to R\nCourse Pre-reqs: None\nSubsequent Courses: Regression analysis with R, Working With Data In R"}, {"color": "#4682B4", "id": "Regression analysis with R", "label": "Regression analysis with R", "level": 2, "shape": "dot", "size": 10, "title": "Course Name: Regression analysis with R\nCourse Pre-reqs: Introduction to R\nSubsequent Courses: Advanced Regression Analysis With R "}, {"color": "#4682B4", "id": "Working With Data In R", "label": "Working With Data In R", "level": 2, "shape": "dot", "size": 10, "title": "Course Name: Working With Data In R\nCourse Pre-reqs: Introduction to R\nSubsequent Courses: None"}, {"color": "#4682B4", "id": "Advanced Regression Analysis With R ", "label": "Advanced Regression Analysis With R ", "level": 3, "shape": "dot", "size": 10, "title": "Course Name: Advanced Regression Analysis With R \nCourse Pre-reqs: Regression analysis with R\nSubsequent Courses: None"}, {"color": "#4682B4", "id": "Introduction to Version Control with Git and GitHub", "label": "Introduction to Version Control with Git and GitHub", "level": 2, "shape": "dot", "size": 10, "title": "Course Name: Introduction to Version Control with Git and GitHub\nCourse Pre-reqs: Introduction to Unix\nSubsequent Courses: Intermediate Version Control"}, {"color": "#4682B4", "id": "Intermediate Version Control", "label": "Intermediate Version Control", "level": 3, "shape": "dot", "size": 10, "title": "Course Name: Intermediate Version Control\nCourse Pre-reqs: Introduction to Version Control with Git and GitHub\nSubsequent Courses: None"}, {"color": "#4682B4", "id": "Introduction to Unix", "label": "Introduction to Unix", "level": 1, "shape": "dot", "size": 10, "title": "Course Name: Introduction to Unix\nCourse Pre-reqs: None\nSubsequent Courses: Introduction to Version Control with Git and GitHub"}]);
286286
edges = new vis.DataSet([{"arrows": "to", "from": "Introduction to R", "to": "Regression analysis with R", "width": 1}, {"arrows": "to", "from": "Introduction to R", "to": "Working With Data In R", "width": 1}, {"arrows": "to", "from": "Regression analysis with R", "to": "Advanced Regression Analysis With R ", "width": 1}, {"arrows": "to", "from": "Introduction to Version Control with Git and GitHub", "to": "Intermediate Version Control", "width": 1}, {"arrows": "to", "from": "Introduction to Unix", "to": "Introduction to Version Control with Git and GitHub", "width": 1}]);
287287

288288
nodeColors = {};

individual_modules/parallel_computing/collective_comms.ipynb

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,21 @@
55
"id": "a65439eb-6056-49df-8ee7-e487c997fb66",
66
"metadata": {},
77
"source": [
8-
"# Collective MPI communication\n",
8+
"# Collective communication\n",
9+
"\n",
10+
"## Learning Objectives\n",
11+
"\n",
12+
"By the end of this lesson, learners will be able to:\n",
13+
"\n",
14+
"- Understand the concept of collective communication in MPI and when it is used in parallel computing.\n",
15+
"- Implement MPI broadcast operations to send data from one process to all other processes.\n",
16+
"- Utilize the scatter operation in MPI to distribute portions of a dataset across multiple processes for parallel processing.\n",
17+
"- Use the gather operation to collect data from multiple processes into a single dataset.\n",
18+
"- Apply global MPI operations, such as reduce, to aggregate data from multiple processes into a single result.\n",
19+
"- Recognize the significance of collective communication in large-scale simulations like weather and ocean modeling.\n",
20+
"\n",
21+
"\n",
22+
"## Collective MPI communication\n",
923
"\n",
1024
"We've now covered how to use the MPI communicator to get information about a programs parallel topology and send data between processes. This fundamental functionality is enough to begin creating scalable, parallel programs, but there is more MPI functionality that can make manipulating large sets of data more dynamic, simple and powerful.\n",
1125
"Let's start as usual, by opening a new Python script (collectivate_comms.py) and importing mpi4py:\n",

individual_modules/parallel_computing/hello_world.ipynb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,18 @@
77
"source": [
88
"# MPI\n",
99
"\n",
10+
"## Learning Objectives\n",
11+
"\n",
12+
"By the end of this lesson, learners will be able to:\n",
13+
"\n",
14+
"- Understand the concept of parallel computing and the role of MPI in facilitating communication between processes.\n",
15+
"- Import and utilize the `mpi4py` library in Python for parallel programming.\n",
16+
"- Execute a simple \"Hello World\" program using MPI and observe the behavior of multiple processes.\n",
17+
"- Implement a communicator in MPI to manage communication between different processes.\n",
18+
"- Identify the rank of a process and the total number of processes running in parallel.\n",
19+
"- Run MPI-based Python scripts in both serial and parallel modes using `mpirun`.\n",
20+
"\n",
21+
"\n",
1022
"## Import MPI4Py\n",
1123
"In this example we will kick off a set of processes using mpirun/mpiexec and get them to report in. The first step that needs to be taken is to import mpi4py, as below: "
1224
]

individual_modules/parallel_computing/parallel_fractal.ipynb

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,20 @@
55
"id": "6d6eec76-b358-437a-a96b-50fec15fec13",
66
"metadata": {},
77
"source": [
8-
"# Solving a problem in parallel\n",
8+
"# Example Real World Problem\n",
9+
"\n",
10+
"## Learning Objectives\n",
11+
"\n",
12+
"By the end of this lesson, learners will be able to:\n",
13+
"\n",
14+
"- Understand the concept of embarrassingly parallel problems and how fractal generation fits into this category.\n",
15+
"- Set up a serial approach for generating a fractal, such as the Julia set, using complex numbers and grid creation.\n",
16+
"- Implement a function in Python to calculate the Julia set convergence for each element in the complex grid.\n",
17+
"- Parallelize the fractal generation problem using MPI to improve performance and distribute the workload across multiple processes.\n",
18+
"- Download and run both the serial and parallel versions of the Julia set fractal code.\n",
19+
"- Observe performance improvements when switching from serial to parallel execution, and understand the benefits of parallel computing for complex tasks like fractal generation.\n",
20+
"\n",
21+
"## Solving a problem in parallel\n",
922
"\n",
1023
"In the previous three sections we have built up a foundation enough to be able to tackle a simple problem in parallel. In this case, the problem we will attempt to solve is constructing a fractal. This kind of problem is often known as \"embarassingly parallel\" meaning that each element of the result has no dependency on any of the other elements, meaning that we can solve this problem in parallel without too much difficulty. Let's get started by creating a new script - `parallel_fractal.py```:\n",
1124
"\n",

individual_modules/parallel_computing/simple_communication.ipynb

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,19 @@
55
"id": "9b542725-ab47-48ee-bc04-f0ca5293bc42",
66
"metadata": {},
77
"source": [
8-
"# Simple MPI communication\n",
8+
"# Simple Communication\n",
9+
"\n",
10+
"## Learning Objectives\n",
11+
"\n",
12+
"By the end of this lesson, learners will be able to:\n",
13+
"\n",
14+
"- Understand the concept of distributed memory parallelism in MPI and how it affects variable access across different processes.\n",
15+
"- Implement point-to-point communication in MPI using the `send` and `recv` methods to transfer data between processes.\n",
16+
"- Identify potential issues related to parallel execution when variables are not shared between different ranks.\n",
17+
"- Use non-blocking communication methods in MPI to improve the efficiency of parallel programs.\n",
18+
"- Handle communication involving arrays across processes using MPI.\n",
19+
"\n",
20+
"# Simple MPI Communication\n",
921
"\n",
1022
"As previously discussed, the MPI standard achieves distributed memory parallelism. This means that the same program, running on rank 0, cannot access the variables that the same program has created on a different rank. Let's create a simple python program to demonstrate this (simple_comms.py). As in the previous example, import `mpi4py` and create a communicator object:\n",
1123
"\n",

0 commit comments

Comments
 (0)