Overview
OpenMP (Open Multi-Processing) is an API for shared memory multiprocessing programming. With OpenMP, programmers are able to develop parallel applications for platforms from desktops to non-shared memory systems.
This instructor-led, live training (online or onsite) is aimed at software engineers who wish to develop parallel applications using OpenMP.
By the end of this training, participants will be able to:
- Understand and use parallel programming with Fortran in OpenMP.
- Calculate fractals in parallel to render multiple pixels and characters.
- Implement vector programming with SIMD extensions for HPC systems.
- Add parallel blocks for specifying shared memory parallelism.
Format of the Course
- Interactive lecture and discussion.
- Lots of exercises and practice.
- Hands-on implementation in a live-lab environment.
Course Customization Options
- To request a customized training for this course, please contact us to arrange.
Requirements
- An understanding of HPC Systems
- Parallel programming experience
Audience
- Software Engineers
Course Outline
Introduction
Multi-Threading Programming
- Syntax and constructs
- Clauses and sections
Offloading Support
- Directives and target data
- If, device, and map clauses
Thread Safety and Sharing
- Atomicity
- Constructs, locks, and directives
- Shared clauses
Preparing the Development Environment
- Installing and configuring OpenMP
- Installing and configuring VMWare
- Setting up an HPC with VMWare
Parallel Programming in OpenMP
- Creating a hello world code example and demonstration
- Worksharing constructs
- Working with for loops
- Using sectional parallelism
- Using fractals
- Adding vectors
Vector Programming and SIMD Extensions
- Vectorizing loops
- Annotating user-defined functions
- Using functions that support SIMD annotation
- Generating a vector function
- Registering vector return values
Fortran in OpenMP
- Worksharing constructs
- Synchronizing constructs
- Using data scope attribute clauses and other clauses
- Working with OpenMP-Runtime Library
Parallel Blocks
- Specifying the number of threads
- Executing parallel statement blocks
- Distinguishing the running threads in a parallel block
- Using omp critical directives
Summary and Conclusion