<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE FL_Course SYSTEM "https://www.flane.de/dtd/fl_course095.dtd"><?xml-stylesheet type="text/xsl" href="https://portal.flane.ch/css/xml-course.xsl"?><course productid="34486" language="en" source="https://portal.flane.ch/swisscom/en/xml-course/nvidia-faco" lastchanged="2025-07-29T12:18:27+02:00" parent="https://portal.flane.ch/swisscom/en/xml-courses"><title>Fundamentals of Accelerated Computing with OpenACC</title><productcode>FACO</productcode><vendorcode>NV</vendorcode><vendorname>Nvidia</vendorname><fullproductcode>NV-FACO</fullproductcode><version>1.0</version><objective>&lt;ul&gt;
&lt;li&gt;Profile and optimize your CPU-only applications to identify hot spots for acceleration.&lt;/li&gt;&lt;li&gt;Use OpenACC directives to GPU-accelerate your codebase.&lt;/li&gt;&lt;li&gt;Optimize data movement between the CPU and GPU accelerator.&lt;/li&gt;&lt;/ul&gt;</objective><essentials>&lt;ul&gt;
&lt;li&gt;Basic C/C++ or Fortran competency, including familiarity with variable types, loops, conditional statements, functions, and array manipulations.&lt;/li&gt;&lt;li&gt;No previous knowledge of GPU programming is assumed.&lt;/li&gt;&lt;/ul&gt;</essentials><outline>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;	
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Meet the instructor.&lt;/li&gt;&lt;li&gt;Create an account at courses.nvidia.com/join&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Introduction to Parallel Programming&lt;/strong&gt;	
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Learn about parallelism in a conceptual way, as well as how to express it with OpenACC. Topics that will be covered are as follows:&lt;ul&gt;
&lt;li&gt;Introduction to parallelism&lt;/li&gt;&lt;li&gt;The goals of OpenACC&lt;/li&gt;&lt;li&gt;Basic parallelization of code using OpenACC&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Profiling with OpenACC&lt;/strong&gt;	
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Learn how to build and compile an OpenACC code, the importance of profiling, and how to use the NVIDIA Nsight&amp;trade; Systems profiler. Topics that will be covered are as follows:&lt;ul&gt;
&lt;li&gt;Compiling sequential and OpenACC code&lt;/li&gt;&lt;li&gt;The importance of code profiling&lt;/li&gt;&lt;li&gt;Profiling sequential and OpenACC multicore code&lt;/li&gt;&lt;li&gt;Technical introduction to the code used in introductory modules&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Introduction to OpenACC Directives&lt;/strong&gt;	
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Learn how to parallelize your code with OpenACC directives and understand the differences between parallel, kernel, and loop directives. Topics that will be covered are as follows:&lt;ul&gt;
&lt;li&gt;The Parallel directive&lt;/li&gt;&lt;li&gt;The Kernels directive&lt;/li&gt;&lt;li&gt;The Loop directive&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;GPU Programming with OpenACC&lt;/strong&gt;	
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Learn about the differences between GPUs and multicore CPUs, and manage memory with CUDA Unified Memory. Topics that will be covered are as follows:&lt;ul&gt;
&lt;li&gt;Definition of a GPU&lt;/li&gt;&lt;li&gt;Basic OpenACC data management&lt;/li&gt;&lt;li&gt;CUDA Unified Memory&lt;/li&gt;&lt;li&gt;Profiling GPU applications&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Data Management with OpenACC&lt;/strong&gt;	
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Learn how to explicitly manage data movement with OpenACC data directives to reduce data transfers. Topics that will be covered are as follows:&lt;ul&gt;
&lt;li&gt;OpenACC data directive/clauses&lt;/li&gt;&lt;li&gt;OpenACC structured data region&lt;/li&gt;&lt;li&gt;OpenACC unstructured data region&lt;/li&gt;&lt;li&gt;OpenACC update directive&lt;/li&gt;&lt;li&gt;Data management with C/C++ Structs/Classes&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Loop Optimizations with OpenACC&lt;/strong&gt;	
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Understand the various levels of parallelism on a GPU and learn ways to extract more parallelism with OpenACC by optimizing loops in your code. Topics that will be covered are as follows:&lt;ul&gt;
&lt;li&gt;Seq/Auto clause&lt;/li&gt;&lt;li&gt;Independent clause&lt;/li&gt;&lt;li&gt;Reduction clause&lt;/li&gt;&lt;li&gt;Collapse clause&lt;/li&gt;&lt;li&gt;Tile clause&lt;/li&gt;&lt;li&gt;Gang, Worker, Vector&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Final Review&lt;/strong&gt;	
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Review key learnings and answer questions.&lt;/li&gt;&lt;li&gt;Complete the assessment and earn a certificate.&lt;/li&gt;&lt;li&gt;Complete the workshop survey.&lt;/li&gt;&lt;/ul&gt;</outline><objective_plain>- Profile and optimize your CPU-only applications to identify hot spots for acceleration.
- Use OpenACC directives to GPU-accelerate your codebase.
- Optimize data movement between the CPU and GPU accelerator.</objective_plain><essentials_plain>- Basic C/C++ or Fortran competency, including familiarity with variable types, loops, conditional statements, functions, and array manipulations.
- No previous knowledge of GPU programming is assumed.</essentials_plain><outline_plain>Introduction	



- Meet the instructor.
- Create an account at courses.nvidia.com/join
Introduction to Parallel Programming	



- Learn about parallelism in a conceptual way, as well as how to express it with OpenACC. Topics that will be covered are as follows:
- Introduction to parallelism
- The goals of OpenACC
- Basic parallelization of code using OpenACC
Profiling with OpenACC	



- Learn how to build and compile an OpenACC code, the importance of profiling, and how to use the NVIDIA Nsight™ Systems profiler. Topics that will be covered are as follows:
- Compiling sequential and OpenACC code
- The importance of code profiling
- Profiling sequential and OpenACC multicore code
- Technical introduction to the code used in introductory modules
Introduction to OpenACC Directives	



- Learn how to parallelize your code with OpenACC directives and understand the differences between parallel, kernel, and loop directives. Topics that will be covered are as follows:
- The Parallel directive
- The Kernels directive
- The Loop directive
GPU Programming with OpenACC	



- Learn about the differences between GPUs and multicore CPUs, and manage memory with CUDA Unified Memory. Topics that will be covered are as follows:
- Definition of a GPU
- Basic OpenACC data management
- CUDA Unified Memory
- Profiling GPU applications
Data Management with OpenACC	



- Learn how to explicitly manage data movement with OpenACC data directives to reduce data transfers. Topics that will be covered are as follows:
- OpenACC data directive/clauses
- OpenACC structured data region
- OpenACC unstructured data region
- OpenACC update directive
- Data management with C/C++ Structs/Classes
Loop Optimizations with OpenACC	



- Understand the various levels of parallelism on a GPU and learn ways to extract more parallelism with OpenACC by optimizing loops in your code. Topics that will be covered are as follows:
- Seq/Auto clause
- Independent clause
- Reduction clause
- Collapse clause
- Tile clause
- Gang, Worker, Vector
Final Review	



- Review key learnings and answer questions.
- Complete the assessment and earn a certificate.
- Complete the workshop survey.</outline_plain><duration unit="d" days="1">1 day</duration><pricelist><price country="US" currency="USD">500.00</price><price country="DE" currency="EUR">500.00</price><price country="AT" currency="EUR">500.00</price><price country="SE" currency="EUR">500.00</price><price country="SI" currency="EUR">500.00</price><price country="GB" currency="GBP">420.00</price><price country="IT" currency="EUR">500.00</price><price country="CA" currency="CAD">690.00</price></pricelist><miles/></course>