'Can anyone explain how to use OpenACC in GCC?

I am using WSL Ubuntu. And use GCC to compile my C++ code.

I am trying to use OpenACC to parallelize my code. I heard that I can use OpenACC with GCC.

So after I install Ubuntu, I installed GCC.

And then I typed as follows:

$ g++ -fopenacc -o t testfile.cpp

As far as I know, -fopenacc should enable me to use OpenACC inside my code.

However, I got an message saying:

lto-wrapper: fatal error: could not find accel/nvptx-none/mkoffload in /usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/ (consider using ‘-B’)

So I guess I missed something.

Does anyone know how to use OpenACC with GCC?


Edited:

I tried:

sudo apt-get install gcc-9-offload-nvptx

And then the error message is now changed to:

lto1: error: ‘-fcf-protection=full’ is not supported for this target
mkoffload: fatal error: x86_64-linux-gnu-accel-nvptx-none-gcc-9 returned 1 exit status

compilation terminated.

lto-wrapper: fatal error: /usr/lib/gcc/x86_64-linux-gnu/9//accel/nvptx-none/mkoffload returned 1 exit status
compilation terminated.

/usr/bin/ld: error: lto-wrapper failed

collect2: error: ld returned 1 exit status


Solution 1:[1]

I got one step further with:

gcc-10 -O2 -ffast-math -fopenacc -fopt-info-all-omp -fcf-protection=none -foffload=nvptx laplace2dkernels.c

but just to find the next problem:

gcc-10: fatal error: GCC is not configured to support nvptx as offload target
compilation terminated

So it seems they only compiled it for AMD GCN. If you use

gcc-10 -O2 -ffast-math -fopenacc -fopt-info-all-omp -fcf-protection=none -foffload=nvptx-none laplace2dkernels.c

>laplace2dkernels.c:74:9: optimized: assigned OpenACC seq loop parallelism
>/usr/bin/ld: /tmp/ccYd0cZe.crtoffloadtable.o: warning: relocation against >`__offload_vars_end' in read-only section `.rodata'

It compiles but then when running it misses:

libgomp: while loading libgomp-plugin-gcn.so.1: libgomp-plugin-gcn.so.1: cannot open shared object file: No such file or directory

I do not need to install those libraries because I want to get it to run with my Nvidia card.

With the PGI compilers everything worked fine.

NOTE: I am also using WSL and special NVIDIA drivers to allow for GPU passthrough.

Solution 2:[2]

Here's what worked for me for a Tiny C++ stencil code with OpenACC directives, after installing gcc-10-offload-nvptx:

g++ -c -g -O -fopenacc -foffload=nvptx-none -fcf-protection=none -foffload=-misa=sm_35 -fno-stack-protector stencil_acc.cxx

g++ -o stencil_acc -g -O -fopenacc -foffload=nvptx-none -fcf-protection=none -foffload=-misa=sm_35 -fno-stack-protector util.o stencil_acc.o

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Jérôme Richard
Solution 2 Adrian Mole