NAG expertise. Your productive team.
Your users, developers and managers can all benefit from NAG's highly regarded training programmes.
Customized training seminars are available for any NAG product. We regularly deliver our highly-regarded hands-on software engineering and numerical computing training, including our unrivalled range of HPC programming courses. NAG can also provide long term mentoring and skills development for your HPC applications and numerical computing development staff. Specialized mentoring and development programmes are also available for HPC managers.
For full detail of these courses, including availability, costs and prerequisites please get in touch with your regional NAG office or NAG technical partner.
NAG courses are modular and can be delivered to match your particular needs.
Regular and custom training courses on the features and use of the NAG Libraries, NAG Toolbox for MATLAB, NAG Numerical Routines for GPUs and NAG Fortran Compiler are provided for users.
Tailored Training Seminars
Training programmes can be arranged for most of our products. Seminars can be tailored to your particular needs and can take place at a suitable location of your choice.
Software Engineering and HPC Programming
NAG offer in-depth training courses in key aspects of parallel computing.
The Numerical Algorithms Group run regular expert led training courses to extend your knowledge of parallel programming and code optimization for multicore, manycore and cluster computing environments.
Courses are available (among others) for:
- Parallel Programming with MPI
- Parallel Programming with OpenMP
- Mixed Mode Parallel Programming
- Algorithmic Differentiation
- OpenCL Programming
- CUDA Programming
- Best Practice in Parallel Software Development (advanced)
The courses are delivered by experts in parallel computing techniques. The trainers are also experienced practitioners who share actual lessons learnt from both failure and success as well as explaining the theoretical aspects of parallel programming.
All NAG parallel programming courses are supported by practical tutorials so attendees have the opportunity to try out their new skills with real parallel coding exercises.
Parallel programming with MPI
MPI (Message Passing Interface) is the key standard for parallel programming, defining how concurrent processes communicate to complete a task in a shorter time. This course introduces the concepts and terminology of High Performance Computing (HPC), before providing a detailed introduction to programming HPC machines using MPI. After an in-depth look at point-to-point and collective communication, we study some more advanced topics: Cartesian topologies, MPI derived data types, user-defined binary operators, groups and communicators.
Parallel programming with OpenMP
OpenMP is the standard for writing parallel codes to run on a shared memory computer, node or multicore chip. It involves adding compiler directives to an existing serial code. This course introduces the concepts and essential syntax of OpenMP. Performance and memory issues are also discussed.
Mixed mode parallel programming
We are now firmly in the multicore age. In this course new architectures are described, and their impact on performance will be examined by use of the profiling tools. The use of mixed mode OpenMP/MPI as a programming paradigm are examined. Additionally this course will introduce the use of System V shared memory segments.
Algorithmic (also known as Automatic) differentiation (AD) is a method for computing sensitivities of outputs of numerical programs with respect to its inputs both accurately (to machine precision) and efficiently. The two basic modes of AD – forward and reverse – and combinations thereof yield products of a vector with the Jacobian, its transpose, or the Hessian, respectively.
Introduction to OpenCL Programming
Discover how OpenCL is used to write code for GPGPU platforms.
Introduction to CUDA Programming
Discover how CUDA is used to write code for GPGPU platforms.
Further parallel software development (an advanced course)
This course is designed for those with parallel programming experience who are embarking on a major software development project. The aim is to provide attendees with the skill set to write efficient, robust and portable code, and the tools to assist in this process.
This course includes: Design; Optimization; Parallel I/O; Testing; Benchmarking; Portability; Maintainability.
Attendees have the opportunity to work on their own code during the course.
NAG run the training courses for HECToR .