[Bug testsuite/81690] libgomp.c/{target-32,thread-limit-2}.c fail for nvptx: missing usleep

burnus at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Thu Sep 19 11:14:00 GMT 2019


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81690

Tobias Burnus <burnus at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |burnus at gcc dot gnu.org

--- Comment #4 from Tobias Burnus <burnus at gcc dot gnu.org> ---
Regarding the code in comment 1 (which additionally lacks a "void" in the
decl):
The omp_is_initial_device() is only resolved at run time - hence, I think the
linker still wants to see "usleep".


I was wondering whether one shouldn't clone the files and use:

/* { dg-do run { target { { ! openacc_nvidia_accel_selected } && { !
openacc_amdgcn_accel_selected } } } } */

And the clone without "!" but with "||".


Other remarks:

* libgomp.c/target-32.c fails at run time with:
    libgomp: GOMP_OFFLOAD_async_run unimplemented
as soon as one got passed the usleep issue (e.g. by replacing it by a no-op)

* libgomp.c/thread-limit-2.c compiles - but it doesn't do anything on the GPU
due to:
  #pragma omp target if (0)


Regarding the do_sleep replacement:

* One needs to use additionally __attribute__((always_inline)) otherwise, it
fails with:
  function 'do_sleep' has been referenced in offloaded code but hasn't been
marked to be included in the offloaded code

* If one tries it with:
   #pragma omp declare target
that fails to compile with


libgomp.c/thread-limit-2.c compiles - but it doesn't do anything on the GPU due
to:
  #pragma omp target if (0)
many errors of the kind:
  .omp_data_kinds.24 / .omp_data_sizes.26 has been referenced in offloaded code
but hasn't been marked to be included in the offloaded code


More information about the Gcc-bugs mailing list