The purpose of this post is to take a snapshot of my understanding before I begin working on project 2: implementing (two) synchronization barriers. Although I picked up some theoretical knowledge from both this course (i.e. advanced operating systems) and GIOS (i.e. graduate introduction to operating systems) on barrier synchronization, I actually never implemented barriers so I’m very much looking forward to working on this project and bridging the gap between theory and practice.
What I do know
- Conceptual understanding of the various types of barriers (e.g. centralized, tree based, MCS, tournament, dissemination)
- Purpose of sense reversal (i.e. determine which barrier one is in)
- Advantages of using an MCS barrier over a dissemination barrier when using a shared memory bus due to serialization and lack of parallel messages
What I don’t know
- What OpenMP is and how it is different than MPI. Are the two the same or related somehow?
- How the various barriers will perform based on the architecture (i.e. 8 way shared multi-processor system)
- How to hook the barriers into some higher level user application? Will I be using the barriers for a producer/consumer type of application? Will I need to write that application or just the barrier itself?
- What primitives will be available? Will I need to leverage some hardware atomic operations (my guess is yes)