Difference between revisions of "DPS921/OpenACC vs OpenMP Comparison"

From CDOT Wiki
Jump to: navigation, search
m (OpenACC vs OpenMP Performance Comparison)
m
Line 1: Line 1:
= OpenACC vs OpenMP Performance Comparison =
+
= Project Overview =
 
The idea of this project is to introduce OpenACC as a parallel processing library, compare how parallelization is done in different libraries, and identify benefits of using each of the libraries. According to description of both libraries, OpenACC does parallelization more automatically whereas OpenMP allows developers to manually set regions to parallelize and assign to threads.
 
The idea of this project is to introduce OpenACC as a parallel processing library, compare how parallelization is done in different libraries, and identify benefits of using each of the libraries. According to description of both libraries, OpenACC does parallelization more automatically whereas OpenMP allows developers to manually set regions to parallelize and assign to threads.
The deliverable of this project would be a performance comparison between OpenMP and OpenACC for a set of tasks, and a discussion on when should each of them be used.
+
The deliverable of this project would be a introduction to OpenACC along with performance comparison between OpenMP and OpenACC, and a discussion on usage of each one.
  
 
== Group Members ==
 
== Group Members ==
Line 11: Line 11:
  
 
== Progress ==
 
== Progress ==
 +
 +
 +
= OpenACC =
 +
 +
== What is OpenACC ==
 +
OpenAcc (Open Accelerators) is a programming standard for parallel computing on accelerators such as GPUs, mainly targets Nvidia GPUs. OpenACC is designed to simplify GPU programming, unlike CUDA and OpenCL where you need to write your programs in a different way to achieve GPU acceleration, OpenACC takes a similar approach as OpenMP, which is inserting directives into the code to offload computation onto GPUs and parallelize the code at CUDA core level. It is possible for programmers to create efficient parallel OpenACC code with only minor changes to a serial CPU code.
 +
 +
=== Example ===
 +
 +
== GPU offloading ==
 +
[image]
 +
 +
== Installation ==
 +
Originally, OpenACC compilation is supported by the PGI compiler which requires subscription, there has been new options in recent years.
 +
 +
=== Nvidia HPC SDK ===
 +
Evolved from PGI Compiler community edition
 +
 +
=== GCC ===
 +
Latest GCC version, GCC 10 has support to OpenACC 2.6
 +
 +
 +
= OpenMP vs OpenACC =
 +
 +
== OpenMP GPU offloading ==
 +
OpenMP started support of offloading to accelerators starting OpenMP 4.0 using `target` constructs
 +
 +
== Code comparison ==

Revision as of 15:07, 30 November 2020

Project Overview

The idea of this project is to introduce OpenACC as a parallel processing library, compare how parallelization is done in different libraries, and identify benefits of using each of the libraries. According to description of both libraries, OpenACC does parallelization more automatically whereas OpenMP allows developers to manually set regions to parallelize and assign to threads. The deliverable of this project would be a introduction to OpenACC along with performance comparison between OpenMP and OpenACC, and a discussion on usage of each one.

Group Members

1. Ruiqi Yu

2. Hanlin Li

3. Le Minh Pham

Progress

OpenACC

What is OpenACC

OpenAcc (Open Accelerators) is a programming standard for parallel computing on accelerators such as GPUs, mainly targets Nvidia GPUs. OpenACC is designed to simplify GPU programming, unlike CUDA and OpenCL where you need to write your programs in a different way to achieve GPU acceleration, OpenACC takes a similar approach as OpenMP, which is inserting directives into the code to offload computation onto GPUs and parallelize the code at CUDA core level. It is possible for programmers to create efficient parallel OpenACC code with only minor changes to a serial CPU code.

Example

GPU offloading

[image]

Installation

Originally, OpenACC compilation is supported by the PGI compiler which requires subscription, there has been new options in recent years.

Nvidia HPC SDK

Evolved from PGI Compiler community edition

GCC

Latest GCC version, GCC 10 has support to OpenACC 2.6


OpenMP vs OpenACC

OpenMP GPU offloading

OpenMP started support of offloading to accelerators starting OpenMP 4.0 using `target` constructs

Code comparison