Skip to content

Latest commit

 

History

History
51 lines (30 loc) · 1.57 KB

File metadata and controls

51 lines (30 loc) · 1.57 KB

OpenMP Device Check

OpenMP uses host-device programming model. Multiple devices are connected to a host. Initial thread begins execution on the host. Tasks are offloaded to devices. In this model a GPU is a device. For GPU target offloading to work, we need to make sure that at least one GPU is connected to OpenMP. The following program checks and reports the number of devices connected to OpenMP.

The cell below with can be edited in-place. When executed, the cell will save the file device_check.cpp in the current directory.

%%writefile device_check.cpp
#include<stdio.h>
#include<omp.h>

int main() {
  unsigned int devs = omp_get_num_devices();

  if (devs > 0) 
    printf("There are %d devices\n", omp_get_num_devices());
  else
    printf("No devices connected. OpenMP GPU offloading will not work.\n"); 
    return 0;
}
Overwriting device_check.cpp

We can compile the code with the following

!g++ -o device_check device_check.cpp -fno-stack-protector -foffload=nvptx-none -fopenmp

Note, in this instance the -fno-stack-protector and -foffload=nvptx-none flags are not necessary since we are not offloading anything to the GPU. Using the flags doesn't hurt in anayway and we include them here just as a matter of practice.

Now let's run the code.

!./device_check
There are 2 devices

In general, the number of devices should match the number of GPUs on your system/compute node. If the program shows no devices are connected then OpenMP target offload enviroment has not been set up properly.