OpenACC on NVIDIA K20

I’m running a FORTRAN program that’s using OpenACC and the pgf90 compiler. The program is running on a machine with 4 K20’s in it.

In the code I have an OpenACC data region and inside that a number of kernels. I want to run all the code on a single K20, but currently when I’m running the code it’s running on multiple of the GPGPUs, and therefore not finding data that should be available. Errors like this are what I’m getting:

launch CUDA kernel file=/home/h018/adrianj/Turbine/src_true_2D_18_09_2013/update.f function=update_bhb line=1189 device=1 grid=1x7 block=128
launch CUDA kernel file=/home/h018/adrianj/Turbine/src_true_2D_18_09_2013/update.f function=update_bhb line=1577 device=1 grid=1x7 block=128
FATAL ERROR: data in PRESENT clause was not found on device 2: name=hbstb
file:/home/h018/adrianj/Turbine/src_true_2D_18_09_2013/update.f update_bhb line:1611


Is there any way to restrict all the kernels in a data region to run on a single GPGPU?

I am setting acc_set_device_num (to 1 in this case) but it doesn’t seem to be stopping multiple devices being used.

Hi adrianj,

It’s using the same device though the output is confusing. In openACC devices are numbered 1 to N while Nvidia numbers them 0 to N-1. Hence the launch info is printing the Nvidia device 1 (the second device) but the OpenACC error is listing the second device as 2.

  • Mat

Thanks for the reply, makes sense now.