[Openmp-dev] Issues with target regions in executable and library

Joachim Protze via Openmp-dev openmp-dev at lists.llvm.org
Tue Jul 3 10:11:59 PDT 2018


Hi all,

one of my colleagues reported an issue, when having target regions in 
the executable and a library.
The problem is that during the execution for both target regions the 
same code (coming from the library) is executed. Is this a bug, known 
bug, or does this not work by design?

I run below experiment with a quite recent trunk version of LLVM and the 
output is:

Hello from foo. 0
Hello from foo. 0

Which also suggests that the code was actually offloaded to the device.
Also specifying device(0) and device(1) doesn't help to see the right 
result.

Only adding if(0) or executing the code on a machine with no device 
provides the expected result:

Hello from main. 1
Hello from foo. 1


We appreciate any hints how this could be fixed.

Best
Joachim


----- main.c -----

#include <stdio.h>
#include <omp.h>

void foo(){
   #pragma omp target
   {
     printf("Hello from foo. %i\n",omp_is_initial_device());
   }
}

----- lib.c -----

#include <stdio.h>
#include <omp.h>

void foo();

int main(){
   #pragma omp target
   {
     printf("Hello from main. %i\n",omp_is_initial_device());
   }
   foo();

   return 0;
}

----- compile & run -----

clang -shared -fPIC -fopenmp -fopenmp-targets=nvptx64-nvidia-cuda -g 
lib.c -o libmylib.so

clang -fopenmp -fopenmp-targets=nvptx64-nvidia-cuda main.c -L. -lmylib 
-Wl,--rpath,.

./a.out


More information about the Openmp-dev mailing list