OpenACC is a directives-based parallel programming model created for programming massively parallel processors. The model provides performance on – and portability across – a wide variety of platforms, including host-GPU, multi-core, and many-core processors. OpenACC directives expose parallelism in C, C++, or Fortran programs, which compilers use to provide optimizations for these different architectures.
OpenACC directives are complementary to and interoperate with existing HPC programming models including OpenMP, MPI, and CUDA.
The OpenACC developer inserts directives -- in the form of Fortran comment statements or C/C++ pragmas –- into his application that are ignored if the compiler does not support the standard, or if the relevant compile-time flag is not set. OpenACC compilers automatically map compute-intensive loops to parallel or vector execution units. OpenACC compilers can manage data movement between CPU host memory and a separate memory on the accelerator.
The OpenACC API provides the programmer with directives to override the compiler's mapping and data movement decisions, when necessary.
With OpenACC, programmers can quickly determine if their code will benefit from acceleration. OpenACC requires fewer structural code changes than low-level accelerator programming models like CUDA or OpenCL.