Use of OpenACC over OpenCL?

Actually, OpenACC is a lot like OpenMP but targeting acceleration devices such as GPUs. Instead of having an OpenMP #pragma parallel for parallelizing a loop for a multi-threaded CPU, OpenACCs #pragma acc kernels will turn the contained loops into kernel functions that are executed on the GPU. Much of what has to be done now manually (e.g. transferring the data from and to device) is hidden by the compiler. Thus, you don't have two separate compilation units.

Now here's the problem with OpenACC and my answer to why adoption right now, is very low: There is no support from GCC or Clang. Of course there are commercial solutions from PGI and CAPS but without these other compilers you will alienate many users.


Update: gcc6 now has parts of it working:

"GCC 6 release series includes a much improved implementation of the OpenACC 2.0a specification."

See https://gcc.gnu.org/wiki/OpenACC


Update: GCC6 + 7 actively integrating OpenACC specs

See https://gcc.gnu.org/wiki/OpenACC