- An understanding of C/C++ or Fortran language and parallel programming concepts
- Basic knowledge of computer architecture and memory hierarchy
- Experience with command-line tools and code editors
Audience
- Developers who wish to learn how to use OpenACC to program heterogeneous devices and exploit their parallelism
- Developers who wish to write portable and scalable code that can run on different platforms and devices
- Programmers who wish to explore the high-level aspects of heterogeneous programming and optimize their code productivity
OpenACC is an open standard for heterogeneous programming that enables a code to run on different platforms and devices, such as multicore CPUs, GPUs, FPGAs, and others.
This instructor-led, live training (online or onsite) is aimed at beginner-level to intermediate-level developers who wish to use OpenACC to program heterogeneous devices and exploit their parallelism.
By the end of this training, participants will be able to:
- Set up an OpenACC development environment.
- Write and run a basic OpenACC program.
- Annotate code with OpenACC directives and clauses.
- Use OpenACC API and libraries.
- Profile, debug, and optimize OpenACC programs.
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.
Introduction
- What is OpenACC?
- OpenACC vs OpenCL vs CUDA vs SYCL
- Overview of OpenACC features and architecture
- Setting up the development environment
Getting Started
- Creating an OpenACC project in Visual Studio Code
- Exploring project structure and files
- Compiling and running the program
- Displaying output with printf and fprintf
OpenACC Directives and Clauses
- Understanding OpenACC directives and clauses
- Using parallel directives for creating parallel regions
- Using kernels directives for compiler-managed parallelism
- Using loop directives for parallelizing loops
- Managing data movement with data directives
- Synchronizing data with update directives
- Improving data reuse with cache directives
- Creating device functions with routine directives
- Synchronizing events with wait directives
OpenACC API
- Understanding the role of 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
- Using math, random, and complex libraries
- Integrating with other models (CUDA, OpenMP, MPI)
- Integrating with GPU libraries (cuBLAS, cuFFT)
OpenACC Tools
- Understanding OpenACC tools in development
- Profiling and debugging OpenACC programs
- Performance analysis with PGI Compiler, NVIDIA Nsight Systems, Allinea Forge
Optimization
- Factors affecting OpenACC program performance
- Optimizing data locality and reducing transfers
- Optimizing loop parallelism and fusion
- Optimizing kernel parallelism and fusion
- Optimizing vectorization and auto-tuning
Summary and Next Steps
United Arab Emirates - GPU Programming with OpenACC
Qatar - GPU Programming with OpenACC
Egypt - GPU Programming with OpenACC
Saudi Arabia - GPU Programming with OpenACC
South Africa - GPU Programming with OpenACC
Brasil - GPU Programming with OpenACC
Canada - GPU Programming with OpenACC
中国 - GPU Programming with OpenACC
香港 - GPU Programming with OpenACC
澳門 - GPU Programming with OpenACC
台灣 - GPU Programming with OpenACC
USA - GPU Programming with OpenACC
Österreich - GPU Programming with OpenACC
Schweiz - GPU Programming with OpenACC
Deutschland - GPU Programming with OpenACC
Czech Republic - GPU Programming with OpenACC
Denmark - GPU Programming with OpenACC
Estonia - GPU Programming with OpenACC
Finland - GPU Programming with OpenACC
Greece - GPU Programming with OpenACC
Magyarország - GPU Programming with OpenACC
Ireland - GPU Programming with OpenACC
Luxembourg - GPU Programming with OpenACC
Latvia - GPU Programming with OpenACC
España - GPU Programming with OpenACC
Italia - GPU Programming with OpenACC
Lithuania - GPU Programming with OpenACC
Nederland - GPU Programming with OpenACC
Norway - GPU Programming with OpenACC
Portugal - GPU Programming with OpenACC
România - GPU Programming with OpenACC
Sverige - GPU Programming with OpenACC
Türkiye - GPU Programming with OpenACC
Malta - GPU Programming with OpenACC
Belgique - GPU Programming with OpenACC
France - GPU Programming with OpenACC
日本 - GPU Programming with OpenACC
Australia - GPU Programming with OpenACC
Malaysia - GPU Programming with OpenACC
New Zealand - GPU Programming with OpenACC
Philippines - GPU Programming with OpenACC
Singapore - GPU Programming with OpenACC
Thailand - GPU Programming with OpenACC
Vietnam - GPU Programming with OpenACC
India - GPU Programming with OpenACC
Argentina - GPU Programming with OpenACC
Chile - GPU Programming with OpenACC
Costa Rica - GPU Programming with OpenACC
Ecuador - GPU Programming with OpenACC
Guatemala - GPU Programming with OpenACC
Colombia - GPU Programming with OpenACC
México - GPU Programming with OpenACC
Panama - GPU Programming with OpenACC
Peru - GPU Programming with OpenACC
Uruguay - GPU Programming with OpenACC
Venezuela - GPU Programming with OpenACC
Polska - GPU Programming with OpenACC
United Kingdom - GPU Programming with OpenACC
South Korea - GPU Programming with OpenACC
Pakistan - GPU Programming with OpenACC
Sri Lanka - GPU Programming with OpenACC
Bulgaria - GPU Programming with OpenACC
Bolivia - GPU Programming with OpenACC
Indonesia - GPU Programming with OpenACC
Kazakhstan - GPU Programming with OpenACC
Moldova - GPU Programming with OpenACC
Morocco - GPU Programming with OpenACC
Tunisia - GPU Programming with OpenACC
Kuwait - GPU Programming with OpenACC
Oman - GPU Programming with OpenACC
Slovakia - GPU Programming with OpenACC
Kenya - GPU Programming with OpenACC
Nigeria - GPU Programming with OpenACC
Botswana - GPU Programming with OpenACC
Slovenia - GPU Programming with OpenACC
Croatia - GPU Programming with OpenACC
Serbia - GPU Programming with OpenACC
Bhutan - GPU Programming with OpenACC