Posted: 1 Dec 2015 | 10:16
I wanted to share my thoughts after our recent group work during the Programming Skills course. I found the concept of people working together on a project to be extremely similar to the concept of parallel programming, so here are my observations on parallel programming versus group work:
1. Thread/Process = Member of a team
2. Domain decomposition = Decomposition of work among team members (done in such a way as to minimize inter-member communication (IMC) and maximize individual work between two communications)
3. Load balancing = Load balancing (dividing work among team members in such a way that the team does not have to wait for one member to finish his/her share in the end)
4. Thread synchronisation = Synchronisation among team members (finishing individual modules before integrating them; propagating coding conventions before starting any coding)
5. Scatter operation = The process of assigning tasks to team members
6. Gather operation = Combining each team member's contribution into a common result
7. Reduction operation = Reduction performed on array of Git repositories using 'git-merge' as the reduction operator. Produces a single Git repository as the output.
8. Critical section = Traditional version-control systems' approach to global locking a file so that only one person can edit it.
... And the general principle of combining each thread's (team member's) individual work into a single program output (project deliverable) is the same in parallel programming and group work.
So, now I can tell people that I am actually studying management :)
Alex Nigay, MSc in High Performance Computing