Hi Sebastian,
thanks for your interest!
Sebastian Galindo:
1. Is there some link to read more about the features mentioned?
(Example: OpenACC bind clause)
2. Do you recommend any docs or references for getting familiarized
with OpenACC related code?
3. Do you want me to look or study some specific region of the code?
In general, what matters at the end is the specification; if something
is unclear, it can be clarified (up to fixing/changing the
specification). The latest is 3.4
→ https://www.openacc.org/specification ; GCC supports most of 2.6/2.7.
As OpenACC introduction, have a look at https://www.openacc.org/resources
On the GCC side, there is at https://gcc.gnu.org/onlinedocs/libgomp/ ,
https://gcc.gnu.org/wiki/OpenACC and https://gcc.gnu.org/wiki/Offloading
(some wiki pages are a bit outdated).
Most OpenACC features consists of parsing a construct in the C, C++ and
Fortran compiler, some generic code handling – and at the end calling
into the runtime library. API routines only affect the runtime
In the compiler and in the runtime: OpenACC and OpenMP sometimes use
exactly the same code path and sometimes separate code paths, which can
be sometimes confusing.
The run-time side is libgomp/ – which used for both OpenMP and OpenACC;
the host-side code for running on GPUs is in
libgomp/plugin/plugin-{gcn,nvptx}.c. Otherwise libgomp is both compiled
on the host and also (in a reduced form) on the GPU.
Regarding bind: I think the description is somewhat clear in the
specification. For the identifier topic: In Fortran, names are lowercase
and have by default a '_' suffix and, in C++, the function signature is
manged into the name.
Tobias