Course Code: gpuprogopenacc
Duration: 28 hours
Prerequisites:
  • 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
Overview:

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.
Course Outline:

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

Sites Published:

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

Nepal - GPU Programming with OpenACC

Uzbekistan - GPU Programming with OpenACC