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.
Course Outline
Introduction
- Defining OpenACC
- Comparing OpenACC with OpenCL, CUDA, and SYCL
- Overview of OpenACC features and architectural components
- Configuring the development environment
Getting Started
- Creating an OpenACC project within Visual Studio Code
- Exploring project structure and file organization
- Compiling and executing the program
- Displaying output using printf and fprintf
OpenACC Directives and Clauses
- Understanding OpenACC directives and clause usage
- Applying parallel directives to establish parallel regions
- Utilizing kernels directives for compiler-managed parallelism
- Using loop directives to parallelize iterations
- Managing data movement via data directives
- Synchronizing data with update directives
- Enhancing data reuse through cache directives
- Creating device functions using routine directives
- Synchronizing events with wait directives
OpenACC API
- Understanding the role of the OpenACC API
- Querying device information and capabilities
- Setting device number and type
- Handling errors and exceptions
- Creating and synchronizing events
OpenACC Libraries and Interoperability
- Understanding OpenACC libraries and interoperability standards
- Utilizing math, random, and complex number libraries
- Integrating with other programming models (CUDA, OpenMP, MPI)
- Integrating with specific GPU libraries (cuBLAS, cuFFT)
OpenACC Tools
- Understanding the role of OpenACC tools in the development workflow
- Profiling and debugging OpenACC programs
- Conducting performance analysis using PGI Compiler, NVIDIA Nsight Systems, and Allinea Forge
Optimization
- Identifying factors that impact OpenACC program performance
- Optimizing data locality and minimizing transfer overhead
- Enhancing loop parallelism and applying fusion techniques
- Optimizing kernel parallelism and fusion
- Improving vectorization and utilizing auto-tuning
Summary and Next Steps
Requirements
- Familiarity with C/C++ or Fortran languages, as well as core parallel programming concepts
- Foundational knowledge of computer architecture and memory hierarchy
- Practical experience with command-line tools and code editors
Target Audience
- Developers aiming to master OpenACC for programming heterogeneous devices and exploiting parallelism
- Developers seeking to create portable and scalable code capable of running on various platforms and devices
- Programmers interested in exploring high-level aspects of heterogeneous programming to enhance code productivity
28 Hours