Table of Contents
OpenACC
Pragma-based programming model for the use of GPGPU. Much like OpenMP. Sounds open, but is only supported by NVIDIA and a spot of other members (CAPS, CRAY and PGI). At the moment no support in GCC, planned in GCC 4.8 4.9.
Sometime OpenACC will be merged into OpenMP 4.0, but at the moment OpenACC prevents the use of OpenMP
Introduction and excersices
Examples
Example in C
pragma acc kernels for (int i = 0; i &< n; ++i) { yi = a*xi + yi; } ...
#pragma acc directive [clause , clause] …] Often followed by a structured code block
Example in Fortran
subroutine saxpy(n, a, x, y) real x, y, a integer n, i $!acc kernels do i=1,n y(i) = a*x(i)+y(i) enddo $!acc end kernels end subroutine saxpy ... $ Perform SAXPY on 1M elements call saxpy (2**20, 2.0, x_d, y_d) ...
!$acc directive [clause , clause] …]
Often paired with a matching end directive surrounding a structured code block !$ acc end directive
Compiler and parameters
PGI-Compiler
Check ACC-code parts:
pgcc -acc -Minfo=accel exercise14.c
Compile code including ACC-pragmas:
pgcc -acc exercise14.c -o exercise14