Thank you for sending your enquiry! One of our team members will contact you shortly.
Thank you for sending your booking! One of our team members will contact you shortly.
Duration 28 hours
Course Outline
Introduction
- Defining OpenACC
- Comparing OpenACC with OpenCL, CUDA, and SYCL
- Overview of OpenACC features and architectural design
- Establishing the development environment
Getting Started
- Creating an OpenACC project using Visual Studio Code
- Examining the project structure and constituent files
- Compiling and executing the program
- Generating output via printf and fprintf
OpenACC Directives and Clauses
- Comprehending OpenACC directives and clauses
- Employing parallel directives to define parallel regions
- Utilizing kernels directives for compiler-managed parallelism
- Applying loop directives to parallelize iterations
- Controlling data movement through data directives
- Synchronizing data using update directives
- Enhancing data reuse via cache directives
- Defining device functions with routine directives
- Managing event synchronization with wait directives
OpenACC API
- Understanding the function of the OpenACC API
- Retrieving device information and capabilities
- Configuring device number and type
- Managing errors and exceptions
- Generating and synchronizing events
OpenACC Libraries and Interoperability
- Exploring OpenACC libraries and interoperability standards
- Leveraging math, random, and complex number libraries
- Integrating with other programming models such as CUDA, OpenMP, and MPI
- Interoperating with GPU-specific libraries like cuBLAS and cuFFT
OpenACC Tools
- Overview of OpenACC tools in the development lifecycle
- Techniques for profiling and debugging OpenACC applications
- Conducting performance analysis using PGI Compiler, NVIDIA Nsight Systems, and Allinea Forge
Optimization
- Identifying factors that influence OpenACC program performance
- Improving data locality and minimizing transfer overhead
- Optimizing loop parallelism and fusion strategies
- Refining kernel parallelism and fusion
- Enhancing vectorization and auto-tuning
Summary and Next Steps
Requirements
- Familiarity with C/C++ or Fortran programming languages and core parallel programming concepts
- Foundational knowledge of computer architecture and memory hierarchy
- Proficiency with command-line tools and code editors
Target Audience
- Developers seeking to learn how to utilize OpenACC for programming heterogeneous devices and exploiting parallelism
- Developers aiming to write portable, scalable code capable of running across diverse platforms and devices
- Programmers interested in exploring high-level heterogeneous programming concepts and enhancing code productivity